Xác định xem một máy Turing tạm dừng có được biết là không thể giải quyết được không, nhưng điều đó không nhất thiết đúng với các máy đơn giản hơn.
Máy Foo là máy có băng từ hữu hạn, trong đó mỗi ô trên băng có số nguyên hoặc ký hiệu dừng h
, ví dụ:
2 h 1 -1
Con trỏ lệnh bắt đầu bằng cách chỉ vào ô đầu tiên:
2 h 1 -1
^
Ở mỗi bước, con trỏ lệnh di chuyển về phía trước theo số mà nó trỏ tới, sau đó phủ định số đó. Vì vậy, sau một bước, nó sẽ di chuyển về phía trước 2
các ô và biến 2
thành -2
:
-2 h 1 -1
^
Máy Foo tiếp tục làm điều này cho đến khi con trỏ lệnh trỏ đến biểu tượng tạm dừng ( h
). Vì vậy, đây là thực hiện đầy đủ của chương trình này:
2 h 1 -1
^
-2 h 1 -1
^
-2 h -1 -1
^
-2 h -1 1
^
-2 h 1 1
^
Băng cũng là hình tròn, vì vậy nếu con trỏ lệnh di chuyển khỏi một mặt của băng, nó sẽ chuyển sang phía bên kia, ví dụ:
3 h 1 3
^
-3 h 1 3
^
-3 h 1 -3
^
-3 h -1 -3
^
-3 h -1 3
^
3 h -1 3
^
Một điều thú vị về các máy Foo này là một số không dừng lại, ví dụ:
1 2 h 2
^
-1 2 h 2
^
-1 -2 h 2
^
-1 -2 h -2
^
-1 2 h -2
^
-1 2 h 2
^
Chương trình này sẽ tiếp tục lặp trong bốn trạng thái cuối cùng mãi mãi.
Vì vậy, hãy viết một chương trình xác định xem máy Foo có dừng hay không! Bạn có thể sử dụng bất kỳ định dạng đầu vào (hợp lý) nào bạn thích cho các máy Foo và bạn có thể chọn sử dụng0
làm biểu tượng tạm dừng. Bạn có thể sử dụng bất kỳ hai đầu ra riêng biệt nào cho trường hợp nó dừng lại và trường hợp không có. Tất nhiên, chương trình của bạn phải đưa ra câu trả lời trong một khoảng thời gian hữu hạn cho tất cả các đầu vào hợp lệ.
Đây là môn đánh gôn , vì vậy hãy cố gắng làm cho chương trình của bạn ngắn nhất có thể!
Các trường hợp thử nghiệm
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
(không dừng lại)
3 2 1 1 4 h
. Điều này dừng lại nhưng yêu cầu số lần lặp nhiều hơn hai lần số phần tử.
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
, dừng lại sau 786430 bước.