튜링 머신의 정지 여부를 결정하는 것은 결정 불가능한 것으로 알려져 있지만, 더 단순한 머신에서는 반드시 그런 것은 아닙니다.
푸 기계 테이프의 각 셀은 정수 또는 중지 심볼 갖는 유한 테이프있는 컴퓨터 인 h
, 예를
2 h 1 -1
명령 포인터는 첫 번째 셀을 가리켜 서 시작합니다.
2 h 1 -1
^
모든 단계에서 명령 포인터는 가리키는 숫자만큼 앞으로 이동 한 다음 해당 숫자를 무시합니다. 따라서 한 단계 후에는 2
셀을 앞으로 이동 하고를 다음 2
으로 바꿉니다 -2
.
-2 h 1 -1
^
Foo 머신은 명령 포인터가 정지 기호 ( h
)를 가리킬 때까지이 작업을 계속합니다 . 따라서이 프로그램의 전체 실행은 다음과 같습니다.
2 h 1 -1
^
-2 h 1 -1
^
-2 h -1 -1
^
-2 h -1 1
^
-2 h 1 1
^
테이프도 원형이므로 지시 포인터가 테이프의 한쪽에서 벗어나면 다른쪽으로 이동합니다 (예 :
3 h 1 3
^
-3 h 1 3
^
-3 h 1 -3
^
-3 h -1 -3
^
-3 h -1 3
^
3 h -1 3
^
이 Foo 머신에 대한 흥미로운 점은 다음과 같은 것들이 멈추지 않는다는 것입니다.
1 2 h 2
^
-1 2 h 2
^
-1 -2 h 2
^
-1 -2 h -2
^
-1 2 h -2
^
-1 2 h 2
^
이 프로그램은 마지막 4 개 주에서 영원히 계속 반복 될 것입니다.
따라서 Foo 머신의 정지 여부를 결정하는 프로그램을 작성하십시오! Foo 머신에 대해 원하는 (합리적인) 입력 형식을 사용할 0
수 있으며 중단 기호 로 사용하도록 선택할 수 있습니다 . 정지 된 경우와 그렇지 않은 경우에 대해 두 개의 개별 출력을 사용할 수 있습니다. 물론 프로그램은 유효한 모든 입력에 대해 유한 한 시간 안에 답변을 출력해야합니다.
이것은 코드 골프 이므로 가능한 한 프로그램을 짧게 만드십시오!
테스트 사례
2 h 1 -1
Halts
3 h 1 3
Halts
h
Halts
1 1 1 1 h
Halts
2 1 3 2 1 2 h
Halts
3 2 1 1 4 h
Halts
1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 h -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36
Halts
2 h
Does not halt
1 2 h 2
Does not halt
8 1 2 3 3 4 8 4 3 2 h
Does not halt
1 2 4 3 h 2 4 5 3
Does not halt
3 1 h 3 1 1
Does not halt
1 2 h 42
Does not halt
1 2 h 42
(중지되지 않음)
3 2 1 1 4 h
. 이것은 정지하지만 요소 수의 두 배보다 더 많은 반복이 필요합니다.
1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 h -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36
, 786430 단계 후에 중지됩니다.