Da morgen der 4. Mai ist, gibt es hier einen kleinen Star Wars-Themenbeitrag, der Sie mental auf all die schlechten Witze vorbereitet, die morgen kommen.
HINTERGRUNDGESCHICHTE
Während einer Sitzung des galaktischen Senats sitzen alle Senatoren in einem n*n
Raster. Ein plötzlicher Ausbruch der JarJar-Grippe (der ewig anhält und die Infizierten wie JarJar Binks ansprechen lässt) führt dazu, dass sich einige Senatoren anstecken.
Hier ist ein Beispiel mit einem 6*6
Raster, in dem X
sich die infizierten Senatoren befinden. Die entsprechende Liste lautet [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
:
Danach beginnt sich die Infektion schrittweise auszubreiten. Zwei Senatoren grenzen aneinander, wenn sie eine ganze Kante im Raster haben (dh oben, unten, rechts, links), was bedeutet, dass wir Diagonalen ausschließen.
Wir können daraus schließen, dass ein Senator an 2,3 oder 4 andere Senatoren angrenzt und die folgenden Regeln für die Infektion beansprucht:
- Ein infizierter Senator bleibt für immer infiziert
- Ein Senator wird in einem Schritt infiziert, wenn er im vorherigen Schritt neben zwei oder mehr infizierten Senatoren war
Hier ist ein Beispiel mit dem vorherigen Raster, das die 2 ersten Schritte der Infektion zeigt:
Nach den nächsten Schritten wird der gesamte Senat infiziert
DEINE AUFGABE
Ihr Code muss keine ungültigen Eingaben wie eine Liste größer als n*n
oder Koordinaten verarbeiten, die keine Unterscheidungsmerkmale sind.
Ihr Code verwendet als Eingabe eine Liste von Paaren von Ganzzahlen (oder ein Binärgitter oder ein anderes Format, das zu Ihrer Sprache passt) und eine Ganzzahl n
(was unnötig sein kann, wenn Sie ein anderes Format als eine Liste verwenden), zum Beispiel:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n ist die Seite des Gitters, was bedeutet, dass das Gitter ein * n-Gitter ist, und die Liste der Ganzzahlpaare sind die Koordinaten der Zellen der ursprünglich infizierten Senatoren.
Die untere linke Ecke des Gitters ist [0,0] und die obere rechte Ecke ist [n-1, n-1]. Oben links ist [0, n-1].
Ihr Code muss eine Ganzzahl ausgeben:
-1
oder ein falscher Wert oder ein Fehler, wenn das gesamte Raster niemals vollständig infiziert wird, oder die Mindestanzahl von Schritten, die erforderlich sind, um das gesamte Raster zu infizieren
Testfälle
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
Denken Sie daran, dass dies Code-Golf ist und somit die kürzeste Antwort in Bytes gewinnt!
n
? Gibt es einen Maximalwert?CellularAutomaton
...Antworten:
MATL,
2928 BytesDie Eingabe erfolgt in Form einer 2D-Matrix aus Einsen und Nullen
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
tn:"tlY6Z+1>Z|t?x@D.]]N?xl_
? (Ich habe nicht viel getestet). Wenn alle Elemente irgendwann 1 sind, zeigen Sie den Schleifenindex sofort an und löschen Sie den Stapel. Am Ende der Schleife, wenn der Stapel nicht leer ist, löschen und drücken-1
APL (Dyalog 16.0), 54 Zeichen oder 60 Bytes
Nimmt die beigefügte Matrix als Argument, gibt die Schrittnummer zurück, die die Infektion abgeschlossen hat, dh 1 = ist bereits vollständig infiziert. 0 = ist nicht vollständig verteilt, was nur 1 + den OP-Nummern entspricht.
54 Zeichen (Unicode):
60 Bytes (klassisch):
⌺
ist äquivalent zu⎕U233A
Beispiellauf:
Die Schritte sind wie folgt:
quelle
Pyth , 49 Bytes
Testsuite .
Verwendet 1-Indizierung für die Ausgabe.
quelle
Python, 231 Bytes
Es wird ein Fehler ausgegeben, wenn dies nicht möglich ist.
Probieren Sie es online!
quelle
0/0
spart zwei Bytes abraise
. Vielleicht1/(g!=h)
würde es funktionieren? (dann könnte das ganzewhile
auch inline sein).q=lambda r,c:g[r][c]if(0<=r<m)*(0<=c<m)else 0
spart 12. Sie können den Raum zwischen (a) entfernen1
undfor
und (b)]
undfor
zu.JavaScript (ES6), 132 Byte
Wobei
\n
das wörtliche Zeilenumbruchzeichen darstellt. Übernimmt die Eingabe als Zeichenfolge von0
s und1
s in einem durch Zeilenumbrüche getrennten Array. Gibt zurück,NaN
wenn das Grid niemals vollständig infiziert wird.quelle