Соревнование
Напишите программу или функцию, которая принимает строку как параметр функции или из стандартного ввода и определяет, является ли она допустимой строкой 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 пустых квадратов.