Hintergrund
Springe zu "Aufgabe", wenn du mit Tic-Tac-Toe vertraut bist (ich denke, die meisten sind es!)
Tic-Tac-Toe ist ein berühmtes Spiel für zwei Spieler. Es besteht aus einem 3x3- Brett, das nach und nach von zwei Spielern besetzt wird (Erläuterungen unten). Der erste Spieler benutzt den Charakter X
und der andere den O
. Der Gewinner ist der erste, der 3 aufeinanderfolgende und identische Zeichen ( X
oder O
) erhält , entweder horizontal, vertikal oder diagonal. Wenn das Spielfeld voll ist und keiner der Spieler drei aufeinanderfolgende Charaktere hat, wie oben beschrieben, endet das Spiel unentschieden. Beachten Sie, dass am Ende des Spiels möglicherweise leere Stellen vorhanden sind, falls einer der Spieler in weniger als 9 Zügen insgesamt gewinnt (dies ist bei einem Unentschieden nicht möglich).
Aufgabe
Mit einem Tic-Tac-Toe-Brett am Ende eines Spiels (in Form einer Zeichenfolge, einer Matrix, einer flachen Liste mit 9 geordneten Werten, einem beliebigen anderen anständigen Format) bestimmen Sie, wer das Spiel gewinnt.
Die Eingabe besteht aus unterschiedlichen und konsistenten Werten, einem für
X
, einem fürO
und einem anderen, die eine leere Stelle darstellen.Ihr Programm sollte in der Lage sein, 3 verschiedene, konsistente und nicht leere Werte auszugeben: einen für den Fall eines
X
Sieges, einen für den Fall einesO
Sieges oder einen anderen, wenn die Spieler unentschieden sind.Bitte geben Sie diese Werte in Ihrer Antwort an. Sie können davon ausgehen, dass der Eingang eine gültige Tic-Tac-Toe-Karte ist.
Testfälle
X
, O
, _
Sind die Eingangswerte hier; X wins
, O wins
Und Tie
sind für die Ausgabe.
X O X
O X _
O _ X
Ausgang: X wins
.
X _ O
X O _
X O X
Ausgang: X wins
.
X O X
_ O X
_ O _
Ausgang: O wins
.
X O X
O O X
X X O
Ausgang: Tie
.
Es gelten wie immer alle unsere Standardregeln. Das ist Code-Golf , der kürzeste Code in Bytes in jeder Sprache gewinnt!
quelle
Antworten:
Jelly ,
16 1514 BytesEin monadischer Link, der eine Liste von Listen (die Zeilen - oder Spalten) mit den folgenden Werten akzeptiert:
Rückgabe der Ergebnisse:
Hinweis: Ein Wert von Null für die Verwendung
_
, und gleiche aber entgegengesetzte WerteX
undO
dieser Wert (hier0.155
) kann in dem Bereich sein(1/6, 1/7)
(an beiden Enden exklusiv) - I nur einen Wert in diesem Bereich gewählt, der eine präzise darstellbare Gleitkomma - Ergebnis ergab für die Win Cases.Probieren Sie es online!
Wie?
quelle
Javascript (ES6),
10387 BytesEingang
1
2
0
Ausgabe
"111"
"000"
"T"
Erläuterung
Testfälle
quelle
Jelly , 18 Bytes
Probieren Sie es online!
X
=1
,O
=-1
,_
=0
X gewinnt =
[1, 1, 1]
, O gewinnt =[-1, -1, -1]
, Unentschieden =0
Eingabe als Liste von 3 Listen mit jeweils 3 Elementen
(1, -1, 0)
.quelle
X
=1
,O
=2
,_
=3
, gibt zurück1
(X gewinnt),2
(O gewinnt) oder3
(Unentschieden) zurück.Python 3 , 73 Bytes
Probieren Sie es online!
Python 2 ,
1009592878277 BytesProbieren Sie es online!
Übernimmt die Eingabe als durch Zeilenumbrüche getrennte Zeichenfolge von
XO_
Ausgänge:
{'XXX'}
fürX
,{'OOO'}
zumO
{}
für ein UnentschiedenZerschneidet die Zeichenfolge in Zeilen, Spalten und Diagonalen:
dann
'XXX'
und'OOO'
werden gegen die Scheiben geprüft.Übernimmt die Eingabe als durch Zeilenumbrüche getrennte Zeichenfolge von
XO_
Ausgänge:
{'XXX'}
zumX
,{'OOO'}
zumO
{}
für ein UnentschiedenZerschneidet die Zeichenfolge in Zeilen, Spalten und Diagonalen:
dann
'XXX'
und'OOO'
werden gegen die Scheiben geprüft.quelle
[2::2]
Scheiben3579
, während[2:8:2]
gibt357
R,
118116115 BytesVielen Dank an @ user2390246 für zwei zusätzliche Bytes.
Leicht ungolfed:
Gibt zurück,
X
wenn X gewinnt,O
wenn O gewinnt undT
im Falle eines Gleichstands.Probieren Sie es online!
quelle
M[c(3,5,7)]
ist kürzer für die gegenüberliegende DiagonalePerl 5 , 58 Bytes
56-Byte-Code + 2 fpr
-p0
.Probieren Sie es online!
Ausgänge
X
undO
für Siege oderT
für ein Unentschieden. Beinhaltet eine Reihe von Kopf- / Fußzeilen-Code zum gleichzeitigen Testen.Alternativ 58 Byte
Probieren Sie es online!
quelle
Python 2 ,
124118117115 Bytes[j*3:j*3+3]
zu[j*3:][:3]
.Probieren Sie es online!
Eingabe- / Ausgabewerte
X
wird dargestellt als1
O
wird dargestellt als2
_
wird dargestellt alsNone
quelle
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]
->map(int,'8036147258048246')
map(ord,"...")
, obwohl einnul
Byte in der Mitte einer Zeichenfolge nicht funktioniert hat ...[j*3:j*3+3]
ist[j*3:][:3]
. Als Randnotizj*3+3
ist dasselbe wie-~j*3
, aber das sind auch 118 Bytes.01234567
...Python 3 , 173 Bytes
Probieren Sie es online!
Eingabe als Matrix von
1 == X, 0 == O, -1 == _
Ausgabe als Einzelwert:
2 == X, 1 == O, 0 == TIE
-8 Bytes dank Erik dem Outgolfer
quelle
lambda x:h(x,1)*2or+h(x,0)
durch -8 Bytes und0 == TIE
(was imo schöner ist) ersetzen .PHP, 70 Bytes
Annahmen
-n
( Standardeinstellungen des Interpreters). Benötigt zusätzlich-R
(execute<code>
für jede Eingabezeile ), als eins gezählt.Die Eingabe erfolgt in einer einzelnen Zeile (genau wie in der Problembeschreibung, außer dass alle Leerzeichen entfernt wurden).
Die Ausgabe ist wie folgt:
1
→ X Siege,-1
→ O Siege,0
→ Gleichstand.Probieren Sie es online!
quelle
'X Wins'
kann geändert werden in'X'
(oder sogar eine ganze Zahl sagen1
). Gleiches gilt für'O wins'
undTie
. Davon abgesehen 109 Bytes .Retina , 49 Bytes
Probieren Sie es online! Nimmt die Eingabe als 11-stellige Zeichenfolge von 9
X
s,O
s oder-
s in drei durch;
s getrennten Dreiergruppen vor , obwohl der Link einen Header enthält, der die angegebenen Testfälle in dieses Format übersetzt. Entspricht einer Gewinnlinie direkt mithilfe einer Bilanzgruppe, um sicherzustellen, dass die drei übereinstimmenden Zeichen gleich weit voneinander entfernt sind. (Geeignete Abstände sind 0 (horizontale Linie), 4 (umgekehrte Diagonale), 5 (vertikale Linie) oder 6 (diagonale); andere Abstände würden eine;
Saite treffen oder sich außerhalb der Saite erstrecken.)quelle
Java 8,
1121081061049010293 Bytes+12 Bytes (90 → 102) durch Fehlerbehebung, indem nur eine Diagonale anstelle von beiden überprüft wurde.
-9 Bytes (102 → 93) durch Verwendung von
replaceAll
anstelle vonmatches
.Eingabe im Format
XOX OX_ O_X
, AusgabeX
,O
oderT
.Erläuterung:
Probieren Sie es hier aus.
Erklärung Regex:
quelle
Retina , 127 Bytes
Probieren Sie es online!
... Ich denke, Sie könnten diese brutale Kraft nennen ... Dachte, es könnte etwas Verdienst sein ...
quelle
Netzhaut , 51 Bytes
Port meiner Java 8 Antwort . Eingang in dem Format
XOX OX_ O_X
, AusgabeX
,O
oderT
.Erläuterung:
Probieren Sie es hier aus.
quelle
J, 34 Bytes
Ungolfed:
Erläuterung
Codierung:
Unsere übergeordnete Strategie besteht zunächst darin, eine Matrix zu erstellen, bei der jede Zeile ein möglicher Gewinn ist. Zeile eins ist diagonal /, Zeile 2 ist diagonal \, die nächsten drei Zeilen sind die Zeilen und die letzten drei Zeilen sind die Spalten. Dieser Teil wird durch den Satz (mit Item Amend
}
) erreicht:Schließlich nehmen wir die GCD jeder Reihe:
Dank unserer Kodierung hat jede Zeile mit einem Leerzeichen eine GCD von 1, ebenso wie jede Zeile, die eine Mischung aus Xs und Os enthält, da 2 und 3 Coprime sind. Als nächstes müssen wir nur das maximale Element finden:
>./
Wenn das Spiel unentschieden ist, ist es 1. Wenn ein Spieler gewinnt, ist es die Nummer dieses Spielers.
Probieren Sie es online!
quelle
JavaScript, 66 Bytes
Halte es einfach.
0
die einem Leerzeichen,1
einem X und2
einem O entsprechen.0
für ein Unentschieden,1
für X Sieg,2
für O Sieg.Erweitert, leicht kommentiert:
quelle