Bir Brainfuck türevi
Brainfuck benzeri bir programlama dili tanımlayalım . İki yönlü bir hücre bandına sahiptir ve her hücre bir bit tutar. Tüm bitler başlangıçta 0'dır. Kasette, başlangıçta 0 konumunda, hareketli bir kafa vardır. Program, karakterlerin üzerinde, <>01!
soldan sağa doğru, aşağıdaki anlambilimiyle yürütülen bir dizgedir :
<
kafa bir adım sola hareket eder.>
kafa bir adım sağa doğru hareket eder.0
geçerli hücreye 0 koyar.1
geçerli hücreye 1 koyar.!
mevcut hücreyi çevirir
Döngü yoktur, bu nedenle n karakter programı tam olarak n adımdan sonra sona erer . Bir program, tüm hücrelerin yürütme sonunda 0 içermesi durumunda sıkıcı ve en az bir tane olması durumunda heyecan vericidir . Teybin boyutunun belirtilmediğine dikkat edin; dairesel.
Örnek bir program
Programı düşünün 1>>>!<<<<0>!>>>!
. Sonsuz bir kasette, yürütme aşağıdaki şekilde ilerler:
v
00000000000000 Put 1
v
00000100000000 Move by >>>
v
00000100000000 Flip
v
00000100100000 Move by <<<<
v
00000100100000 Put 0
v
00000100100000 Move by >
v
00000100100000 Flip
v
00000000100000 Move by >>>
v
00000000100000 Flip
v
00000000000000
Sonunda, tüm hücreler 0, bu nedenle bu program sıkıcı. Şimdi, aynı programı 4 uzunluğundaki dairesel bir bant üzerinde çalıştıralım.
v
0000 Put 1
v
1000 Move by >>>
v
1000 Flip
v
1001 Move by <<<< (wrapping around at the edge)
v
1001 Put 0
v
1000 Move by > (wrapping back)
v
1000 Flip
v
0000 Move by >>>
v
0000 Flip
v
0001
Bu sefer 1 değerinde bir hücre var, bu yüzden program heyecan verici! Bir programın sıkıcı veya heyecan verici olup olmadığını kasetin boyutuna bağlı olduğunu görüyoruz.
Görev
Girişiniz <>01!
, yukarıdaki programlama dilinde bir programı temsil eden boş olmayan bir dizedir . Bir karakter dizisi de kabul edilebilir bir giriş biçimidir. Sonsuz bir kasette çalıştırıldığında programın sıkıcı olacağı garantilidir. Çıktınız, programın heyecan verici olduğu bant uzunluklarının listesi olacaktır. Programı yalnızca program uzunluğundan daha kısa olan bantlar üzerinde test etmeniz gerektiğini unutmayın.
Her dilde en düşük bayt sayısına sahip çözüm kazanır. Standart kod-golf kuralları geçerlidir.
Test durumları
> : []
110 : []
1>0<! : [1]
0>>1>0<<>! : [1]
1>>>!<<<<0>!>>>! : [2, 4]
!<!<><<0>!>!<><1!>>0 : [2]
>>!>><>001>0<1!<<!>< : [1, 2, 3]
1!><<!<<<!!100><>>>! : [1, 3]
!!1>!>11!1>>0<1!0<!<1><!0<!<0> : [3, 4]
<><<>>!<!!<<<!0!!!><<>0>>>>!>> : [1, 2, 4]
0>>><!<1><<<0>!>>!<<!!00>!<>!0 : [3]
0000!!!!><1<><>>0<1><<><<>>!<< : []
!>!>!>!>!>1>!>0<!<!<!<0<!<0<!<!<!<1>!>0<<! : [1, 2, 5, 7]
<!!>!!><<1<>>>!0>>>0!<!>1!<1!!><<>><0<<!>><<!<<!>< : [1, 2, 4, 5]
!>1<<11<1>!>!1!>>>0!!>!><!!00<><<<0<<>0<<!<<<>>!!> : [1, 2, 3, 5, 6]
<>01!
?