Herausforderung:
Geben Sie bei einer Matrix (oder einem 2D-Array) aus 0 und 1 die Anzahl der Schritte aus, die Conways Lebensspiel benötigt, um einen stabilen Zustand zu erreichen, oder -1, wenn es nie einen erreicht. Ein stabiler Zustand ist ein Zustand, in dem bei jedem Schritt keine Zellen ein- oder ausgeschaltet werden. Das Spiel muss in der angegebenen Matrix ausgeführt werden, wobei Ober- und Unterseite sowie die Seiten miteinander verbunden sind. (Bei einer 4x3-Matrix sollte diese auf einem 4x3-Torus ausgeführt werden.) Die Eingabematrix darf nicht größer als 15x15 sein.
Hinweis: Wenn die Matrix in einem stabilen Zustand startet, sollte der Ausgang 0 sein.
Proben:
Eingang:
[[0,0,0],
[0,1,1],
[0,1,0]]
Ausgabe:
2
Prozess: (muss nicht angezeigt werden)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Eingang:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Ausgabe:
2
Verarbeiten:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Eingang:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Ausgabe:
-1
Verarbeiten:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
für immer wiederholen
Eingang:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Ausgabe:
4
Verarbeiten:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Eingang:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Ausgabe:
0
Verarbeiten:
Der Anfangszustand ist stabil.
Spielregeln des Lebens
Wenn eine Zelle, die ausgeschaltet ist (0), neben genau drei eingeschalteten (1) Zellen liegt, ist sie eingeschaltet. Ansonsten bleibt es aus. Wenn eine Zelle, die eingeschaltet ist, neben 2 oder 3 auf Quadraten steht, heißt das, dass sie eingeschaltet ist. Ansonsten ist es ausgeschaltet.
Antworten:
Mathematica,
130129 BytesIch würde nicht empfehlen, mehr als 4x4-Eingänge zu verwenden, da dies ewig dauern wird (und viel Speicherplatz benötigt).
Erläuterung
Dies simuliert einfach das Spiel des Lebens für 2 N Schritte, wobei N die Anzahl der Zellen in der Eingabe ist. Dies garantiert, dass wir einen stabilen Zustand des Systems erreicht haben. Danach finden wir das erste Paar aufeinanderfolgender identischer Zustände in der simulierten Historie.
Lass uns den Code durchgehen:
Dies berechnet 2 N , da
Join@@
zum Reduzieren einer 2D-Liste verwendet wird.Dies simuliert das Spiel des Lebens für 2 N Generationen. Die 3x3-Matrix gibt die Nachbarschaft eines totalistischen 2D-Automaten an und
224
ist die Regelnummer des Standard-Lebensspiels. Ich habe hier auf Mathematica.SE darüber geschrieben, wie man diese Zahl berechnet .Dies ergibt alle aufeinanderfolgenden (überlappenden) Generationenpaare.
Dadurch wird das erste Paar identischer Generationen
0
gefunden. Wird keine gefunden, wird standardmäßig die Suche auf die Tiefe beschränkt1
. Wenn ein solches Paar wird gefunden, wird das Ergebnis allerdings in einer Liste zurückgegeben. Also benutzen wir:So extrahieren Sie das erste Element aus dieser Liste (der Standardwert von
0
ist atomar und bleibt davon unberührt).Schließlich subtrahieren wir eins, weil die Herausforderung auf
0
-basierten Indizes und-1
auf Misserfolg beruht.quelle
Lua,
531509488487464424405404 BytesWer möchte eine massive Einreichung? \O/
Bearbeiten: Verbesserte es, aber weiß nicht mehr, wie man Golf spielt, also ... werden
Erklärungen kommenKommentare hinzugefügt :)~ 60 Bytes mit Hilfe von @ KennyLau gespeichert
kleine Golf - Schneiden ein weiteres Byte durch die Umbenennung
a
inY
die inlined hexadezimale Umwandlung zu verhindernUngolfed
Testfälle
Hier sind einige Testfälle
quelle
Jelly,
2625 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Größere Testfälle (aus der Antwort von @ Katenkyo ): 15 × 15 stabil |15 × 14 Segelflugzeug
Wie es funktioniert
quelle
Perl,
154151144140137133129 BytesBeinhaltet +3 für
-ap0
Führen Sie die Eingabe als eine durch Leerzeichen getrennte Reihe von Zifferngruppen aus
Dies wird nur dann wirklich benötigt, wenn die Eingabe sofort stabil ist. In allen anderen Fällen können Sie es auch bequemer als separate Ziffernzeilen angeben:
Wenn Sie auf diese Weise eine Eingabe machen, erhalten Sie jedoch 1 anstelle von 0 für eine sofort stabile Konfiguration.
life.pl
:Mathematica in diesem Fall fast geschlagen ...
Nur in älteren Perl-Versionen (wo Sie eine Konstante als Variable verwenden könnten) funktioniert diese 126-Byte-Lösung:
Wenn mindestens 2 Zeilen vorhanden sind, funktioniert diese 123-Byte-Lösung für alle Perl-Versionen:
quelle
Rubin, 207 Bytes
Ich führe von jedem Board eine Chronik. Wenn ich also ein Board bekomme, das ich gesehen habe, bevor ich weiß, dass eines von zwei Dingen passiert ist, Erstens könnte es sein, dass wir eine stabile Position gefunden haben. In diesem Fall ist dies die bitterste in unserer Geschichte. Die andere Möglichkeit ist, dass wir eine Schleife haben.
quelle
15*15*4*1000
-> 900 KB. Dies ist gut genug für Fälle, in denen 10k + Gens benötigt werden :).Julia,
9288 BytesNachprüfung
quelle