> <> (비밀 한 프로그래밍 언어) 의 코드를 통해 수영하는 사랑하는 물고기 는 자연 환경에서 제거되었습니다. 이 변경으로 인해 예전 방식으로 움직일 수 없었습니다. 토 로이드 움직임이었던 것은 단순한 왼쪽에서 오른쪽 움직임으로 제한되었습니다. 그러나> <> 프로그램은 마치 물고기가 마치 물고기를 통해 이동할 수있는 것처럼 작성되었습니다. > <> 프로그램을 선형화하는 프로그램을 작성하는 것은 프로그래머 여러분의 임무입니다. 그리고 가능한 적은 바이트로 수행하십시오. 물고기는 매우 큰 기억이 없습니다.
> <>의 움직임
> <>에서 움직임은 환상적이며 한 번에 한 문자입니다. 이것은 물고기 (포인터)가 줄의 끝에서 처음으로 다시 줄 바꿈 될 수 있음을 의미합니다. > <>에서 물고기는 대부분의 포인터가 움직이는 방식과 달리 위에서 아래로, 아래에서 위로, 오른쪽에서 왼쪽으로 움직일 수 있습니다. 따라서이 운동 패턴은 유효합니다.
>>>^ >>>v
>>>^ v
그리고 무한 루프에서 끝날 것입니다.
물고기는 최대 길이 (행 길이)와 높이가 행 수와 동일한 격자로 이동합니다.
물고기가 어떻게 움직이는 지 어떻게 알 수 있습니까? 이 명령은 이동 방향 벡터를 변경합니다 (예 : (-1,0)
오른쪽에서 왼쪽으로).
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
언급 한 바와 같이, 물고기는 왼쪽에서 오른쪽으로, 즉 방향 벡터로 움직이기 시작합니다 (1,0)
. 물고기는 명령이 위에서 언급 한 방향 변경 기 중 하나와 일치하면보고 첫 번째 명령부터 시작하여 명령 구문 분석을 시작합니다.
가 표시되면 물고기가 움직이지 ;
않고 프로그램이 종료됩니다.
입력
입력은 STDIN을 통해 제공되는 유효한 (예 : 무한 반복되지 않는) 프로그램입니다. 원하는 경우 파일을 읽을 수도 있습니다. 각 프로그램의 행은 반드시 같은 길이 일 필요 는 없습니다 .
입력은 문자열로 제공되며, 줄 바꿈은 프로그램의 각 줄을 구분합니다.
프로그램은 반복되지 않습니다. 또한 항상로 종료됩니다 ;
.
산출
출력은 프로그램이 선형화됩니다. 즉, 물고기가 프로그램을 "정상적으로"실행했는지 확인할 수있는 모든 문자 (방향 변경자를 포함)를 반환해야합니다. 이 경로에있는 모든 문자입니다 ;
.
입력에 길이가 다른 선이 있고 물고기가 가장 긴 선의 길이보다 짧은 선을 따라 움직이면 마치 마치 물고기가 공간 위로 움직이는 것처럼 취급해야합니다 (테스트 사례 참조).
> <>에 익숙한 사람은 방향 전환기가 이동을 수행 할 수있는 유일한 방법이 아니라 단순성을 위해 입력 을 이동에 영향을 미치는 유일한 방법 인 것처럼 취급합니다 .
규칙
- 표준 허점 적용
- 당신은 전체 프로그램이나 기능을 작성할 수 있습니다
- 입력은 STDIN 또는 파일을 통해 줄 바꿈 (
\n
)으로 구분 된 프로그램 행을 포함하는 문자열로 제공됩니다.- 이유 내에서 입력을 다르게 취할 수 있습니다 (특정 종류의 입력을 염두에두면 언제든지 문의하십시오). 공백으로 입력을 채울 수 없으므로 선 길이가 일치합니다.
- 유연한 입력에 대해서는 이 메타 게시물을 참조하십시오 . 게시의 의미에서 일반적인 합의는 가능한 한 융통성이 있어야합니다.
- 출력은 STDOUT을 통해 단일 문자열이거나 함수에 의해 리턴됩니다 (선택한 내용에 따라 규칙 2 참조)
테스트 사례
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;