Pochodna Brainfuck
Zdefiniujmy prosty język programowania podobny do Brainfuck . Ma dwukierunkową taśmę komórek, a każda komórka zawiera jeden bit. Wszystkie bity mają początkowo wartość 0. Na taśmie porusza się głowa, początkowo w pozycji 0. Program to ciąg znaków nad znakami <>01!
, wykonywany od lewej do prawej, z następującą semantyką:
<
przesuwa głowę o krok w lewo.>
przesuwa głowę o krok w prawo.0
wstawia 0 w bieżącej komórce.1
wstawia 1 do bieżącej komórki.!
odwraca bieżącą komórkę.
Nie ma pętli, więc program n znaków kończy się dokładnie po n krokach. Program jest nudny, jeśli wszystkie komórki zawierają 0 na końcu wykonywania, i ekscytujący, jeśli jest co najmniej jeden. Zauważ, że rozmiar taśmy nie jest określony, więc w zależności od implementacji może być dwukierunkowy nieskończony lub okólnik.
Przykładowy program
Rozważ program 1>>>!<<<<0>!>>>!
. Na nieskończonej taśmie wykonanie przebiega w następujący sposób:
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
Na koniec wszystkie komórki mają wartość 0, więc ten program jest nudny. Teraz uruchommy ten sam program na okrągłej taśmie o długości 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
Tym razem jest komórka o wartości 1, więc program jest ekscytujący! Widzimy, że to, czy program jest nudny czy ekscytujący, zależy od rozmiaru taśmy.
Zadanie
Twoje dane wejściowe to niepusty ciąg znaków <>01!
reprezentujący program w powyższym języku programowania. Tablica znaków jest również dopuszczalnym formatem wejściowym. Program na pewno będzie nudny, gdy zostanie uruchomiony na nieskończonej taśmie. Twój wynik będzie listą długości taśm, na których program jest ekscytujący. Pamiętaj, że musisz przetestować program tylko na taśmach krótszych niż długość programu.
Zwycięzcą jest rozwiązanie o najniższej liczbie bajtów w każdym języku. Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
> : []
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!
?