Estaba jugando con un autómata celular y encontré uno que tenía un comportamiento interesante. Así es como funciona:
Lee una cadena binaria de izquierda a derecha, si encuentra un 1seguido por 2otros valores, agregará un 0al resultado y continuará leyendo. Si encuentra a 0(o quedan menos de 3 valores) agregará el valor actual y a 1y continuará leyendo. Al final de la cadena, agregará un solo 1al resultado.
Aquí hay un ejemplo resuelto de una generación
01011111
^
Primero nos encontramos con un, 0así que agregamos 01nuestro resultado
01011111
^
01
Ahora nos encontramos con un, 1así que agregamos un cero y omitimos los siguientes dos valores
01011111
^
010
Nos encontramos con otro, 1así que hacemos lo mismo.
01011111
^
0100
Ahora tenemos otro 1espacio pero no suficiente para saltar, así que agregamos la celda actual y un 1(en este caso 11)
01011111
^
010011
Estamos al final, así que agregamos un single 1y terminamos esta generación
01011111
^
0100111
Tarea
Dada la entrada en cualquier formato razonable, debe crear una función o programa que calcule una generación del autómata.
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Implementación de muestra
Aquí hay una implementación de muestra en Haskell (define una función d, pero el programa imprime una iteración indefinidamente):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10, ¿debería imprimirse 11011? Creo que unos cuantos casos de prueba sería de gran ayuda