이 문제는 대한 상이다 ais523 에 대한 수상 은 " 올해의 신인 '카테고리를" PPCG 2016 최고의 ". 축하합니다!
BackFlip 은 ais523 사용자가 만든 난해한 프로그래밍 언어로 , 30 가지가 넘는 흥미로운 esolang을 만들었습니다 .
BackFlip은 Befunge 또는 > <> 와 같은 2D 언어 로, 명령 포인터가 텍스트 그리드 (프로그램)를 가로 지르고 위, 아래, 왼쪽 및 오른쪽으로 움직이며 문자에 따라 방향을 변경합니다. 비판적으로, BackFlip 프로그램의 그리드는 Langton 's Ant 와 같은 트래버스가 진행되면서 변경됩니다 .
이 문제를 해결하기 위해 BackFlip 프로그램은 항상 1x1 크기의 문자 만 포함하는 직사각형 텍스트 격자 (모든 줄의 길이는 동일)라고 가정 할 수 있습니다 ./\<>^V
. ( .
공간보다는 가시성에 사용됩니다.) 의미 상 여기서 사용할 BackFlip은 원래 spec 과 동일합니다 .
BackFlip의 명령어 포인터 (IP)는 항상 프로그램의 왼쪽 위 모서리에서 오른쪽으로 시작합니다. 발생할 수있는 명령에는 세 가지 유형이 있습니다.
.
no-op입니다. IP는 진행 방향으로 계속 진행됩니다. no-op는 no-op로 유지됩니다./
그리고\
거울입니다. 각도로 표시된 방향으로 IP를 반영한 다음 다른 유형의 미러로 변경합니다 .- 예를 들어 IP 헤드가 왼쪽으로 왼쪽이면 왼쪽
\
대신 위쪽으로 이동하기 시작하고가\
됩니다/
.
- 예를 들어 IP 헤드가 왼쪽으로 왼쪽이면 왼쪽
<
,>
,^
및V
화살표이다. IP를 자신이 가리키는 방향으로 재 지정한 다음 IP가 향한 방향을 가리키는 화살표로 변경합니다 (IP가 이동 한 방향과 반대) .- 예를 들어 IP가 아래쪽으로 향하면 아래쪽이
>
아닌 오른쪽으로 이동하기 시작 하고 IP의 방향>
이되므로 a^
가됩니다.
- 예를 들어 IP가 아래쪽으로 향하면 아래쪽이
BackFlip 프로그램은 IP가 경계를 벗어날 때, 즉 그리드를 벗어나면 종료됩니다. 그것은 밝혀 모두 무한 루프가 불가능하기 때문에 결국 끝 공중제비 프로그램. (이것이 사실이라고 가정 할 수 있습니다.)
이 과제의 목표는 BackFlip 프로그램을 사용하고 프로그램이 종료되기 전에 명령어 포인터가 이동하는 횟수를 출력하는 프로그램이나 함수를 작성하는 것입니다. 즉, 프로그램 실행 과정에서 IP는 몇 단계를 거치나요? 여기에는 그리드의 초기 단계와 그리드의 마지막 단계가 포함됩니다.
예를 들어 명령어 포인터는 간단한 그리드에서 5 단계를 수행합니다 ....
.
.... <- empty 4×1 grid
012345 <- step number of the IP
따라서 출력은 ....
입니다 5
.
더 복잡한 4 × 2 그리드에서
\...
\.><
IP는 9 단계에서 그리드를 종료하므로 출력은 9
다음과 같습니다.
step grid IP position (@)
0 \... @....
\.>< ....
1 \... @...
\.>< ....
2 /... ....
\.>< @...
3 /... ....
/.>< .@..
4 /... ....
/.>< ..@.
5 /... ....
/.<< ...@
6 /... ....
/.<< ..@.
7 /... ....
/.>< .@..
8 /... ....
/.>< @...
9 /... ....
\.>< ....
@
바이트 단위의 가장 짧은 코드가 이깁니다.
원하는 경우 여러 줄 문자열 대신 행 배열 또는 문자 행렬로 입력을받을 수 있지만 ./\<>^V
정수 opcode가 아닌 문자를 사용해야합니다 . 원하는 .
경우 대신 공간을 사용할 수 있습니다 . 같은 문자 \
를 입력에서 이스케이프 처리 해야하는 경우 괜찮습니다 . 출력은 항상 둘 이상의 정수입니다.
테스트 사례
....
5
\...
\.><
9
.
2
..
3
.
.
2
\
2
^
2
.^.
3
<.
2
\\
\/
7
>V
^<
6
>\
>/
6
\><
2
\><
\><
7
\><
\><
\><
12
\.V.
\.\<
5
\.V.
\./<
9
V./\
V./\
>./<
..\/
14
\V..
.^..
\/><
.V..
.^..
20
\.V.V.
\./.\<
.>\<..
..^.^.
31
\.V.V.V.
\./>/.\<
.>\>\<..
..^.^.^.
69
\.V.V.V.V.
\./>/>/.\<
.>\>\>\<..
..^.^.^.^.
145
\.V.V.V.V.V.V.V.V.V.V.
\./>/>/>/>/>/>/>/>/.\<
.>\>\>\>\>\>\>\>\>\<..
..^.^.^.^.^.^.^.^.^.^.
9721
/
IP가 올라가고, 위쪽으로 향하면 /
IP가 벽에서 튀어 오르는 것처럼 보입니다 . (그러나 /
IP가 그것을 터치 한 후에 백 슬래시에 대한 변화를 기억하십시오 .)