Создать самую короткую программу , чтобы проверить , кто выиграл в п й Tic Tac Toe игры.
Ваша программа должна работать, когда n
(ширина) иd
(номер измерения) находятся в следующих диапазонах:
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 т.е. 3 на 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 т.е. 3 на 3 на 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 т.е. 6 на 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
И так далее.
выигрыш (если вы играли достаточно многомерных крестики-нолики, это то же самое.)
Чтобы победа была, у одного игрока должны быть все смежные квадраты вдоль линии. То есть этот игрок должен иметьn
ходы на линии, чтобы быть победителем.
Рядом:
- каждая плитка - это точка; например (0,0,0,0,0) является точкой в
d=5
- соседние плитки - это плитки, так что они обе являются точками на одном и том же d-кубе. Другими словами, расстояние Чебышева между плитками равно 1.
- другими словами, если точка
p
смежна с точкойq
, то каждая координата вp
s соответствующей координатеq
отличается от нее не более чем на единицу. Кроме того, хотя бы пара координат отличается ровно на одну.
линии:
- Линии определяются векторами и плиткой. Линия - это каждая ячейка, пораженная уравнением:
p0 + t
<
some vector with the same number of coordinates as p0>
вход :
Вход будет в STDIN. Первая строка ввода будет двумя числами, n
и d
в видеn,d
.
После этого будет строка, состоящая из координат, определяющих ходы, которые были сделаны. Координаты будут перечислены в следующем виде: 1,1;2,2;3,3
. Верхний левый угол - это начало координат (0,0 для 2D). В общем случае этот список будет аналогичен тому, 1,2,...,1,4;4,0,...,6,0;...
где первое число представляет левый-правый, второй-вверх-вниз, с третьего по третье измерение и т. Д. Обратите внимание, что первая координата - это X
первый поворот, второй Это O
первый поворот, ....
За вводом последует новая строка.
Выход :
Выход будет на STDOUT. Просто укажите, кто выиграл, если кто-то выиграл или это ничья. Если это не ничья и не победа, ничего не выводите.
Кроме того, укажите, есть ли столкновение ходов, то есть если в одном и том же месте есть как минимум два хода.
Если до завершения ввода была победа / ничья, ваша программа может делать все, что захочет.
Тестовые случаи (кто-нибудь хочет предложить больше?):
Входные данные:
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
Пример вывода:
X wins
Другой возможный вывод (требует объяснения):
1
n
чтобы стать победителем, нужны ходы на линии. (Извините, что не разместил эти замечания в песочнице, но у меня даже не было времени даже увидеть их там, потому что они были опубликованы так скоро после песочницы.)