Tworzenie deterministycznego program do odegrania n d Kółko i krzyżyk z pozostałych zawodników.
Twój program powinien działać, gdy n
(szerokość) id
(numer wymiaru) znajdują się w następujących zakresach:
n∈[3,∞)∩ℕ ie a natural number greater than 2
d∈[2,∞)∩ℕ ie a natural number greater than 1
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.
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 formien,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, ....
Jeśli będzie to pierwszy ruch, na wejściu pojawi się liczba, po której nastąpi 1 pusty wiersz.
Aby zachować spójność, dane wejściowe zawsze kończą się nową linią. Przykładowe dane wejściowe (\ n to nowa linia):
10,10\n0,0,0,0,0,0,0,0,0,0;0,2,3,4,5,6,7,8,9,0;0,1,2,3,4,5,6,7,8,9\n
Do pierwszego ruchu:
10,10\n\n
gdzie \n
jest znak nowej linii.
Wynik:
Wyjdź ruch, który chcesz wykonać, w tym samym formacie, co dane wejściowe (lista oddzielona przecinkami). Nieprawidłowy ruch (tj. Taki, który został już wykonany) spowoduje przegraną w grze.
Uwaga: Możesz użyć generatora liczb losowych, o ile wysyłasz go taką wartością, aby każdy przebieg był identyczny w tych samych warunkach. Innymi słowy, program musi być deterministyczny.
Uwaga: dozwolone są tylko prawidłowe ruchy.
Zwycięskie gry (jeśli grałeś wystarczająco dużo wielowymiarowych kółko 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>
Symulacja i warunki wygranej:
Podaj w swojej odpowiedzi, czy jest gotowy do oceny. Oznacza to, że wyraźnie wskaż, czy twoja odpowiedź została wykonana.
Jeśli twoja odpowiedź jest oznaczona jako zrobiona, nie będzie oceniana aż do co najmniej 24 godzin po ostatniej edycji kodu.
Programy muszą działać w trybie offline. Jeśli okaże się, że program oszukuje, automatycznie otrzyma wynik
-1
i nie będzie dalej oceniany. (Jak ktokolwiek skończyłby z oszustwem w swoich programach?)Jeśli twój program generuje nieprawidłowe dane wyjściowe, jest to od razu liczone jako strata dla gry
Jeśli program nie generuje wyników po 1 minucie, jest to od razu liczone jako strata dla gry. W razie potrzeby zoptymalizuj szybkość. Nie chcę czekać godzinę, aby przetestować inny program.
Każdy program będzie uruchamiany z innymi programami dwa razy dla każdego
n
z zakresu[3,6]
i każdegod
z zakresu[2,5]
, razX
i raz jakoO
. To jest jedna runda.Dla każdej gry, którą wygrywa program, osiąga
+3
swój wynik. Jeśli program remisuje (1 wygrana i 1 przegrana w jednej rundzie lub remisy w obu grach), to dostaje+1
. Jeśli program się zgubił, to dostaje+0
(tj. Bez zmian).Program z najwyższym wynikiem wygrywa. W przypadku remisu wygrywa program z najmniejszą liczbą przegranych gier (spośród remisujących zawodników).
Uwaga: W zależności od liczby odpowiedzi może być potrzebna pomoc w przeprowadzeniu testów.
Powodzenia! I niech symulacje przebiegną zawsze na twoją korzyść!