Un derivato Brainfuck
Definiamo un semplice linguaggio di programmazione simile a Brainfuck . Ha un nastro bidirezionale di celle e ogni cella contiene un bit. Tutti i bit sono inizialmente 0. C'è una testa mobile sul nastro, inizialmente nella posizione 0. Un programma è una stringa sopra i caratteri <>01!
, eseguita da sinistra a destra, con la seguente semantica:
<
sposta la testa di un passo verso sinistra.>
sposta la testa di un passo verso destra.0
mette 0 nella cella corrente.1
mette 1 nella cella corrente.!
capovolge la cella corrente.
Non ci sono loop, quindi un programma di n caratteri termina dopo esattamente n passaggi. Un programma è noioso se tutte le celle contengono 0 alla fine dell'esecuzione ed entusiasmante se ne esiste almeno una 1. Notare che la dimensione del nastro non è specificata, quindi a seconda dell'implementazione, può essere infinita a due vie o circolare.
Un programma di esempio
Considera il programma 1>>>!<<<<0>!>>>!
. Su un nastro infinito, l'esecuzione procede come segue:
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
Alla fine, tutte le celle sono 0, quindi questo programma è noioso. Ora eseguiamo lo stesso programma su un nastro circolare di lunghezza 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
Questa volta, c'è una cella con valore 1, quindi il programma è eccitante! Vediamo che se un programma è noioso o eccitante dipende dalle dimensioni del nastro.
L'obiettivo
Il tuo input è una stringa non vuota <>01!
che rappresenta un programma nel linguaggio di programmazione sopra. Una matrice di caratteri è anche un formato di input accettabile. È garantito che il programma sia noioso quando viene eseguito su un nastro infinito. L'output deve essere l'elenco delle lunghezze del nastro su cui il programma è entusiasmante. Si noti che è necessario testare il programma solo su nastri più corti della lunghezza del programma.
La soluzione con il numero di byte più basso in ogni lingua è la vincitrice. Si applicano le regole standard del code-golf .
Casi test
> : []
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!
?