In die Bank wurde eingebrochen, und alle lokalen Mafia-Schläger haben ein ungewöhnliches Alibi: Sie waren zu Hause und haben Connect 4 gespielt! Um bei der Untersuchung behilflich zu sein, müssen Sie ein Programm zur Validierung aller beschlagnahmten Connect 4-Karten schreiben, um zu überprüfen, ob die Positionen tatsächlich Positionen aus einem gültigen Connect 4-Spiel sind und nicht hastig zusammengesetzt wurden sobald die polizei an die tür geklopft hat.
Die Regeln für Connect 4: Spieler R
und Y
wechseln sich ab, um Kacheln ihrer Farbe in Spalten eines 7x6-Gitters abzulegen. Wenn ein Spieler ein Plättchen in die Spalte fallen lässt, fällt es nach unten, um die niedrigste unbesetzte Position in dieser Spalte einzunehmen. Gelingt es einem Spieler, einen horizontalen, vertikalen oder diagonalen Durchgang von vier Steinen seiner Farbe auf dem Brett zu erzielen, gewinnt er und das Spiel endet sofort.
Zum Beispiel (beim R
Starten) ist das Folgende eine unmögliche Connect 4-Position.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Ihr Programm oder Ihre Funktion muss eine Connect 4-Karte aufnehmen und entweder zurückgeben
- Ein falscher Wert, der angibt, dass die Position unmöglich ist oder
- Eine Reihe von Zahlen von 1 bis 7, was auf eine mögliche Folge von Bewegungen zu dieser Position (die Spalten führen , sind nummeriert ,
1
um7
von links nach rechts, so dass die Sequenz112
, zum Beispiel zeigt eine rote Bewegung in der Spalte1
, gefolgt von einem gelben move in der Spalte1
, gefolgt von einem roten Zug in der Spalte2
). Sie können eine andere Spaltennummer als 1234567 wählen, sofern Sie dies in Ihrer Lösung angeben. Wenn Sie die Liste in einem anderen Format zurückgeben möchten; Zum Beispiel als Array,[2, 4, 3, 1, 1, 3]
dann ist das auch in Ordnung, solange es einfach ist zu sehen, was die Bewegungen sind.
Sie können die Tafel in jedem vernünftigen Format lesen, auch mit anderen Buchstaben als R
und Y
für die Spieler, aber Sie müssen angeben, welcher Spieler zuerst spielt. Sie können davon ausgehen, dass das Board immer 6x7 ist und zwei Spieler anwesend sind.
Sie können davon ausgehen, dass die Positionen, die Sie erhalten, zumindest physisch auf einer Standard-Connect 4-Karte erstellt werden können. dh, dass es keine "schwebenden" Teile geben wird. Sie können davon ausgehen, dass das Board nicht leer ist.
Dies ist Codegolf, also gewinnt die kürzeste Antwort. Es gelten Standardlücken.
Beispiele
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |
quelle
Antworten:
Jelly , 57 Bytes
Nimmt eine Matrix, in der nicht
0
gefüllt ist,1
zuerst und dann2
gespielt wird. Ergibt eine Liste mit 1-indizierten Spalten, die leer sind, wenn eine Fälschung identifiziert wurde.Probieren Sie es online! (zu ineffizient für mehr als 7 Teile in weniger als einer Minute)
Hinweis:
ZṠṢ€Ƒȧ
+6 Bytes voranstellen )quelle
JavaScript (ES6),
202 194 187183 BytesNimmt die Eingabe als Matrix mit2 für rot, 4 für gelb und 0 für leer. Gibt eine Zeichenfolge mit 0 indizierten Zügen zurück (oder eine leere Zeichenfolge, wenn es keine Lösung gibt). Rote beginnen das Spiel.
Probieren Sie es online!
Wie?
Die rekursive FunktionG versucht alles zu ersetzen 2 und 4 gibts in der eingabematrix mit 1 und 3 jeweils.
Dabei wird sichergestellt, dass keine vier aufeinanderfolgenden ungeraden Werte gespielt werden, bis alle geraden Werte verschwunden sind (dh wenn eine Seite gewinnt, muss dies der letzte Zug sein).
Die Reihey des nächsten verfügbaren Steckplatzes für jede Spalte x ist gespeichert in p [ x ] .
Kommentiert
quelle
f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [0,2,2,0,2,2,0], [1,1,1,1,1,1,1] ])
endet0
undf([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [2,2,2,0,2,2,1], [1,1,1,1,1,1,1] ])
sollte wahr seinPython 2 ,
295285 BytesProbieren Sie es online!
-10 Danke an Jo King .
Die Eingabe ist eine Liste von Zeichenfolgen, die die Spalten darstellen. mit '1' für Rot und '0' für Gelb. Die Saiten sind nicht gepolstert. Also der (falsche) Fall:
wird eingegeben als:
Die Ausgabe ist eine Liste von Spaltenindizes, die 0-indiziert sind und das Board bilden können. oder
None
wenn es nicht gültig ist.Akzeptiert die leere Karte als gültig (gibt die leere Liste
[]
anstelle von zurück)None
).Dieser Ansatz ist vom letzten bis zum ersten Zug rekursiv: Basierend auf der Parität der Gesamtzahl der ausgeführten Züge entfernen wir entweder den letzten roten Zug oder den letzten gelben Zug (oder schlagen fehl, wenn dies nicht möglich ist). Überprüfen Sie das resultierende Brett, um festzustellen, ob der Gegner 4-in-a-row hat (in diesem Fall scheitern Sie, weil das Spiel bereits gestoppt sein sollte). ansonsten rekursiv, bis die Karte leer ist (was gültig ist).
Der 4-in-eine-Zeile-Code ist der aufgedunsenste Teil. Alle diagonalen Zeichenfolgen für die Matrix
b
werden generiert von:Hier werden zuerst die "abfallenden" Diagonalen und dann die "auffallenden" Diagonalen aufgelistet.
quelle