Desafío:
Dada una matriz (o matriz 2d) de 0s y 1s, genera el número de pasos que toma para que el juego de la vida de Conway alcance un estado estable, o -1 si nunca llega a uno. Un estado estable es un estado en el que no se activan o desactivan celdas en cada paso. El juego debe ejecutarse en la matriz dada, con la parte superior e inferior conectadas y los lados conectados. (es decir, dada una matriz de 4x3, debería ejecutarse en un toro de 4x3) La matriz de entrada no será mayor que 15x15.
Nota: Si la matriz comienza en un estado estable, la salida debería ser 0.
Muestras:
Entrada:
[[0,0,0],
[0,1,1],
[0,1,0]]
Salida:
2
Proceso: (esto no necesita ser mostrado)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Entrada:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Salida:
2
Proceso:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Entrada:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Salida:
-1
Proceso:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
repitiendo para siempre
Entrada:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Salida:
4 4
Proceso:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Entrada:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Salida:
0 0
Proceso:
El estado inicial es estable.
Reglas del juego de la vida
Si una celda que está apagada (0) está al lado de exactamente tres en (1) celdas, se enciende. De lo contrario, se deja fuera. Si una celda que está encendida está al lado de 2 o 3 en cuadrados, dice encendido. De lo contrario, está apagado.
Respuestas:
Mathematica,
130129 bytesNo recomendaría probar más de 4x4, porque tomará una eternidad (y mucha memoria).
Explicación
Esto simplemente simula el juego de la vida para 2 N pasos, donde N es el número de células en la entrada. Esto garantiza que si el sistema se instala en un estado estable, lo hemos alcanzado. Luego, encontramos el primer par de estados idénticos consecutivos en la historia simulada.
Veamos el código:
Esto calcula 2 N , ya que
Join@@
se usa para aplanar una lista 2D.Esto simula el Juego de la Vida durante 2 N generaciones. La matriz 3x3 especifica la vecindad de un autómata 2D totalista y
224
es el número de regla del Juego de la vida estándar. He escrito sobre cómo calcular este número aquí en Mathematica.SE .Esto obtiene todos los pares consecutivos (superpuestos) de generaciones.
Esto encuentra el primer par de generaciones idénticas, por defecto
0
si no se encuentra ninguno y limita la búsqueda a profundidad1
. Si por ejemplo un par se encuentra, el resultado es devuelto en una lista sin embargo. Entonces usamos:Para extraer el primer elemento de esa lista (el valor predeterminado de
0
, siendo atómico, no se ve afectado por esto).Finalmente restamos uno porque el desafío espera
0
índices basados-1
en el fracaso y.fuente
Lua,
531509488487464424405404 Bytes¿Quién quiere una presentación masiva? \ o /
Editar: lo mejoré, pero ya no sé cómo jugarlo, así que ... las
explicaciones soncomentarios añadidos :)Guardado ~ 60 bytes con la ayuda de @ KennyLau
pequeño corte golf uno más byte por el cambio de nombre
a
enY
para evitar la conversión hexadecimal inlineSin golf
Casos de prueba
Aquí hay algunos casos de prueba
fuente
Jalea,
2625 bytesPruébalo en línea! o verificar todos los casos de prueba .
Casos de prueba más grandes (de la respuesta de @ Katenkyo ): 15 × 15 estable | Planeador 15 × 14
Cómo funciona
fuente
Perl,
154151144140137133129 bytesIncluye +3 para
-ap0
Ejecutar con la entrada como una línea de grupos de dígitos separados por espacio
Esto solo es realmente necesario en caso de que la entrada sea inmediatamente estable. En todos los demás casos, también puede darle más convenientemente como líneas separadas de dígitos:
Sin embargo, dar entrada de esta manera daría 1 en lugar de 0 para una configuración inmediatamente estable.
life.pl
:Casi venciendo a Mathematica en este ...
Solo en versiones anteriores de Perl (donde podría usar una constante como variable) funciona esta solución de 126 bytes:
En caso de que haya al menos 2 filas, esta solución de 123 bytes funciona en todas las versiones de Perl:
fuente
rubí, 207 bytes
Mantengo un historial de cada tablero, así que si obtengo un tablero que he visto antes, sé que sucedió una de las dos cosas. primero podría ser que hemos encontrado una posición estable, en cuyo caso será la más resentida de nuestra historia. La otra posibilidad es que tengamos un bucle.
fuente
15*15*4*1000
-> 900 KB, lo suficientemente bueno para los casos en que necesitaremos 10k + gens :).Julia,
9288 bytesVerificación
fuente