Lass uns Code-Golf spielen!
Die Herausforderung besteht darin, den Gewinner einer Partie Tic-Tac-Toe zu finden.
Dies wurde oft getan, indem ein Board mit einem eindeutigen Gewinner angegeben wurde. Hier ist jedoch die Wendung:
Die Zellen sind folgendermaßen nummeriert:
1|2|3
-+-+-
4|5|6
-+-+-
7|8|9
Sie erhalten eine Reihe von genau 9 Zügen wie folgt:
{3, 5, 6, 7, 9, 8, 1, 2, 3}
Dies wird wie folgt analysiert:
- Spieler 1 markiert Zelle 3
- Spieler 2 markiert Zelle 5
- Spieler 1 markiert Zelle 6
- Spieler 2 markiert Zelle 7
- Spieler 1 markiert Zelle 9
- Spieler 1 hat gewonnen
Hinweis: Das Spiel wird nicht unterbrochen, nachdem ein Spieler gewonnen hat. Es kann vorkommen, dass der unterlegene Spieler drei Mal hintereinander nach dem gewinnenden Spieler gewinnt, aber nur der erste Gewinn zählt.
Ihre Aufgabe ist es nun, 9 Zahlen als Eingabe und Ausgabe des Gewinners und der Runde, in der der Gewinn stattgefunden hat, zu erhalten. Wenn niemand gewinnt, geben Sie eine Konstante Ihrer Wahl aus. Sie können Eingaben empfangen und Ausgaben über jedes Standardmittel / -format bereitstellen.
Habe Spaß!
Einige weitere Beispiele auf Anfrage:
{2,3,4,5,6,7,1,8,9} => Player 2 wins in round 6
{1,2,4,5,6,7,3,8,9} => Player 2 wins in round 8
{1,2,3,5,4,7,6,8,9} => Player 2 wins in round 8
quelle
[X, Y]
? Können wir im Falle eines Gleichstands stattdessen einen anderen konsistenten Wert ausgeben? Ich empfehle dies, da das Drucken dieser exakten Zeichenfolgen nicht unbedingt zum Golfen gehört. Für zukünftige Herausforderungen empfehle ich die Verwendung der Sandbox . :-){3, 5, 6, 7, 9, 8, 1, 2, 3}
" - sollte3
wirklich zweimal erscheinen?Antworten:
Netzhaut , 114 Bytes
Probieren Sie es online! Basierend auf meiner Antwort auf Tic-Tac-Toe - X oder O? .
X<N>
Wird ausgegeben, wenn der erste Spieler nach dem Zug gewinntN
,O<N>
wenn der zweite Spieler gewinnt,T
wenn keiner gewinnt. Erläuterung:Erstellt eine interne Tafel und markiert jeden Zug mit dem Spieler, dessen Zug es ist.
Wendet einen Zug an.
Sucht nach einem Gewinn. Wenn einer gefunden wird, wird das Spielbrett durch den Gewinner und die Anzahl der verbleibenden Züge ersetzt.
Wenn die Züge erschöpft sind und niemand gewonnen hat, ist das Spiel ein Unentschieden.
Berechnen Sie die Anzahl der Runden aus der Anzahl der verbleibenden Züge.
quelle
MATL , 39 Bytes
Ausgabe ist
1
undR
in getrennten Zeilen, wenn Benutzer 1 in Runde R gewinnt ;0
undR
in getrennten Zeilen, wenn Benutzer 2 in Runde R gewinnt ;Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Javascript (ES6), 130 Byte
Erläuterung
quelle
Java (OpenJDK 8) , 445 Byte
Probieren Sie es online!
Rückgabewert {1,8} bedeutet, dass Spieler 1 in Runde 8 gewonnen hat. Rückgabewert {0,0} bedeutet Unentschieden.
quelle
false
kann durch ersetzt werden1<0
und das Leerzeichen nach dem ersten]
kann entfernt werden.//Code that was submitted
und//End of code
.Kotlin , 236 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle
Python 2 , 170 Bytes
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
Jelly , 38 Bytes
Probieren Sie es online!
Spieler 1 gewinnt:
[round, 1]
Spieler 2 gewinnt: Unentschieden
[round, 2]
:
[0, 0]
quelle
Python 3.6+, 137 Bytes
Ausgabeformat ist
winner number:round
oder-1
für ein Unentschieden. Spieler 2 ist0
Spieler 1 ist1
. Eingabe in Form einer nicht getrennten Zeichenfolge von 1-indizierten quadratischen Zahlen.quelle
Gelee , 35 Bytes
Ein monadischer Link, der eine Liste der Züge aufnimmt und eine Liste zurückgibt,
[move, player]
in der die Spieler als1
(Erstes Handeln) und0
(Zweites Handeln) identifiziert werden .Probieren Sie es online!
Wie?
quelle
Python 2, 168 Bytes
Ausgänge (Spieler, Runde) oder 0 für ein Unentschieden.
Ordnet das Spiel einem magischen 3-mal-3-Quadrat zu und sucht nach Sätzen mit 3 Os oder X, die zusammen 15 ergeben.
quelle
Sauber ,
244... 220 BytesProbieren Sie es online!
Die Zeichenfolge, in die iteriert wird,
h
enthält nicht druckbare Elemente und ist äquivalent zu"\003\001\000\000"
.quelle
Python 2 ,
140136134 BytesProbieren Sie es online!
EDIT: 4 Bytes + 2 Bytes danke an Eric den Outgolfer.
Gibt ein Tupel (playerNumber, roundNumber) oder False aus, wenn es keinen Gewinner gibt.
quelle