Brainfuck派生物
簡単なBrainfuckのようなプログラミング言語を定義しましょう。セルの双方向テープがあり、各セルは1ビットを保持します。すべてのビットは最初は0です。最初は位置0にテープの移動ヘッドがあります。プログラムは<>01!
、次のセマンティクスを使用して、左から右に実行される文字上の文字列です。
<
ヘッドを1ステップ左に移動します。>
頭を1ステップ右に移動します。0
現在のセルに0を入れます。1
現在のセルに1を入れます。!
現在のセルを反転します。
ループがないため、n文字のプログラムは正確にnステップで終了します。実行の最後にすべてのセルに0が含まれる場合、プログラムは退屈です。少なくとも1 つがあれば、エキサイティングです。テープのサイズは指定されていないため、実装によっては双方向無限または円形。
サンプルプログラム
プログラムを検討してください1>>>!<<<<0>!>>>!
。無限テープでは、実行は次のように進行します。
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
最後に、すべてのセルは0なので、このプログラムは退屈です。次に、長さ4の円形テープで同じプログラムを実行しましょう。
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
今回は、値1のセルがあるため、プログラムは刺激的です!プログラムが退屈であるか刺激的であるかは、テープのサイズに依存することがわかります。
タスク
入力は<>01!
、上記のプログラミング言語のプログラムを表す空ではない文字列です。文字の配列も受け入れ可能な入力形式です。このプログラムは、無限のテープで実行すると退屈することが保証されています。出力は、プログラムがエキサイティングなテープ長のリストです。プログラムの長さより短いテープでのみプログラムをテストする必要があることに注意してください。
各言語で最も少ないバイト数のソリューションが勝者です。標準のコードゴルフ規則が適用されます。
テストケース
> : []
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!
?