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 1
seguido por 2
otros valores, agregará un 0
al resultado y continuará leyendo. Si encuentra a 0
(o quedan menos de 3 valores) agregará el valor actual y a 1
y continuará leyendo. Al final de la cadena, agregará un solo 1
al resultado.
Aquí hay un ejemplo resuelto de una generación
01011111
^
Primero nos encontramos con un, 0
así que agregamos 01
nuestro resultado
01011111
^
01
Ahora nos encontramos con un, 1
así que agregamos un cero y omitimos los siguientes dos valores
01011111
^
010
Nos encontramos con otro, 1
así que hacemos lo mismo.
01011111
^
0100
Ahora tenemos otro 1
espacio 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 1
y 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
1
y0
en 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\|
)Ó./&1
seguido deÓ31/0
.JavaScript (ES6), 56 bytes
Toma entrada como una matriz de caracteres. Devuelve una cadena o el número
1
si 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 elv
valor 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.count
con el2<s.count
de -1 bytes .1
s en la entrada en0 < element
lugar deelement == 0
Python 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
a
como 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