52 48 바이트
./@$0<$
21\./01
..>..!\
@
.<..<\
20//\11
@01$00@
온라인으로 사용해보십시오!
테스트 드라이버
설명
클라인에서 IP는 왼쪽 상단에서 오른쪽으로 시작합니다. 프로그램에서 원했던 첫 번째 단계는 첫 번째와 세 번째 비트를 결정하기 위해 프로그램 상단에서 IP를 전송하는 것입니다. IP는 토폴로지에 따라 다음과 같이 프로그램을 다시 입력합니다.
^
I|P
./.....
201, 211 -->.......<-- 100, 110
.......
.......
.......
200, 210 -->.......<-- 101, 111
.......
^ ^
| |
000 001
010 011
내 프로그램이 두 번째 비트 전에 토폴로지의 세 번째 비트를 기록하지만 $
끝 전에 이를 사용하여 교환 하기로 결정했습니다. 이를 위해 위에서 설명한 IP 진입 점에서 각 토폴로지의 첫 번째 및 세 번째 비트를 푸시하는 코드를 추가했습니다.
./.....
21...01
.......
.......
.......
20...11
.0...0.
다음으로 1
또는 2
첫 비트로 또는 토폴로지로 토폴로지에 중점을 두었습니다 . 나는 그것들을 재결합하고 북쪽에 연결되지 않은쪽에 보내 두 번째 비트를 결정할 수 있도록 결정했습니다.
./.....
21\./01
..>....--> 200, 201, 210, 211
.......
100, 101, 110, 111 <--....<..
20/.\11
.0...0.
^ ^
| |
/ \
110 100
111 101
210 200
211 201
편리하게 이것은 두 번째 비트로 토폴로지를 다시 그룹화하여 스택으로 푸시 할 수있었습니다.
./.....
21\./01
..>....
.......
....<..
20/.\11
.01.00.
그 후 나는 두 번째와 세 번째 비트를 교환하고 프로그램을 종료해야했습니다.
./.$...
21\./01
..>....
@......
....<..
20//\11
.01$00.
이제 첫 비트 가 1
있거나 2
첫 번째로 작동 한 토폴로지가 0
올바르게 출력 되도록 토폴로지를 만드는 데 집중할 수있었습니다 . 첫 번째 단계는 두 번째 비트를 기반으로 두 그룹으로 분리 될 수 있도록 이들을 재결합하는 것입니다.
./.$...
21\./01
..>....<-- 010, 011
@......
000, 001, 010, 011 <--.<..<<.<-- 000, 001
20//\11
.01$00.
먼저 1
두 번째 비트로 이러한 토폴로지에 중점을 두었습니다 . IP는 토폴로지에서 이미 2
첫 번째 비트로 사용 된 회선에 있었기 때문에 문제가되었습니다 . 해당 줄에 둘 이상의 명령을 맞추기가 까다로울 수 있으므로 (명령을 사용하여 단일 명령을 건너 뛸 수 있음 !
) 전체 공간이 부족한 경우 IP를 해당 줄에서 리디렉션하고 기존 1
명령을 재사용하기로 결정했습니다. 두 번째 비트를 누르십시오.
./.$...
21\./01
..>..!\
@......
.<..<<.
20//\11
.01$00.
이제 1
두 번째 비트로 토폴로지에 대해해야 할 일은 두 번째 및 세 번째 비트의 순서를 수정하고 종료하는 것이 었습니다.
^
|
./.$..$
21\./01
..>..!\
@......
.<..<<.
20//\11
@01$00@
^ ^
| |
011 010
마지막으로 0
두 번째 비트로 토폴로지를 유지했습니다 . 프로그램에 남은 공간이 많지 않아 맨 위 줄에 가장 큰 사용되지 않은 공간이 있으므로 토폴로지의 IP를 0
두 번째 비트로 리디렉션했습니다 .
./.$.<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@
나는 여전히 0
두 번째 비트 를 푸시 하고 두 번째 및 세 번째 비트의 순서를 수정하고 프로그램을 종료해야했습니다. 다행히도 기존 $
명령어 를 재사용 할 수 있었으므로 0
및 @
명령어는 나머지 공간에 맞출 수있었습니다.
./@$0<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@
마지막으로 줄 끝에서 노프를 제거하여 최종 프로그램을 얻을 수 있습니다.