In einem Empfänger von 5x5 befindet sich ein Virus. Da wir wissen, wie es seine Kontamination verbreitet, besteht Ihre Mission darin, die letzte Stufe der Kontamination auszugeben.
Der Empfänger
Es wird als zweidimensionales Array von 5x5 dargestellt:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Wo 1
bedeutet eine Position, an der das Virus bereits kontaminiert ist, und 0
eine Position, die nicht kontaminiert ist.
Wie sich das Virus ausbreitet
- Eine kontaminierte Position kann nicht sauber sein.
- Eine saubere Position wird in der nächsten Stufe nur dann kontaminiert, wenn mindestens zwei ihrer benachbarten Positionen (Nord-, Ost-, Süd- und Westzellen) kontaminiert sind.
- Die letzte Stufe der Kontamination tritt ein, wenn keine sauberen Zellen mehr kontaminiert werden können.
Stichprobe
Unter Verwendung des oben beschriebenen Empfängers als Stufe 1 der Kontamination wird die Stufe 2 sein:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
Die Stufe 3 der Kontamination wird sein:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Die Stufe 4 der Kontamination wird sein:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Und die Stufe 5 (in diesem Beispiel die letzte) wird sein:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Herausforderung
Wenn Sie eine Stufe der Kontamination als Eingabe angeben, sollten Sie die letzte Stufe der Kontamination ausgeben.
Sie dürfen ein vollständiges Programm oder eine Funktion schreiben. Sie können die Eingabe als Array / Liste, als getrennte Zahlen oder sogar als Zeichenfolge verwenden. Wählt den besten Weg, der zu Ihrer Sprache passt.
Die kürzeste Antwort in Bytes gewinnt!
Ein weiterer Testfall
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
quelle
1 0 1
es in der Ausgabe vorkommen? Liegt die mittlere Null nicht neben zwei1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
als Testfall hinzufügen ?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, was unverändert bleibt.Antworten:
Da es sich im Grunde genommen um einen zellularen Automaten handelt, gebe ich Ihnen ..
Golly Quicklife-Regel, 10 Bytes
Geben Sie die Regel ein, fügen Sie das Raster in Golly ein und führen Sie das Muster aus. Das resultierende Muster ist die Ausgabe.
Erläuterung:
Oder wenn Sie auf einer vollständigen RuleLoader-Regel bestehen, 89 Byte:
Der Regelname ist X, die gleichen Schritte wie zuvor.
quelle
B3/S23
was alles kann! ... aber es hat ein striktes Eingabeformat (wie das gesamte Programm in der Eingabe enthalten ist (wie würden Sie es sonst tun?)). ABER WARUM DEN SPASS RUINIEREN?Python 2, 97 Bytes
Probieren Sie es online aus . Die Eingabe wird als Zeichenfolge in Anführungszeichen gesetzt, wobei jede Zeile durch Zeilenumbrüche begrenzt wird. Das
980
ist nicht optimal und kann durch ein unteres Vielfaches von 35 ersetzt werden. Da es keinen Einfluss auf die Länge dieses Programms hat, habe ich die Bestimmung der niedrigsten sicheren Obergrenze als Übung für den Leser belassen.quelle
Javascript (ES6),
918987 BytesAls Funktion, die Eingaben als Array von Zahlen oder Zeichenfolgen akzeptiert.
-2 Bytes von Neil (Kombination von Zuweisung
y
mit String-Konvertierung)-2 Bytes (Variable entfernen
j
)quelle
(y=...)+''==x
statt(y=...),y+''==x
.MATL , 22 Bytes
Dies funktioniert in der aktuellen Version (15.0.0) der Sprache.
Probieren Sie es online aus !
Das Eingabeformat ist: 2D-Array mit durch Semikolons getrennten Zeilen. Die vier Testfälle haben also folgende Eingaben:
Erläuterung
Dies führt wiederholt eine 2D-Faltung des Eingabearrays mit der folgenden Maske durch, die definiert, welche Nachbarn als kontaminierend gelten:
Um ein Ergebnis zu erhalten, das dieselbe Größe wie das ursprüngliche Array hat, wird es zuerst mit einem Rahmen aus Nullen aufgefüllt, und dann wird nur der "gültige" Teil der Faltung beibehalten (dh der ohne Kanteneffekte).
Ein Schwellenwert von 2 wird auf die Ausgabe der Faltung angewendet, und das Ergebnis wird mit der ursprünglichen Eingabe elementweise ODER-verknüpft.
Dies muss ausreichend oft durchgeführt werden, um sicherzustellen, dass der Endzustand erreicht wurde. Ein einfaches Kriterium, das dies erfüllt, lautet: Iterieren Sie so oft wie die Anzahl der Einträge im Eingabearray (dh 25 Mal in den Testfällen).
quelle
TI-BASIC, 151 Bytes
Eingabe als
[[1,0,0,1,1][1,0,0,0,0]...]
.quelle
Repeat
Schleife.Lua, 236 Bytes
Akzeptiert Eingaben in der Befehlszeile und verwendet Luas String-Manipulation, um die Antwort zu erhalten.
Ungolfed:
quelle
APL,
767270 BytesDies bedeutet: Erweitern Sie die Matrix auf eine 7x7-Matrix und zentrieren Sie dann unser Argument (Omega). Generieren Sie aus dieser Matrix 4 "untergeordnete" Matrizen, die jeweils in eine andere Richtung verschoben sind (nach oben / unten / links / rechts), addieren Sie sie (damit wir die Anzahl der Nachbarn erhalten) und lassen Sie den Frame fallen (um zu a zurückzukehren) 5x5 Matrix). Oder diese neue Matrix mit der "alten", um sicherzustellen, dass wir dabei keine Zellen fallen lassen (dh am Rand). Verwenden Sie dann die
⍣≡
Kombination, um zu einem Festpunktwert zu gelangen.Beispiel (unter Berücksichtigung der Funktion, der zugewiesen wurde
contaminate
):quelle