Sie erhalten als Eingabe ein Graustufenbild. Ihre Aufgabe ist es, in Conways Game of Life ein statisches oder sich wiederholendes Muster zu finden , das dem eingegebenen Bild so nahe wie möglich kommt.
Ihre Ausgabe kann entweder ein Standbild oder eine sich wiederholende Animation in einem Format sein, das in GIF konvertiert werden kann. Die Abmessungen des Ausgabebilds sollten mit denen der Eingabe übereinstimmen und dürfen nur schwarze und weiße Pixel enthalten.
Wenn es sich bei der Ausgabe um eine Animation handelt, muss jeder Frame gemäß den Game of Life-Regeln mit einer Zelle pro Pixel aus dem vorherigen generiert werden. Die Animation muss eine Schleife bilden, wobei das erste Bild nach denselben Regeln aus dem letzten Bild generiert wird.
Wenn es sich bei der Ausgabe um ein Standbild handelt, muss bei Anwendung der Spielregeln dasselbe Bild erstellt werden. Dies bedeutet, dass keine "lebende" Zelle mehr als drei oder weniger als zwei "lebende" Nachbarn haben darf und keine "tote" Zelle genau drei "lebende" Nachbarn haben darf. (Beachten Sie, dass dies im Prinzip mit einer Animation wie oben beschrieben identisch ist, jedoch nur mit einem Frame.)
Zusätzliche Regeln und Erläuterungen:
Sie (oder Ihr Programm) können wählen, ob "lebende" Zellen als weiß und "tote" als schwarz dargestellt werden oder umgekehrt. Das heißt, Sie können dies entweder fest codieren oder Ihr Programm kann es basierend auf dem eingegebenen Bild auswählen. (Es muss jedoch für jedes Bild der Animation gleich sein.)
Die Randbedingungen sollten periodisch sein, dh die Zellen in der rechten Spalte haben Nachbarn in der linken Spalte usw.
Bei Animationen liegt die Framerate bei Ihnen (oder Ihrem Programm). Ich stelle mir vor, dass schnelle Bildraten gut für die Approximation grauer Pixel geeignet sind.
Bitte posten Sie mindestens zwei Ergebnisse in Ihrer Antwort. Wenn Sie die Ergebnisse aller unten aufgeführten Eingabebilder veröffentlichen können, ist dies vorzuziehen.
Es ist akzeptabel, die Testbilder zu verkleinern, wenn dies erforderlich ist, um GIFs mit ausreichend kleinen Dateigrößen zu erzielen. Wenn Sie auch auf größere Dateien verlinken möchten, ist das in Ordnung. Wenn Sie angeben möchten, können Sie einige Quelldateien mit höherer Auflösung suchen.
Bitte versuchen Sie, zu viele steuerbare Parameter in Ihrem Code zu vermeiden. Es ist am besten, wenn die einzige Eingabe Ihres Programms das Bild ist. Die Ausnahme ist, wenn Sie einen Parameter zum Steuern der Anzahl der Animationsrahmen haben möchten, da dies die Dateigröße beeinflusst.
Sie können externe Programme verwenden, um das Format der Eingabe- und Ausgabedateien zu ändern und / oder Ausgabefelder in eine Animation zu kompilieren, wenn Sie dies möchten. (Dies ist keine Herausforderung beim Umgang mit Dateiformaten.)
Dies ist ein Beliebtheitswettbewerb , daher gewinnt die Antwort mit den meisten Stimmen.
Hier finden Sie eine Auswahl von Testbildern, die größtenteils aus anderen Fragen auf dieser Website stammen. (Es ist möglich, dass ich später zusätzliche "Bonus" -Eingabebilder hinzufüge.)
Um den Anfang zu machen, hier ist ein sehr dummer Referenzversuch in Python 2, der die Tatsache ausnutzt, dass ein Block mit vier Quadraten eine stabile Struktur im Spiel des Lebens ist. Es skaliert das Eingabebild nur um den Faktor 4 neu und zeichnet dann einen Block, wenn das entsprechende Pixel dunkler als 0,5 ist.
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)
Hier sind einige Ausgaben aus dem Beispielcode. Ich bin sicher, dass viel bessere Ergebnisse möglich sind.