Соревнование
Напишите программу или функцию, которая принимает строку как параметр функции или из стандартного ввода и определяет, является ли она допустимой строкой FEN .
вход
Можно предположить, что ввод будет включать только следующие символы (с учетом регистра)
pkqrbnPKQRBN12345678/
. Длина ввода всегда будет составлять не менее 1 символа и не более 100 символов.
Выход
Вывод должен быть истинным / ложным значением. Это могут быть любые значения, которые вы хотите, если они согласованы (все достоверные результаты имеют одинаковый вывод, все ложные результаты имеют одинаковый вывод). У вас должно быть ровно два разных возможных выхода.
Что считается действительным
Строчные буквы представляют черные фигуры, прописные буквы представляют белые фигуры.
Вы должны убедиться, что в игре в шахматы фигуры в текущей позиции могут существовать.
У каждого игрока всегда будет ровно 1 король (k / K).
У каждого игрока может быть не более 8 пешек (p / P).
У каждого игрока обычно не более 1 * королевы (q / Q).
У каждого игрока обычно не более чем 2 * грачей (г / R)
Каждый игрок обычно имеет не более 2 * рыцарей (N / N)
Каждый игрок обычно имеет не более 2 * епископов (B / B)
* это законно для игрока к ' продвиньте пешку к любому из этих четырех частей.
Общее количество пешек, ферзей, грачей, рыцарей и слонов для каждого игрока никогда не будет превышать 15
Общее количество фигур плюс пустые квадраты (обозначенные цифрами) всегда должно составлять ровно 8 для каждого ранга. И всегда должно быть ровно 8 рангов, разделенных косой чертой.
Вещи, которые вы можете игнорировать
Вам не нужно беспокоиться о том, возможно ли сыграть в обозначенной позиции или, если позиция законна, только то, что фигуры могут существовать в указанных количествах.
Вы можете игнорировать дальнейшие сложности строк FEN, такие как ход игрока, права рокировки и en passant.
Это код гольф. Самая короткая программа в байтах побеждает. Обычные лазейки и правила применяются.
Тестовые случаи
Входные данные rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Выходные данные True
Вход 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Выход True
Вход r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Выход False
(у черных 7 пешек и 4 ладьи - невозможно)
Вход 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Выход False (только 7 рангов)
Вход 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Выход False (9 рангов)
Вход 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Выход False (2-й ранг имеет 9 квадратов / штук)
Входные данные rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Выходные данные True
Спасибо Feersum и Arnauld за разъяснение этого случая (3 + 5 = 8)
Что такое FEN?
FEN - это стандартное обозначение для записи положения фигур на шахматной доске.
Изображение предоставлено http://www.chessgames.com
источник
* It is legal for a player to 'promote' a pawn to any of these four pieces.
У игрока может быть до 9 ферзей, если количество пешек уменьшено для компенсации. Вам не нужно беспокоиться о том, что фигуры являются легальными или нелегальными, только количество штук.35
это просто необычный способ описать 8 пустых квадратов.Ответы:
Сетчатка , 105 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Расширьте цифры до пустых квадратов, которые мы обозначим с помощью
1
s.Удалите ввод, если он не соответствует 8 наборам из 8 действительных квадратов, соединенных с
/
s. (Дополнительный/
префикс для упрощения проверки.)Удалите ввод, если у него нет белого или черного короля, или если у него есть два из них.
Удалите начальные части белых, если они все еще там.
Сноси оставшиеся белые фигуры в пешки.
Удалить действительные белые пешки.
Удалите ввод, если остались какие-либо белые пешки.
Проверьте снова, но с черными фигурами.
Выведите истинное значение, если строка не была удалена.
источник
JavaScript (ES6),
168174... 155Этот ответ был отредактирован смущающее количество раз. Надеемся, что текущая версия надежна и прилична для игры в гольф.
Возвращает логическое значение.
Отформатировано и прокомментировано
Контрольные примеры
Показать фрагмент кода
источник
Python 3,
284 259 236 225 247234 байтаПопробуйте онлайн!
Попробуйте онлайн со всеми тестами!
-11 байт благодаря мистеру Xcoder
-13 байтов благодаря Джонатану Аллену
+22 Я забыл, что короли существовали.
Полуголый с некоторым объяснением:
источник
,p,P=9,9
на;P=p=9
.for-loop
: /p>0<P
вместо того,p>0and P>0
чтобы сохранить 5 байт тоже. В качестве альтернативы, вы могли бы использоватьp and P
(для -3 байта), вам не нужно>0
, потому что ненулевые значения верны в Pythono=0
перед циклом и увеличивая сo+=o<2
в конце тела цикла.PHP , 269 байт
Попробуйте онлайн!
источник
JavaScript (ES6),
181172174 байтаUngolfed:
Показать фрагмент кода
источник
Python 3 , 263 байта
Попробуйте онлайн!
Не самое маленькое представление Python, но я думаю, что оно все еще имеет некоторое обещание.
источник