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.
Réponses:
Python
Plisser les yeux:
Le code est imprimé sur les pixels les plus blancs avec la durée de vie toujours la plus adaptée . Il y a donc un argument de coupure qui vous permet de décider si le seuil d'arrondi au blanc noir est atteint. J'ai expérimenté avec living-is-white et le résultat est sensiblement le même.
la source
#Python
Java
Une approche basée sur la détection des contours. Nécessite ce fichier texte dans le répertoire en cours d'exécution.
Quelques résultats:
la source
C ++
Approche de pixellisation simple en utilisant la moyenne de chaque grille 8x8 pour sélectionner une grille de sortie 8x8 (une "texture de couleur"). Chaque grille de sortie 8x8 a un séparateur de 2 cellules en haut et à droite. Les grilles ont été conçues pour des natures mortes de 4 cellules à 18 cellules dans les 6x6 pixels restants.
Le programme agit comme un filtre de PGM binaire à PBM binaire. Par défaut, les images sont "sombres"; le noir est la mort et le blanc est la vie;
-i
l'inverse.-g [value]
ajoute un gamma, qui est utilisé pour pré-pondérer les moyennes avant de sélectionner les textures de couleur.Résultats sélectionnés (note: tous les pbm ont été convertis en png en utilisant un programme tiers pour le téléchargement):
Escher, gamma 2.2
Mona Lisa, gamma 2.2
Océan, gamma 2.2 inversé
Chiot, gamma 2.2
Trahison des Images, gamma 2.2 inversé
Mona Lisa gamma 2.2, inversée, pour comparaison
la source