Проблема:
В шахматах есть довольно известное правило о ничьей повторением. Если одна и та же позиция повторяется 3 раза (или более), то игрок, намеревающийся сделать ход, который вызовет это повторение, может претендовать на ничью.
Иногда это легко определить для арбитра, если последние несколько ходов - это просто игроки, двигающиеся вперед и назад. Иногда это менее тривиально, когда фигуры значительно переместились между повторными позициями.
Проблема в этой задаче состоит в том, чтобы вывести истинное значение, если заявленная позиция нарисована повторением (было просмотрено 3 или более раз), и значение Falsey, если заявленная позиция не нарисована повторением, учитывая список ходов в координатной записи как описано ниже, или любое обозначение по вашему выбору (но вам придется преобразовать контрольные примеры).
Какая позиция?
В сценарии реального мира на положение будут влиять такие вещи, как то, может ли игрок сделать замок или возможен ли en-passant; Вы не должны учитывать это в своем решении проблемы. В этой задаче положение определяется просто конфигурацией фигур на доске. Таким образом, для целей этой проблемы две позиции считаются одинаковыми, если каждый квадрат на обеих досках занят одним и тем же типом фигуры одного цвета. Это не обязательно должна быть точная фигура, например, белые кони могут поменять квадраты, и если все остальные фигуры будут соответствовать критериям, это все равно будет та же самая позиция.
Как выглядит действительная запись?
Хотя я и продолжу объяснять обозначения координат, вы можете свободно принимать ввод с помощью выбранной вами системы обозначений. При условии, что:
- Каждый элемент в обозначениях описывает любую или все: часть / части, вовлеченные; поставлен ли чек, мат, двойная проверка, мат или пат; если произошел случайный захват; начальная позиция; окончательная позиция.
- Вы не можете иметь информацию о повторении в вашей записи.
Поэтому, пока эти критерии соблюдены, я с радостью приму, если вы укажете в своем ответе, свою систему обозначений. Это может быть, например, 0 проиндексированных строк, кортежей столбцов или что-либо еще, что имеет смысл для вашей программы.
Обозначение координат
Обозначение координат - это обозначение, которое описывает чисто движения как систему координат.
Перемещение описывается как сначала начальная координата из набора, {A1-H8}
а затем снова координата назначения из того же набора. Таким образом , гамбит короля будет выглядеть (как набор строк)
{"E2-E4","E7-E5","F2-F4"}
Я считаю, что это лучшее обозначение для этой проблемы, потому что оно не усеяно посторонней информацией, такой как проверка или тип перемещения детали. Как упоминалось ранее, нотация может быть на ваш выбор, поэтому вы можете использовать другую нотацию, например, алгебраическую нотацию, или вы можете адаптировать эту нотацию (например, удалить тире или взять в качестве списка кортежей)
Правила:
- Вы не должны думать, является ли позиция или ход действительным, только если это вызывает повторение
- Вы можете предположить, что расклинание и продвижение пешек не произойдет.
- Вы должны взять список строк в качестве входных данных и вывести истинное или ложное значение, соответствующее тому, произошло ли третье (или более) повторение на последнем шаге
- Игра всегда начинается со стандартной стартовой позиции для шахмат. Начальная позиция может рассчитывать на повторение.
- Ничья путем повторения не произошла, если позиция не повторяется последним ходом
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи
Вы должны вернуть правдивые значения для:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
И фальси значения для:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
начальная позиция произошла трижды.