Тут валидация состояния доски, т.е. проверка, что позиция на доске могла возникнуть в ходе партии, состоящей из легальных ходов.
На всякий случай добавлена http.HandlerFunc; не знаю, планируем ли мы делать отдельный микросервис для валидации доски, но такая возможность реализована, документацию тоже набросал.
В ходе обсуждения #34 решено не пытаться проверять случаи, а только отдельные из сокращённого списка (возможно, не весь список сто́ит воплощать):
[x] Существует один и только один король каждого цвета.
[x] Король цвета, у которого нет хода (в том смысле, что ход у другой стороны), не находится под шахом.
[x] Король цвета, имеющего ход, находится под шахом не больше, чем двойным;
[x] если шах двойной, то это не два слона, не два коня, не пешка+пешка, не пешка+конь, не пешка+слон.
[x] На доске не больше 8 пешек каждого цвета.
[x] На горизонталях 1 и 8 пешек нет.
[x] В случае, если открыто взятие на проходе, перед «проходным» полем находится пешка нужного цвета, проходное поле и поле за ним пусты.
[x] Количество фигур соответствует количеству недостающих пешек: два ферзя и три ладьи одного цвета требуют не более шести пешек этого цвета на доске, и т. д. Учесть, что из двух однопольных одноцветных слонов один — проведённый.
[ ] Конфигурация пешек должна хотя бы примерно соответствовать количеству фигур на доске; так, 6 белых пешек на вертикали h возможны только в том случае, если у чёрных на доске не осталось ничего, кроме короля (и вряд ли такая позиция возникла в реальной игре).
[ ] Белые пешки на h2 и h3 означают, что белой пешки на g2 быть не может, и т.д.
[x] Король не на месте не сочетается с возможностью рокировки, аналогично для ладьи.
[ ] Белый слон может быть заперт на 1-й горизонтали пешками только на своей стартовой позиции (т.е. невозможна позиция с белым слоном на e1 и белыми пешками на d2 и f2, например). При наличии белых пешек на d2 и f2 чёрный слон может оказаться на e1 только в результате проведения туда пешки; если белая пешка есть и на e2, чёрного слона на e1 быть не может вообще. Аналогично для 8-й горизонтали.
Тут валидация состояния доски, т.е. проверка, что позиция на доске могла возникнуть в ходе партии, состоящей из легальных ходов.
На всякий случай добавлена
http.HandlerFunc
; не знаю, планируем ли мы делать отдельный микросервис для валидации доски, но такая возможность реализована, документацию тоже набросал.В ходе обсуждения #34 решено не пытаться проверять случаи, а только отдельные из сокращённого списка (возможно, не весь список сто́ит воплощать):