Lebensechte zellulare Automaten sind zellulare Automaten, die Conways Spiel des Lebens insofern ähnlich sind, als sie auf einem (theoretisch) unendlich großen quadratischen Gitter arbeiten, in dem jede Zelle genau 8 Nachbarn hat und einer von 2 Zuständen ist, nämlich lebendig und tot .
Diese Like-like-Versionen unterscheiden sich jedoch in entscheidender Weise: Die Regeln, nach denen eine bestimmte Zelle zum Leben erweckt wird, und die Regeln, nach denen eine bestimmte Zelle bis zur nächsten Generation überlebt.
Zum Beispiel verwendet das klassische Spiel des Lebens die Regel B3/S23
, dh es werden 3 lebendige Zellen benötigt, um eine neue zu gebären, und entweder 2 oder 3 lebende Nachbarn, um zu überleben. Für diese Herausforderung gehen wir davon aus, dass sich die Nachbarn nicht selbst einschließen, sodass jede Zelle genau 8 Nachbarn hat.
Ihre Aufgabe ist es, bei gegebener Startkonfiguration, einer Geburtsregel, einer Überlebensregel und einer positiven Ganzzahl (der Anzahl der auszuführenden Generationen) den lebensechten Automaten zu simulieren, wobei diese Regeln für die Anzahl der Generationen in dem kürzestmöglichen Code verwendet werden . Die Ausgangskonfiguration ist eine quadratische Matrix / ein zweidimensionales Array oder eine mehrzeilige Zeichenfolge, die Sie auswählen können. Die anderen können in jedem vernünftigen Format und Verfahren angegeben werden.
Wenn zum Beispiel die Geburtsregel lautete 12345678
(alle lebenden Nachbarn), lautete die Überlebensregel 2357
und die Ausgangskonfiguration lautete
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Die nächsten zwei Generationen wären
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Wenn die Anzahl der angegebenen Generationen 10 wäre, wäre die Ausgabe etwas im Sinne von
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Sie müssen nicht mit Änderungen umgehen, die außerhalb der durch die Eingabematrix vorgegebenen Grenzen liegen. Alle Zellen außerhalb der Matrix beginnen jedoch tot zu sein. Daher kann die Eingabematrix eine beliebige Größe haben, bis zu dem Maximalwert, den Ihre Sprache unterstützen kann. Sie müssen die Karte nicht zwischen den Generationen ausgeben.
Dies ist ein Code-Golf, also gewinnt der kürzeste Code.
Testfälle
Diese verwenden die B/S
Notation, um die verwendeten Regeln anzugeben
B2/S2
, generations = 100
, Konfiguration:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Ausgabe:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
, Konfiguration:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Ausgabe:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Wenn Sie mehr Testfälle generieren müssen, können Sie diesen wunderbaren Simulator verwenden. Bitte achten Sie darauf, die Boardgröße zu begrenzen
quelle
Antworten:
MATL ,
2423 BytesEingänge sind:
;
als Zeilentrennzeichen verwendet wird.Probieren Sie es online! Oder siehe Testfälle: 1 , 2 .
Für ein paar Bytes mehr sehen Sie die Entwicklung in der ASCII-Kunst sehen .
Erläuterung
quelle
xx
am Anfang erscheint mir etwas verschwenderisch ...Wolfram Language (Mathematica) ,
144122 BytesProbieren Sie es online!
Anwendungsbeispiel:
Verwendet zu Beginn ein 10x10-Zufallsgitter, überlebt entweder mit 2 oder 3 Nachbarn, Geburten mit 3 Nachbarn, Plottergebnis bei 5 Iterationen.
quelle
R , 256 Bytes
Probieren Sie es online!
Leider sieht das nicht so gut aus, wie ich es mir erhofft hatte.
Eingabe : eine R-Matrix und die Challenge-Parameter. Ausgabe : die Matrix nach R Generationen.
Der Algorithmus füllt die Matrix mit Nullen auf, um die Grenzen zu handhaben. Dann iterativ: 1.) es wendet die Geburtsregel an und 2.) es tötet die vorhandenen Zellen, die die Überlebensregel nicht bestanden haben. Bei der Rückgabe wird die Polsterung entfernt.
quelle
216
dem mindestens ein Würfel gehört ...Python 2 ,
156149146 BytesProbieren Sie es online!
Übernimmt die Eingabe:
R
ules:[birth,survial]
Regeln als Liste vonstring
. z.B.(['135','246']
)g
enerationen:int
c
onfiguration: Quadratisches 2D-Array von1/0
oderTrue/False
Gibt 2d Array von zurück
True/False
quelle