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)
fuente

10, ¿debería imprimirse11011? Creo que unos cuantos casos de prueba sería de gran ayudaRespuestas:
V ,
262221 bytes¡Gracias a @CowsQuack por 4 bytes combinando expresiones regulares! Y @ ØrjanJohansen para otro byte con algunas combinaciones de expresiones regulares.
Pruébalo en línea!
Utiliza sustituto varias veces y agrega un 1 al final. Nada muy elegante. Tengo una versión que se reasigna
1y0en modo de inserción para obtener el efecto deseado, pero es bastante más largo.(Versión de reemplazo múltiple: ¡ Pruébelo en línea! )
fuente
Ó1ü0/&1(ües\|)Ó./&1seguido deÓ31/0.JavaScript (ES6), 56 bytes
Toma entrada como una matriz de caracteres. Devuelve una cadena o el número
1si se le da una matriz vacía.Manifestación
Mostrar fragmento de código
Versión animada
Ejemplos de entradas estables: 0101, 010011111
Mostrar fragmento de código
fuente
Python 2 , 88 bytes
Pruébalo en línea!
fuente
Python 2 , 89 bytes
Pruébalo en línea!
-4 bytes gracias a Rod
-6 bytes gracias a ovs
-1 byte gracias a micsthepick
fuente
[0]if v else[x[y],1]puede reescribirse como[[x[y],1],[0]][v], pero puede invertir elvvalor para llegar a 96 bytesSwift 3 , 147 bytes
-1 gracias a @ Mr.Xcoder
Sin golf, devolviendo el valor en lugar de imprimir:
fuente
3<=s.countcon el2<s.countde -1 bytes .1s en la entrada en0 < elementlugar deelement == 0Python 2 , 81 bytes
Tanto la entrada como la salida son listas (gracias a Erik the Outgolfer)
Pruébalo en línea!
Algunos casos
Python 2 , 85 bytes
Tanto la entrada como la salida son cadenas (solución inicial)
Pruébalo en línea!
Algunos casos
Explicación Es simplemente un golf de un método recursivo.
fuente
1>Z[0]lugar de0==Z[0].Perl 5 , 62 + 2 (
-F) = 64 bytesPruébalo en línea!
fuente
Scala , 131 + 29 = 160 bytes
Esto está dentro de una función que toma la cadena
acomo parámetro y devuelve la salida como una cadena.Tengo que hacerlo
import util.control.Breaks._, así que necesito agregar esos 28 bytes más un avance de línea final.Pruébalo en línea!
fuente
C # (.NET Core) , 108 bytes
Pruébalo en línea!
La entrada se toma como una cadena y una cadena se devuelve como salida.
fuente