Совершенно удивлен, что это еще не было опубликовано, учитывая большое количество шахматных головоломок на сайте. Пока я сам об этом думал, благодарю Ануш за то, что она отправила его в песочницу в марте . Но я подумал, что прошло достаточно времени, чтобы я мог сделать это сам.
Мат в шахматах является положение , в котором король атакован и нет никаких шагов , которые могут защитить его. Если вы не знакомы с тем, как движутся шахматные фигуры, вы можете ознакомиться в Википедии .
Соревнование
Для этой задачи ваш вклад будет позицией шахматной доски в любой записи. Чтобы уточнить, ваш вклад опишет фигуры на шахматной доске, их цвета и позиции, а также возможный квадрат пассивного захвата, если таковой имеется. (Способность к замку не имеет значения, так как вы не можете замкнуться из-под контроля.) Вы можете найти нотацию FEN полезной , но подойдет любой удобный формат. Для простоты можно предположить, что в игру играют черные - это значит, что черные всегда будут игроком с матом. Позиция, в которой белые находятся в шахе, мате или пате, будет считаться недействительной для этого испытания.
Вы должны вывести истинное значение, если позиция является матом, и ложное значение, если это не так. Обратите внимание, что пат не является матом - король должен быть атакован!
Правдивые тесты
1k5R / 6R1 / 8/8/8/8/8 / 6K1 b - -
rn2r1k1 / pp1p1pQp / 3p4 / 1b1n4 / 1P2P3 / 2B5 / P5PP / R3K2R b - -
kr5R / rB6 / 8/8/8 / 5Q2 / 6K1 / R7 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / R3r2k b - - 0 1
Тесты Falsey
rnbqkbnr / pppppppp / 8/8 / 4P3 / 8 / PPPP1PPP / RNBQKBNR b KQkq -
8/8/8/8/8 / 1KQ5 / 4N3 / 1k6 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / 4r2k b - -
8/8 / 2Q5 / 3k4 / 3Q5 / 8/8 / 7K b - -
8 / 4Q1R1 / R7 / 5k2 / 3pP3 / 5K2 / 8/8 b - e3 ( следите за этим!)
Код гольфа - выигрывает самый короткий код в байтах. Удачи!
источник
Ответы:
JavaScript (Node.js) ,
499 ... 374370 байт(b)(X)
Ниже приведены ожидаемые значения для каждого квадрата:
Попробуйте онлайн!
Как?
Правление представительства
Мы используем классическое представление доски 0x88 , чтобы можно было легко обнаруживать за пределами целевых квадратов.
Переместить кодировку
Каждый набор ходов кодируется с 5 параметрами:
Все эти параметры упакованы в одну строку. Например, ходы рыцаря кодируются следующим образом:
который дает:
Все наборы ходов суммированы в следующей таблице, за исключением захватов по отдельности, которые обрабатываются отдельно.
комментарии
источник
8/1ppp4/1pkp4/8/2Q5/8/8/7K b - -
Haskell ,
116510651053 байтаБайты сохранены благодаря Лео Тененбауму
Попробуйте онлайн!
На данный момент это не совсем хорошо, но это только начало.С некоторой помощью по пути я теперь довольно агрессивно отыграл это (и исправил ошибку по пути).Это, пожалуй, сомнительная вещь, это то, что она предполагает, что, кроме короля или пешки, вы никогда не сможете выйти из-под контроля, захватив одну из своих фигур. В шахматах вам не разрешено делать этот ход, но моя программа считает, что эти ходы сохраняют байты, при условии, что, если вы проверяете, это никогда не сможет вывести вас из этого.
Это предположение верно, потому что такие шаги
Невозможно поймать фигуру, которая атакует короля, так как фигура, которую они захватывают, черная.
Невозможно заблокировать путь фигуры, которая атакует короля, так как захваченная черная фигура уже сделала бы это.
Мы также добавляем дополнительное условие, что если у вас нет короля, вы находитесь под контролем.
Эта программа также предполагает, что если есть пешка, которая может быть захвачена пассивно, то пешка была последним ходом, и этот ход был законным ходом. Это связано с тем, что программа не проверяет, является ли квадрат, на который она перемещает черную пешку, пустым, поэтому, если там есть кусок, вещи могут немного запутаться. Однако это не может быть получено, если последний ход был законным ходом и, кроме того, не может быть представлен в FEN . Так что это предположение кажется довольно обоснованным.
Вот моя версия "ungolfed" для справки:
Попробуйте онлайн!
источник
guard x = [0|x]
и вы также можете использовать,x?y=Just(x,y)
чтобы сохранить еще несколько байтов: 1129 байтPython 3 (PyPy) , 729 байт
Попробуйте онлайн!
источник
8/2p5/Q7/Q2k4/Q7/8/8/7K b - -
(не мат).