Erstellen Sie das kürzeste Programm, um zu überprüfen, wer in einem n d tic tac toe-Spiel gewonnen hat.
Ihr Programm sollte funktionieren, wenn n
(width) und d
(dimension number) in diesen Bereichen liegen:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2, dh 3 mal 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 dh 3 mal 3 mal 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2, dh 6 mal 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
Und so weiter.
Gewinnen (Wenn Sie genug mehrdimensionales Tic Tac Toe gespielt haben, ist dies dasselbe.)
Um zu gewinnen, muss ein Spieler alle angrenzenden Felder entlang einer Linie haben. Das heißt, dieser Spieler muss n
Züge auf einer Linie haben, um ein Gewinner zu sein.
Benachbart:
- jedes Plättchen ist ein Punkt; Zum Beispiel (0,0,0,0,0) ist ein Punkt in
d=5
- Benachbarte Kacheln sind solche Kacheln, die beide Punkte auf derselben Einheit d-Würfel sind. Mit anderen Worten beträgt der Chebyshev-Abstand zwischen den Kacheln 1.
- Mit anderen Worten, wenn ein Punkt
p
an einen Punkt angrenztq
, unterscheidet sich jede Koordinate in derp
entsprechenden Koordinateq
darin nicht mehr als um eins. Außerdem unterscheidet sich mindestens ein Koordinatenpaar um genau eins.
Linien:
- Linien werden durch Vektoren und eine Kachel definiert. Eine Linie ist jedes Plättchen, das von der folgenden Gleichung getroffen wird:
p0 + t
<
some vector with the same number of coordinates as p0>
Eingabe :
Die Eingabe erfolgt in STDIN. Die erste Zeile der Eingabe wird zwei Zahlen, sein n
und d
in der Form n,d
.
Danach wird eine Linie aus Koordinaten erstellt, die die durchgeführten Bewegungen angeben. Die Koordinaten werden in Form aufgeführt werden: 1,1;2,2;3,3
. Die obere linke Ecke ist der Ursprung (0,0 für 2D). Im allgemeinen Fall entspricht diese Liste der Stelle, 1,2,...,1,4;4,0,...,6,0;...
an der die erste Zahl die Links-Rechts-Position, die zweite Auf-Ab-Position, die dritte bis dritte Dimension usw. darstellt. Beachten Sie, dass die erste Koordinate die X
erste und die zweite Kurve ist ist O
s erste Runde, ....
Der Eingabe folgt eine neue Zeile.
Ausgabe :
Die Ausgabe erfolgt nach STDOUT. Geben Sie einfach an, wer gewonnen hat, wenn jemand gewonnen hat oder ob es ein Unentschieden ist. Wenn es weder ein Unentschieden noch ein Sieg ist, gib nichts aus.
Geben Sie außerdem an, ob es einen Zugkonflikt gibt, dh, ob sich mindestens zwei Züge an derselben Position befinden.
Wenn vor dem Ende der Eingabe ein Gewinn / Unentschieden stattgefunden hat, kann Ihr Programm tun, was es will.
Testfälle (will jemand noch mehr vorschlagen?):
Eingang:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
Beispielausgabe:
X wins
Eine andere mögliche Ausgabe (Erklärung erforderlich):
1
n
Züge auf einer Linie erforderlich sind, um ein Gewinner zu sein. (Es tut mir leid, dass ich diese Bemerkungen nicht in der Sandbox gepostet habe, aber ich hatte nicht einmal Zeit, sie dort zu sehen, weil sie so bald nach dem Sandboxen gepostet wurden.)