Einführung
Connect Four ist ein Spiel, in dem Sie versuchen, vier in einer Reihe zu erhalten: horizontal, vertikal oder diagonal. In diesem Codegolf versuchen wir herauszufinden, wer mit einem Spielbrett gewonnen hat. Es wird immer einen Gewinner geben und nur einen.
Aufgabe
Finden Sie mit einem Connect Four-Board heraus, wer der Gewinner ist: X
oder Y
. Es wird immer einen Gewinner geben und nur einen. Die Brettgröße wird immer 6 mal 7 sein, so wie das Spielbrett im Bild ist.
Bei einem Brett ist das folgende Brett in diesem Fall X
rot und Y
blau:
Ihre Eingabe wäre:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY
Sie können die Spielreihen nach Zeilenvorschubzeichen (wie oben) und ohne Trennzeichen trennen, die Reihen in ein Array oder eine Liste unterteilen oder eine Zeichenmatrix eingeben.
Richtige Ausgabe für dieses Beispiel:
Y
Y hat vier in einer Reihe; Y ist also der Gewinner. Also geben wir Y aus.
Testfälle
Eingang:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO
Ausgabe:
X
Eingang:
OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX
Ausgabe:
X
Eingang:
YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO
Ausgabe:
Y
Eingang:
OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO
Ausgabe:
Y
Eingang:
OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX
Ausgabe:
X
Wertung
Wenigste Anzahl von Bytes gewinnt!
Antworten:
Jelly , 19 Bytes
Probieren Sie es online!
Der Kern dieser Antwort ist von meiner Antwort auf diese sehr ähnliche Frage kopiert .
Erläuterung
Ziemlich einfach: Wir nehmen alle Zeilen, Spalten, Diagonalen und Antidiagonalen (wie im n-queens-Validator), nehmen dann alle Teilzeichenfolgen der Länge 4 und sortieren sie so, dass die Gewinnlinie von 4 nach sortiert wird das Ende. (Wir brauchen den Tiebreak für den Fall, dass es
OOOO
zusätzlich zumXXXX
oder ein gibtYYYY
.) Nehmen Sie das letzte Element des letzten Elements, und das wirdX
oderY
wie erforderlich sein.quelle
Netzhaut,
5148 BytesVielen Dank an Martin Ender für das Speichern von 3 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als durch Kommas getrennte Liste von Zeilen
quelle
(.{7}X){3}|XXX
auf(.{7}X|X)\4\4
: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/...\4
- Sie möchten den Effekt der.{7}
Zeichenfolge wiederholen , nicht des übereinstimmenden. (Und Bilanzkreise wären wahrscheinlich viel zu lang.)Javascript (ES6), 54
55Edit 1 Byte gespeichert dank @Arnauld
Ich überprüfe nur, ob X der Gewinner ist, da es immer einen Gewinner und nur einen Gewinner geben wird
Die Eingabe ist eine Zeichenfolge mit einem beliebigen Trennzeichen, wie in der Antwort von @ Arnauld
quelle
Jelly ,
2522 BytesNimmt eine Liste von Zeichenfolgen (oder eine Liste von Zeichen) auf
X
,Y
undO
(würde auch mit Ersetzungen funktionieren, bei denen das Leerzeichen eine niedrigere Ordnungszahl hat als beide Zähler).Probieren Sie es online! oder führen Sie eine erweiterte Version aus , die eine mehrzeilige Zeichenfolge akzeptiert.
Wie?
quelle
JavaScript (ES6),
777669 Bytes7 Bytes gespart dank Neil
Nimmt Eingaben als eine etwas getrennte Zeichenfolge, wobei etwas im Grunde genommen ein beliebiges Zeichen ist.
Testfälle
Code-Snippet anzeigen
quelle
b.match()
? Sollte beimRegExp
Anruf sparen .match()
eine implizite Konvertierung nachRegExp
. Vielen Dank!Python 2 , 143 Bytes
Nimmt eine Liste von Zeichenfolgen oder eine Liste von Zeichen. Hardcodiert für 6 Zeilen mal 7 Spalten, wie die Spezifikation garantiert.
Probieren Sie es online!
quelle
PHP, 71 Bytes
Online Version
quelle
Python 2 ,
201143129128107 BytesIch habe mich entschieden, horizontal, vertikal und diagonal zu einer Liste zusammenzufügen und dann Inkremente hinzuzufügen und dann nach X zu suchen, um die Zeiten darin zu bestimmen. Und da es immer einen Gewinner geben wird, kann ich davon ausgehen, dass Y gewonnen hat, wenn X dies nicht tut. Dieser Code nimmt eine Matrix aller verschiedenen Teile und leeren Stellen auf.
Probieren Sie es online!
Credits
quelle
i:] for
,i, r
,r] for
und1 for
.*(len(m)-1)
auch sein*~-len(m)
. Wie es funktioniert.] for
und1 for
sind immer noch da.K (NGN / k) ,
5855 BytesProbieren Sie es online!
{
}
Funktion mit Argumentx
+!6 7
alle möglichen Paare von 0..5 und 0..6{
}'
für jeden von ihnen4#1-+!3 3
sind 4 der 8 ortho-diagonalen Richtungen:(1 1;1 0;1 -1;0 1)
3+[
]\&4
Beginnen Sie mit einer Liste von vier Nullen (&4
) und führen Sie drei Schritte in jede der Richtungen ausx+/:/:
Beginnen Sie an jeder möglichen Position und führen Sie die Schritte in jede mögliche Richtung aus,/
verketten. An dieser Stelle haben wir eine Matrix mit 4 Listen von Koordinatenpaaren, von denen einige über die Tafel hinausreichenx ./:/:
suchen Sie die entsprechenden Zellen ausx
88<
welche von ihnen sind"Y"
-s? (88 ist der ASCII-Code von"X"
)&/'
Welche 4-Listen bestehen nur aus"Y"
-s? (und-reduzieren-jeden)|/
Gibt es mindestens eine solche? (oder-reduzieren)"XY"@
wenn falsch zurück"X"
, wenn wahr zurück"Y"
quelle
Zsh ,
207 ...159 BytesVersionsgeschichte: 4 Iterationen für ~ 25 Bytes in der ersten Woche; dann 3 weitere Iterationen für ~ 25 Bytes 6 Monate später.
( erster ) ( zweiter ) ( dritter ) ( vierter ) ( fünfter ) ( sechster )Probieren Sie es online!In der Fußzeile drucke ich sowohl die Eingabekarte als auch das Array, das wir daraus erstellen, nach stderr. Scrollen Sie zum Debuggen nach unten, um sie anzuzeigen. Das Array, das wir bauen, ist jetzt viel länger, da
t
es bei jedem Aufruf ein kartesisches Produkt mit Eingangskarte gibt . (Hey, es hat den Code um ein paar Bytes verkürzt.)Es gibt hier eine Menge zu besprechen , deshalb habe ich die (sechste Ausgabe) Kommentare zu einer kommentierten Zusammenfassung verschoben .
(tl; dr: Transpositionen des ursprünglichen Arrays verketten, aber getrennt aufbewahren)
quelle