Bir Turing makinesinin durup durmadığının belirlenmesi iyi anlaşılamaz olarak bilinmektedir, ancak bu daha basit makineler için mutlaka doğru değildir.
Bir Foo makinesi banda her hücre bir tam sayıyı ya da durdurmak sembolü sonlu bant ile bir makine olup h
, örneğin
2 h 1 -1
Komut işaretçisi ilk hücreye işaret ederek başlar:
2 h 1 -1
^
Her adımda, komut gösterici işaret ettiği sayı ile ileri hareket eder, sonra bu sayıyı olumsuzlar. Böylece, bir adımdan sonra, 2
hücreleri ileri doğru hareket ettirir ve 2
a -2
:
-2 h 1 -1
^
Foo makinesi, talimat göstericisi durma sembolünü ( h
) gösterene kadar bunu yapmaya devam eder . Yani, işte bu programın tam yürütülmesi:
2 h 1 -1
^
-2 h 1 -1
^
-2 h -1 -1
^
-2 h -1 1
^
-2 h 1 1
^
Bant aynı zamanda daireseldir, bu nedenle, talimat imleci bandın bir tarafından hareket ederse, diğer tarafa gider, örneğin:
3 h 1 3
^
-3 h 1 3
^
-3 h 1 -3
^
-3 h -1 -3
^
-3 h -1 3
^
3 h -1 3
^
Bu Foo makineleri hakkında ilginç bir şey, bazılarının durmamasıdır;
1 2 h 2
^
-1 2 h 2
^
-1 -2 h 2
^
-1 -2 h -2
^
-1 2 h -2
^
-1 2 h 2
^
Bu program sonsuza dek son dört durumda döngü devam edecek.
Bu yüzden bir Foo makinesinin durup durmayacağını belirleyen bir program yazın! Foo makineleri için istediğiniz herhangi bir (makul) giriş biçimini kullanabilir 0
ve durma sembolü olarak kullanmayı seçebilirsiniz . Durdurulan durum ve durmadığı durumlar için iki ayrı çıktı kullanabilirsiniz. Elbette, programınız tüm geçerli girişler için sınırlı bir süre içinde cevap yazmalıdır.
Bu kod golf , bu yüzden programınızı mümkün olduğunca kısa tutmaya çalışın!
Test durumları
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
(durmuyor)
3 2 1 1 4 h
. Bu durur ancak element sayısının iki katından daha fazla yineleme gerektirir.
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 adımdan sonra durdu.