Ti viene data come input un'immagine in scala di grigi. Il tuo compito è trovare un modello statico o in loop nel gioco della vita di Conway che assomigli il più possibile all'immagine di input.
L'output può essere sia un'immagine statica o un'animazione a ciclo continuo in un formato che può essere convertito in GIF. Le dimensioni dell'immagine di output devono essere uguali all'input e devono contenere solo pixel in bianco e nero.
Se l'output è un'animazione, ogni fotogramma deve essere generato dal precedente in base alle regole del Gioco della vita, con una cella per pixel. L'animazione deve essere ripetuta, con il primo fotogramma generato dall'ultimo fotogramma dalle stesse regole.
Se l'output è un fermo immagine, l'applicazione delle regole del gioco della vita deve produrre la stessa immagine. Ciò significa che nessuna cellula "viva" può avere più di tre o meno di due vicini "vivi" e nessuna cellula "morta" può avere esattamente tre vicini "vivi". (Nota che questo è fondamentalmente lo stesso di un'animazione come descritto sopra, ma con un solo fotogramma.)
Regole extra e chiarimenti:
Tu (o il tuo programma) potete scegliere se le celle "vive" sono rappresentate come bianche e "morte" come nere, o viceversa. Cioè, puoi codificare questo o il tuo programma può sceglierlo in base all'immagine di input. (Ma deve essere lo stesso per ogni fotogramma dell'animazione.)
Le condizioni al contorno dovrebbero essere periodiche, nel senso che le celle nella colonna più a destra hanno dei vicini nella colonna più a sinistra, ecc.
Per le animazioni, il frame rate dipende da te (o dal tuo programma); Immagino che frame rate veloci funzioneranno bene per approssimare i pixel grigi.
Si prega di pubblicare almeno due risultati integrati nella risposta. Se puoi pubblicare risultati da tutte le immagini di input in basso, è preferibile.
È accettabile ridimensionare le immagini di prova se ciò è necessario al fine di ottenere gif con dimensioni file abbastanza piccole. Se vuoi collegare anche a file più grandi, va bene. Se vuoi metterti in mostra, sentiti libero di trovare alcuni file sorgente ad alta risoluzione.
Cerca di evitare di avere troppi parametri controllabili nel tuo codice: è meglio se l'unico input del tuo programma è l'immagine. L'eccezione è se si desidera avere un parametro per controllare il numero di fotogrammi di animazione, poiché ciò influirà sulla dimensione del file.
È possibile utilizzare programmi esterni per modificare il formato dei file di input e output e / o compilare frame di output in un'animazione, se lo si desidera. (Questa non è una sfida per la gestione del formato di file.)
Questo è un concorso di popolarità , quindi vince la risposta con il maggior numero di voti.
Ecco una selezione di immagini di prova, per lo più tratte da altre domande su questo sito. (È possibile che aggiungerò ulteriori immagini di input "bonus" in seguito.)
Giusto per iniziare, ecco un tentativo di riferimento molto stupido in Python 2, che sfrutta il fatto che un blocco di quattro quadrati è una struttura stabile nel Gioco della Vita. Ridimensiona l'immagine di input di un fattore 4, quindi disegna un blocco se il pixel corrispondente è più scuro di 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)
Ecco alcuni output del codice di esempio. Sono sicuro che sono possibili risultati molto migliori.