미로 , 18 바이트
+(+"#(!@
: :
%2_,
온라인으로 사용해보십시오! 이 답변은 @ MartinBüttner와 공동 작업 한 결과입니다.
설명
일반적인 미로 입문서 ( "정상"이라고 말하지만 실제로는 매번 다시 작성합니다) :
- Labyrinth는 스택 기반 2D 언어이며 첫 번째 유효한 문자 (여기서는 왼쪽 상단)부터 실행됩니다. 명령어 포인터가 취할 수있는 두 개 이상의 가능한 경로가있는 각 접점에서 스택의 맨 위를 확인하여 다음에 갈 곳을 결정합니다. 음수는 왼쪽이고, 0은 앞으로 가고 양수는 오른쪽입니다.
- 스택은 바닥이없고 0으로 채워 지므로 빈 스택에서 터지는 것은 오류가 아닙니다.
- 소스 코드의 숫자는 해당 숫자를 푸시하지 않습니다. 대신 스택의 상단을 팝하고를 누릅니다
n*10 + <digit>. 이를 통해 많은 수의 손쉬운 구축이 가능합니다. 새 숫자를 시작하려면을 사용하여 _0 을 누릅니다 .
이 코드는 골프 목적으로 메인 루프가 두 작업을 하나로 결합하기 때문에 약간 이상합니다. 첫 패스의 전반에 대해 다음과 같은 일이 발생합니다.
+(+ Add two zeroes, decrement, add with zero
This leaves -1 on the stack
" NOP at a junction. -1 is negative so we try to turn left, fail, and
turn right instead.
: Duplicate -1
이제 스택이 -1로 초기화되었으므로 실제 처리를 시작할 수 있습니다. 메인 루프의 기능은 다음과 같습니다.
, Read a byte of input
_2% Take modulo 2.
:+ Duplicate and add, i.e. double
( Decrement
This maps "(" -> -1, ")" -> 1
+ Add to running total
" NOP at a junction. Go forward if zero, otherwise turn right.
: Duplicate the top of the stack
마지막 복제는 수행 할 때마다 스택에 요소를 추가합니다. 우리가 0에 도달하고 NOP에서 앞으로 나아갈 때 우리는 다음을 수행하기 때문에 이것은 중요합니다.
# Push stack depth
( Decrement
! Output as num
@ Terminate