El reto
Escriba un programa o función que tome una entrada de cadena como parámetro de función o desde stdin y determine si es una cadena FEN válida .
Entrada
Puede suponer que la entrada solo incluirá los siguientes caracteres (mayúsculas y minúsculas)
pkqrbnPKQRBN12345678/
La longitud de la entrada siempre será un mínimo de 1 carácter y un máximo de 100 caracteres.
Salida
La salida debe ser un valor verdadero / falso. Estos pueden ser los valores que desee siempre que sean consistentes (todos los resultados verdaderos tienen la misma salida, todos los resultados falsey tienen la misma salida). Debe tener exactamente dos salidas posibles distintas.
Lo que cuenta como válido
Las letras minúsculas representan piezas negras, las letras mayúsculas representan piezas blancas.
Debes asegurarte de que es posible en un juego de ajedrez que existan las piezas en la posición actual.
Cada jugador siempre tendrá exactamente 1 rey (k / K)
Cada jugador puede tener no más de 8 peones (p / P)
Cada jugador generalmente no tendrá más de 1 * reina (q / Q)
Cada jugador generalmente no tendrá más de 2 * torres (r / R)
Cada jugador generalmente no tendrá más de 2 * caballeros (n / N)
Cada jugador generalmente no tendrá más de 2 * obispos (b / B)
* Es legal que un jugador ' promueve 'un peón a cualquiera de estas cuatro piezas.
El total de peones, reinas, torres, caballeros y obispos para cada jugador nunca será más de 15
El número total de piezas más los cuadrados vacíos (indicados por números) siempre debe sumar exactamente 8 para cada rango. Y siempre debe haber exactamente 8 rangos, separados por una barra diagonal.
Cosas que puedes ignorar
No necesita preocuparse por si es posible o no jugar en la posición indicada, o si la posición es legal, solo si las piezas pueden existir en las cantidades indicadas.
Puede ignorar otras complejidades de las cadenas FEN, como el turno de jugador, los derechos de enroque y al pasar.
Este es el código de golf. El programa más corto en bytes gana. Se aplican las lagunas y reglas habituales.
Casos de prueba
Entrada rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Salida Verdadero
Entrada 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Salida Verdadero
Entrada r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Salida False
(el negro tiene 7 peones y 4 torres - imposible)
Entrada 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Salida False (solo 7 rangos)
Entrada 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Salida False (9 rangos)
Entrada 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Salida False (2do rango tiene 9 cuadrados / piezas)
Entrada rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Salida Verdadero
Gracias a Feersum y Arnauld por aclarar este caso (3 + 5 = 8)
¿Qué es el FEN?
FEN es una notación estándar para registrar la posición de las piezas en un tablero de ajedrez.
Crédito de imagen http://www.chessgames.com
* It is legal for a player to 'promote' a pawn to any of these four pieces.El jugador puede tener hasta 9 reinas siempre que se reduzca el número de peones para compensar. No necesita preocuparse de que la posición de las piezas sea legal o ilegal, solo la cantidad de piezas.
35es solo una forma inusual de describir 8 cuadrados vacíos.