> <> , 56 바이트
^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
온라인으로 사용해보십시오! 또는 모든 돌연변이를 확인하십시오 .
원래 프로그램의 작동 방식 (오래된)
인터프리터는 셀 (0, 0) 에서 시작합니다 . ^
방향을 위쪽으로 설정하면 명령 포인터 (IP)가 셀 (0, 20)로 둘러싸 입니다.
'
문자열 모드를 활성화합니다. 다음 '
문자가 나타날 때까지 IP 아래의 모든 문자가 스택에서 푸시됩니다. '
감싸고 나면 같은 것이 다시 발견되므로
d3*}^^:84*=?~oao0f.^
IP는 (0, 19)에 도달 하고 여전히 위쪽으로 올라갑니다. 실행 d3*}
푸시 13 = 0xd 이어서, 3 , 곱셈은 두 값 ( 39 / 작은 따옴표 ), 그 오른쪽의 스택을 회전시킨다. 이렇게하면 스택이 다음과 같이 남습니다.
'd3*}^^:84*=?~oao0f.^
다음 두 명령어 ( ^
)는 현재 아무 것도하지 않습니다.
:84*=
스택의 상단을 복제하고 8 과 4를 밀어서 곱한 다음 ( 32 / 공백 ), 복제 된 문자가 공간 과 동일한 지 테스트합니다 . 변경되지 않은 프로그램의 경우 항상 0을 누릅니다 .
?
스택 맨 위가 잘못된 경우 다음 명령어를 건너 뜁니다. 원래 프로그램의 경우 항상 그렇기 때문에 ~
항상 건너 뜁니다.
oao
팝 스택의 상부를 인쇄 미는 10 / 바꿈 후 꺼내어 인쇄 바꿈 .
마지막으로 스택의 다음 문자부터 시작 0f.
하여 셀 (0, 15) (맨 아래 ^
)로 이동합니다.
스택이 비면 전체 소스 코드가 인쇄 된 것입니다. :
실패하고 프로그램이 종료됩니다.
변형 된 프로그램 작동 방식 (오래된)
줄 바꿈이 아닌 문자를 복제하면 프로그램이 가로로만 확장됩니다. 프로그램이 수직으로 실행되므로 이러한 추가 명령어는 절대 실행되지 않습니다.
최저 속도 이전에 라인 피드를 복제하면 ^
셀 (0, 14) 및 (0, 15) 가 (0, 15) 및 (0, 16)으로 이동 합니다. 0f.
이제 가장 아래에있는 셀로 이동합니다. ^
또한 ^
이므로 프로그램은 시프트의 영향을받지 않습니다.
마지막으로 중복 된 줄 바꿈 문자도 문자열을 변경합니다. 짧은 줄은 공백으로 채워 지므로 32 / 공간 이 줄 바꿈 위치에 삽입됩니다. 공간을 위해 1 을 84*=
푸시 하므로 다음 명령을 건너 뛰지 마십시오. 이 경우에는 공백을 팝핑하여 버립니다 . 따라서 다음 은 공백 위에 문자를 인쇄합니다 .?
~
o
0
그리고00
CJam에서 두 출력0
.