Menentukan apakah mesin Turing berhenti dikenal tidak dapat diputuskan, tetapi itu tidak selalu benar untuk mesin yang lebih sederhana.
Sebuah mesin Foo adalah mesin dengan pita yang terbatas, di mana setiap sel dalam rekaman memiliki integer atau simbol berhenti h
, misalnya
2 h 1 -1
Penunjuk instruksi dimulai dengan menunjuk ke sel pertama:
2 h 1 -1
^
Pada setiap langkah, penunjuk instruksi bergerak maju dengan angka yang ditunjukkannya, lalu meniadakan angka itu. Jadi, setelah satu langkah, itu akan bergerak maju 2
sel, dan mengubah 2
menjadi -2
:
-2 h 1 -1
^
Mesin Foo terus melakukan ini sampai penunjuk instruksi menunjuk ke simbol berhenti ( h
). Jadi, inilah eksekusi penuh dari program ini:
2 h 1 -1
^
-2 h 1 -1
^
-2 h -1 -1
^
-2 h -1 1
^
-2 h 1 1
^
Pita itu juga melingkar, jadi jika penunjuk instruksi bergerak dari satu sisi pita, ia pergi ke sisi lain, misalnya:
3 h 1 3
^
-3 h 1 3
^
-3 h 1 -3
^
-3 h -1 -3
^
-3 h -1 3
^
3 h -1 3
^
Satu hal yang menarik tentang mesin Foo ini adalah beberapa tidak berhenti, misalnya:
1 2 h 2
^
-1 2 h 2
^
-1 -2 h 2
^
-1 -2 h -2
^
-1 2 h -2
^
-1 2 h 2
^
Program ini akan terus berulang dalam empat negara terakhir selamanya.
Jadi, tulislah sebuah program yang menentukan apakah mesin Foo berhenti atau tidak! Anda dapat menggunakan format input (wajar) apa pun yang Anda suka untuk mesin Foo, dan Anda dapat memilih untuk menggunakan 0
sebagai simbol berhenti. Anda dapat menggunakan dua output berbeda untuk case di mana ia berhenti dan case di mana tidak. Program Anda harus, tentu saja, menghasilkan jawaban dalam jumlah waktu yang terbatas untuk semua input yang valid.
Ini adalah kode-golf , jadi cobalah membuat program Anda sesingkat mungkin!
Uji kasus
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
(tidak berhenti)
3 2 1 1 4 h
. Yang ini berhenti tetapi membutuhkan lebih banyak iterasi daripada dua kali jumlah elemen.
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
Case uji ekstra panjang yang disarankan :, yang berhenti setelah langkah 786430.