Создать детерминированную программу для воспроизведения п d крестиков-ноликов с другими соперниками.
Ваша программа должна работать, когда n
(ширина) и d
(номер измерения) находятся в следующих диапазонах:
n∈[3,∞)∩ℕ ie a natural number greater than 2
d∈[2,∞)∩ℕ ie a natural number greater than 1
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):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
И так далее.
Входные данные:
Вход будет в STDIN. Первая строка ввода будет двумя числами n
и d
в форме n,d
.
После этого будет строка, состоящая из координат, определяющих ходы, которые были сделаны. Координаты будут перечислены в следующем виде: 1,1;2,2;3,3
. Верхний левый угол - это начало координат (0,0 для 2D). В общем случае этот список будет аналогичен тому, 1,2,...,1,4;4,0,...,6,0;...
где первое число представляет левый-правый, второй-вверх-вниз, с третьего по третье измерение и т. Д. Обратите внимание, что первая координата - это X
первый поворот, второй Это O
первый поворот, ....
Если это будет первым ходом, вводом будет число, за которым следует 1 пустая строка.
Для согласованности ввод всегда заканчивается новой строкой. Пример ввода (\ n - новая строка):
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
Для первого хода:
10,10\n\n
где \n
символ новой строки.
Выход:
Выведите ход, который вы хотите сделать, в том же формате, что и ввод (список через запятую). Неверный ход (т. Е. Тот, который уже был сделан) приведет к проигрышу в игре.
Примечание: Вы можете использовать генератор случайных чисел, если вы заполняете его значением, таким образом, чтобы каждый прогон был идентичен при одинаковых условиях. Другими словами, программа должна быть детерминированной.
Примечание: разрешены только действительные ходы.
Игры-победители (если вы играли в достаточно многогранные крестики-нолики, это то же самое.)
Чтобы победа была, у одного игрока должны быть все смежные квадраты вдоль линии. То есть этот игрок должен иметь 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>
Условия симуляции и выигрыша:
Укажите в своем ответе, готов ли он к оценке. То есть четко укажите, выполнен ли ваш ответ.
Если ваш ответ помечен как выполненный, он не будет оценен, по крайней мере, через 24 часа после последнего редактирования кода.
Программы должны работать в автономном режиме. Если программа обнаруживает мошенничество, она автоматически получит оценку
-1
и больше не будет оцениваться. (Как бы кто-нибудь в конечном итоге обманул их программы?)Если ваша программа выдает неверный вывод, она сразу же считается проигрышем для игры
Если ваша программа не выдает результат через 1 минуту, это сразу же считается проигрышем для игры. При необходимости оптимизируйте скорость. Я не хочу ждать час, чтобы протестировать программу другого.
Каждая программа будет запущена против других программ дважды для каждой
n
в диапазоне[3,6]
и каждойd
в диапазоне[2,5]
, один раз какX
и один раз какO
. Это один раунд.За каждую игру, которую выигрывает программа, она получает
+3
свой счет. Если программа связана (1 победа и 1 поражение в одном раунде или ничья в обеих играх), то она получает+1
. Если программа потеряна, то она получает+0
(т.е. без изменений).Программа с наибольшим количеством очков выигрывает. Если будет ничья, то выигрывает программа с наименьшим количеством проигранных игр (из числа соперников).
Примечание. В зависимости от количества ответов мне может понадобиться помощь в проведении тестов.
Удачи! И пусть симуляторы всегда идут вам на пользу!