Vous recevez en entrée une image en niveaux de gris. Votre tâche consiste à trouver dans le Game of Life de Conway un motif statique ou en boucle qui ressemble le plus étroitement possible à l'image d'entrée.
Votre sortie peut être soit une image fixe ou une animation en boucle dans un format qui peut être converti en GIF. Les dimensions de l'image en sortie doivent être identiques à celles de l'entrée et il ne doit contenir que des pixels en noir et blanc.
Si la sortie est une animation, chaque image doit être générée à partir de la précédente selon les règles du Jeu de la vie, avec une cellule par pixel. L'animation doit être bouclée, la première image étant générée à partir de la dernière image selon les mêmes règles.
Si la sortie est une image fixe, l'application des règles de jeu de la vie doit produire la même image. Cela signifie qu'aucune cellule "vivante" ne peut avoir plus de trois ou moins de deux voisins "vivants", et aucune cellule "morte" ne peut avoir exactement trois voisins "vivants". (Notez qu'il s'agit en gros d'une animation identique à celle décrite ci-dessus, mais avec une seule image.)
Règles supplémentaires et clarifications:
Vous (ou votre programme) pouvez choisir si les cellules "vivantes" sont représentées en blanc et "mortes" en noir, ou inversement. C'est-à-dire que vous pouvez coder ceci ou votre programme peut le choisir en fonction de l'image d'entrée. (Mais cela doit être identique pour chaque image de l'animation.)
Les conditions aux limites doivent être périodiques, ce qui signifie que les cellules de la colonne la plus à droite ont des voisins sur la colonne la plus à gauche, etc.
Pour les animations, la cadence est à vous (ou à votre programme); J'imagine que des fréquences d'images rapides fonctionneront bien pour approximer les pixels gris.
S'il vous plaît poster au moins deux résultats intégrés dans votre réponse. Si vous pouvez publier les résultats de toutes les images d'entrée ci-dessous, c'est préférable.
Il est acceptable de réduire les images de test si cela est nécessaire pour obtenir des gifs avec des fichiers suffisamment petits. Si vous souhaitez également créer un lien vers des fichiers plus volumineux, c'est très bien. Si vous voulez vous vanter, n'hésitez pas à trouver des fichiers source de résolution supérieure.
Essayez d'éviter d'avoir trop de paramètres contrôlables dans votre code - il est préférable que la seule entrée de votre programme soit l'image. L'exception est si vous souhaitez avoir un paramètre pour contrôler le nombre d'images d'animation, car cela affectera la taille du fichier.
Vous pouvez utiliser des programmes externes pour modifier le format des fichiers d'entrée et de sortie et / ou compiler des images de sortie en une animation si vous le souhaitez. (Ce n'est pas un défi de gestion de format de fichier.)
C'est un concours de popularité , donc la réponse avec le plus de votes l'emporte.
Voici une sélection d'images de test, principalement issues d'autres questions de ce site. (Il est possible que j'ajoute plus tard des images d'entrée "bonus" supplémentaires.)
Pour commencer, voici une tentative de référence très stupide dans Python 2, qui tire parti du fait qu’un bloc de quatre carrés est une structure stable dans le jeu de la vie. Il redimensionne simplement l'image d'entrée d'un facteur 4, puis trace un bloc si le pixel correspondant est plus sombre 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)
Voici quelques sorties de l'exemple de code. Je suis sûr que de meilleurs résultats sont possibles.