Closed nekr0z closed 1 year ago
Мне кажется не нужно стремиться к абсолютной валидации позиции, главное просто проверить что нет очевидных ляпов (типа пешек на крайних рядах, кол-ва королей, шахов, позиции короля и ладьи и пешки при разрешенных рокировках и ен рассвет).
Ещё я не могу себе представить двойной шах двумя ладьями. По сути двойной шах может быть ферзь пешка (ферзь вертикаль или горизонталь); ферзь конь; ферзь слон (ферзь вертикаль или горизонталь); ладья пешка; ладья конь; ладья слон; ферзь ладья (только если ферзь по диагонали шахует)
В общем КМК основная цель проверки в том, что если сервис валидации хода получает доску он обратится к валидации доски и корректно выдаст статус и сообщение в логах о том что доска невалидна, вместо того чтобы пытаться валидировать ход и выдать ошибку ход невалиден когда на самом деле невалидна была доска (тот же пример про ладью которая ушла с позиции при доступной рокировке)
Ещё я не могу себе представить двойной шах двумя ладьями.
Ход белых. После fxg=R чёрный король под двойным шахом двумя ладьями.
Аа, ну да. С ферзем также получается.
Очень замороченно будет валидировать все случаи
Ещё я не могу себе представить двойной шах двумя ладьями. По сути двойной шах может быть ферзь пешка (ферзь вертикаль или горизонталь); ферзь конь; ферзь слон (ферзь вертикаль или горизонталь); ладья пешка; ладья конь; ладья слон; ферзь ладья (только если ферзь по диагонали шахует)
Ход белых. После Ne8 имеем двойной шах конь+слон.
есть ещё кейс задачи-шутки, там бывает и не такое. Ради интереса полез в редактор доски на lichess, там позиция ошибочна только при нескольких королях на доске, ходе стороны, которая даёт шах, и пешках на 1/8 горизонталях. Sapienti satis?)
Ради интереса полез в редактор доски на lichess [...]
Lichess в явном виде поддерживает 960 и Bughouse, поэтому у них так: в их редакторе пользователь, сколько мне помнится, нигде в явном виде не выбирает, для какого варианта он редактирует доску, поэтому отсекаются только такие, которые заведомо невозможны ни в каком варианте.
Нет, какие-то варианты правил там есть. но поскольку это всё от лукавого, даже не разбирался, что это за правила такие
Я думаю, что заморачиватся с валидностью расстановок на доске - идея не очень. Если какая-то комбинация возможна (хоть только в теории), то рано или поздно такая партия будет. Поэтому поддерживаю идею, что проверять нужно только очевидные ошибки на доске
Ещё я не могу себе представить двойной шах двумя ладьями. По сути двойной шах может быть ферзь пешка (ферзь вертикаль или горизонталь); ферзь конь; ферзь слон (ферзь вертикаль или горизонталь); ладья пешка; ладья конь; ладья слон; ферзь ладья (только если ферзь по диагонали шахует)
Ход белых. После Ne8 имеем двойной шах конь+слон.
Да, соглашаюсь, что две ладьи и слон плюс конь возможны для двойного шаха. Может для простоты просто проверять что шах не тройной ? .. А то много нюансов получается для каждого варианта двойного шаха КМК
Может для простоты просто проверять что шах не тройной ? ..
Ну, есть явно нелегальные двойные шахи — например, шах двумя пешками невозможен точно :) Но это посмотрим по ходу дела.
Написано. Для добавления проверок открыл новый тикет #41
В теме проверки легальности позиции (даже если мы не берём 960) оказалось на удивление много вкусного; некоторые даже считают, что задача эта алгоритмически невыполнима.
Из курьёзов: автор этой диаграммы считает, что позиция на доске (ход белых, пешка c5 может быть взята на проходе, у чёрных доступна рокировка) не может быть достигнута легально… Он, конечно, неправ — позиция абсолютно легальная и достижимая. Другой вопрос, что такая позиция, конечно, не могла бы быть достигнута в реальной игре (т.е. в такой, где хотя бы один из игроков не стремился бы именно этой позиции достичь :)
Вот это последнее соображение приводит меня к мысли, что целиться в абсолютную валидацию, может быть, и незачем; достаточно валидировать основные моменты:
Есть и другие очевидно нелегальные позиции, но я не очень представляю себе, как их проверять алгоритмически. Например, вот это: делает невозможной рокировку, а, например, вот это: невозможно вообще никак, но и в том, и в другом случае я не понимаю, как это проверять, не погружаясь в проверку возможности предыдущего хода, и ситуации на доске перед ним, и так далее вплоть до начальной расстановки — что выглядит совсем уж чрезмерным…
Что думаете?