Похідне Brainfuck
Давайте визначимо просту мову програмування Brainfuck . Він має двонаправлену стрічку комірок, і кожна комірка вміщує один біт. Усі біти спочатку 0. На стрічці є рухома голова, спочатку в положенні 0. Програма - це рядок над символами <>01!
, виконаний зліва направо, з наступною семантикою:
<
рухає головою на один крок вліво.>
рухає головою на один крок вправо.0
ставить 0 у поточній комірці.1
ставить 1 у поточну комірку.!
перевертає поточну комірку.
Немає циклів, тому програма з n символів закінчується після рівно n кроків. Програма нудна, якщо всі комірки містять 0 в кінці виконання, і захоплююча, якщо є щонайменше одна. кругової.
Приклад програми
Розгляньте програму 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!
?