Un derivado de Brainfuck
Definamos un lenguaje de programación simple similar a Brainfuck . Tiene una cinta de celdas bidireccional, y cada celda contiene un bit. Todos los bits son inicialmente 0. Hay una cabeza móvil en la cinta, inicialmente en la posición 0. Un programa es una cadena sobre los caracteres <>01!
, ejecutada de izquierda a derecha, con la siguiente semántica:
<
mueve la cabeza un paso hacia la izquierda.>
mueve la cabeza un paso hacia la derecha.0
pone 0 en la celda actual.1
pone 1 en la celda actual.!
voltea la celda actual.
No hay bucles, por lo que un programa de n caracteres termina después de exactamente n pasos. Un programa es aburrido si todas las celdas contienen 0 al final de la ejecución, y emocionante si hay al menos uno 1. Tenga en cuenta que el tamaño de la cinta no está especificado, por lo que, dependiendo de la implementación, puede ser bidireccional infinito o circular.
Un programa de ejemplo
Considera el programa 1>>>!<<<<0>!>>>!
. En una cinta infinita, la ejecución se realiza de la siguiente manera:
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
Al final, todas las celdas son 0, por lo que este programa es aburrido. Ahora, ejecutemos el mismo programa en una cinta circular de longitud 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
Esta vez, hay una celda con valor 1, ¡así que el programa es emocionante! Vemos que si un programa es aburrido o emocionante depende del tamaño de la cinta.
La tarea
Su entrada es una cadena no vacía <>01!
que representa un programa en el lenguaje de programación anterior. Una matriz de caracteres también es un formato de entrada aceptable. Se garantiza que el programa será aburrido cuando se ejecuta en una cinta infinita. Su salida será la lista de longitudes de cinta en las que el programa es emocionante. Tenga en cuenta que solo necesita probar el programa en cintas que son más cortas que la longitud del programa.
La solución con el recuento de bytes más bajo en cada idioma es la ganadora. Aplican reglas estándar de código de golf .
Casos de prueba
> : []
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!
?