Se le da como entrada una imagen en escala de grises. Su tarea es encontrar un patrón estático o en bucle en el Juego de la vida de Conway que se parezca lo más posible a la imagen de entrada.
Su salida puede ser ya sea una imagen fija o una animación en bucle en algún formato que se puede convertir a gif. Las dimensiones de la imagen de salida deben ser las mismas que las de entrada, y debe contener solo píxeles en blanco y negro.
Si la salida es una animación, cada cuadro debe generarse a partir del anterior de acuerdo con las reglas del Juego de la Vida, con una celda por píxel. La animación debe realizar un bucle, con el primer fotograma generado a partir del último fotograma por las mismas reglas.
Si el resultado es una imagen fija, la aplicación de las reglas del juego de la vida debe producir la misma imagen. Esto significa que ninguna célula 'viva' puede tener más de tres o menos de dos vecinos 'vivos', y ninguna célula 'muerta' puede tener exactamente tres vecinos 'vivos'. (Tenga en cuenta que esto es básicamente lo mismo que una animación como se describió anteriormente, pero con un solo cuadro).
Reglas y aclaraciones adicionales:
Usted (o su programa) puede elegir si las celdas 'vivas' se representan como blancas y 'muertas' como negras, o viceversa. Es decir, puede codificar esto o su programa puede elegirlo en función de la imagen de entrada. (Pero debe ser el mismo para cada cuadro de la animación).
Las condiciones de contorno deben ser periódicas, lo que significa que las celdas en la columna de la derecha tienen vecinos en la columna de la izquierda, etc.
Para animaciones, la velocidad de cuadros depende de usted (o de su programa); Me imagino que las velocidades de cuadro rápidas funcionarán bien para aproximar píxeles grises.
Publique al menos dos resultados incrustados en su respuesta. Si puede publicar resultados de todas las imágenes de entrada a continuación, es preferible.
Es aceptable reducir las imágenes de prueba si es necesario para lograr gifs con archivos de tamaño suficientemente pequeño. Si desea vincular también a archivos más grandes, está bien. Si desea presumir, siéntase libre de encontrar algunos archivos fuente de mayor resolución.
Intente evitar tener demasiados parámetros controlables en su código; es mejor si la única entrada de su programa es la imagen. La excepción es si desea tener un parámetro para controlar el número de cuadros de animación, ya que eso afectará el tamaño del archivo.
Puede usar programas externos para cambiar el formato de los archivos de entrada y salida, y / o compilar cuadros de salida en una animación si lo desea. (Este no es un desafío de manejo de formato de archivo).
Este es un concurso de popularidad , por lo que gana la respuesta con más votos.
Aquí hay una selección de imágenes de prueba, tomadas principalmente de otras preguntas en este sitio. (Es posible que luego agregue imágenes de entrada adicionales "adicionales").
Solo para comenzar, aquí hay un intento de referencia muy tonto en Python 2, que aprovecha el hecho de que un bloque de cuatro cuadrados es una estructura estable en el Juego de la Vida. Simplemente cambia la escala de la imagen de entrada por un factor de 4, luego dibuja un bloque si el píxel correspondiente es más oscuro que 0,5.
from skimage import io
from skimage import transform
import sys
img = io.imread(sys.argv[1],as_grey=True)
source = transform.resize(img, [i/4 for i in img.shape])
img[:]=1
for x in xrange(source.shape[0]):
for y in xrange(source.shape[1]):
if source[x,y]<0.5:
img[x*4, y*4] = 0
img[x*4+1, y*4] = 0
img[x*4, y*4+1] = 0
img[x*4+1, y*4+1] = 0
io.imsave(sys.argv[2], img)
Aquí hay algunas salidas del código de ejemplo. Estoy seguro de que son posibles resultados mucho mejores.
Respuestas:
Pitón
Por favor entrecierra los ojos:
El código sella en los píxeles más blancos con el bodegón estándar más adecuado . Hay un argumento de corte para que pueda decidir dónde va el redondeo al umbral blanco y negro. He experimentado con living-is-white y el resultado es muy similar.
fuente
#Python
Java
Un enfoque basado en la detección de bordes. Requiere este archivo de texto en el directorio en ejecución.
Algunos resultados:
fuente
C ++
Enfoque directo de pixelación utilizando el promedio de cada cuadrícula de 8x8 para seleccionar una cuadrícula de salida de 8x8 (una "textura de color"). Cada cuadrícula de salida de 8x8 tiene un separador de 2 celdas en la parte superior y derecha. Las cuadrículas fueron diseñadas desde 4 bodegones de celdas hasta 18 bodegones dentro de los 6x6 píxeles restantes.
El programa actúa como un filtro de PGM binario a PBM binario. Por defecto, las imágenes son "oscuras"; el negro es muerte y el blanco es vida;
-i
Invierte esto.-g [value]
agrega una gamma, que se usa para preponderar promedios antes de seleccionar las texturas de color.Resultados seleccionados (nota: todos los pbm se convirtieron a png utilizando un programa de terceros para cargar):
Escher, gamma 2.2
Mona Lisa, gamma 2.2
Océano, gamma 2.2 invertido
Cachorro, gamma 2.2
Traición de imágenes, gamma 2.2 invertido
Mona Lisa gamma 2.2, invertida, para comparar
fuente