Tworzenie najkrótszy program, aby sprawdzić, kto wygrał w n d Tic Tac Toe gry.
Twój program powinien działać, gdy n
(szerokość) i d
(numer wymiaru) znajdują się w następujących zakresach:
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 tj. 3 na 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 tj. 3 na 3 na 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 tj. 6 na 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
I tak dalej.
Zwycięstwo (jeśli grałeś wystarczająco dużo wielowymiarowych kółek i krzyżyk, to tak samo.)
Aby wygrać, jeden gracz musi mieć wszystkie sąsiadujące pola wzdłuż linii. Oznacza to, że gracz musi mieć n
ruchy na linii, aby zostać zwycięzcą.
Sąsiadujący:
- każda płytka jest punktem; na przykład (0,0,0,0,0) to punkt w
d=5
- sąsiadujące płytki są płytkami, więc oba są punktami na tej samej jednostce d-cube. Innymi słowy, odległość Czebyszewa między płytkami wynosi 1.
- innymi słowy, jeśli punkt
p
przylega do punktuq
, wówczas każda współrzędna wp
odpowiedniej współrzędnej inq
różni się od niej nie więcej niż o jeden. Dodatkowo przynajmniej para współrzędnych różni się dokładnie o jeden.
Linie:
- Linie są definiowane przez wektory i kafelki. Linia to każda płytka dotknięta równaniem:
p0 + t
<
some vector with the same number of coordinates as p0>
Wejście :
Dane wejściowe będą na STDIN. Pierwszy wiersz danych wejściowych będzie składał się z dwóch liczb n
oraz d
w formie n,d
.
Następnie pojawi się linia składająca się ze współrzędnych określających wykonane ruchy. Współrzędne są wymienione w następującej postaci: 1,1;2,2;3,3
. Lewy górny róg jest punktem początkowym (0,0 dla 2D). W ogólnym przypadku ta lista będzie wyglądać tak, jakby 1,2,...,1,4;4,0,...,6,0;...
pierwsza liczba reprezentowała lewą prawą stronę, drugą górę-dół-ność, trzecią do trzeciego wymiaru itp. Zauważ, że pierwsza współrzędna to X
pierwsza kolej, druga jest O
pierwsza kolej, ....
Po wprowadzeniu pojawi się nowy wiersz.
Wyjście :
Wyjście będzie do STDOUT. Wystarczy wskazać, kto wygrał, jeśli ktoś wygrał, lub jeśli jest to remis. Jeśli nie jest to remis ani wygrana, nie wypisuj niczego.
Dodatkowo wskaż, czy doszło do zderzenia ruchu, to znaczy, czy w tym samym miejscu występują co najmniej dwa ruchy.
Jeśli przed zakończeniem wejścia było zwycięstwo / losowanie, Twój program może zrobić, co chce.
Przypadki testowe (ktoś chce coś jeszcze zasugerować?):
Wejście:
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
Przykładowe dane wyjściowe:
X wins
Kolejny możliwy wynik (wymaga wyjaśnienia):
1
n
aby wygrać, trzeba wykonać ruchy na linii. (Przepraszam, że nie opublikowałem tych uwag w piaskownicy, ale nawet nie miałem czasu, aby je tam zobaczyć, ponieważ zostały opublikowane tak szybko po piaskownicy.)