O desafio
Escreva um programa ou função que utilize uma entrada de string como parâmetro de função ou de stdin e determine se é uma string FEN válida .
Entrada
Você pode assumir que a entrada incluirá apenas os seguintes caracteres (diferencia maiúsculas de minúsculas).
pkqrbnPKQRBN12345678/
O comprimento da entrada sempre será no mínimo 1 caractere e no máximo 100 caracteres
Resultado
A saída deve ser um valor de verdade / falsey. Podem ser quaisquer valores que você desejar, desde que sejam consistentes (todos os resultados verdadeiros têm a mesma saída, todos os resultados falsey têm a mesma saída). Você deve ter exatamente duas saídas possíveis distintas.
O que conta como válido
Letras minúsculas representam peças pretas, letras maiúsculas representam peças brancas.
Você deve garantir que, em um jogo de xadrez, é possível que as peças na posição atual existam.
Cada jogador sempre terá exatamente 1 rei (k / K).
Cada jogador pode ter no máximo 8 peões (p / P).
Cada jogador normalmente não terá mais que 1 * rainha (q / Q).
Cada jogador normalmente não terá mais de 2 * rooks (r / R)
Cada jogador normalmente não terá mais que 2 * cavaleiros (n / N)
Cada jogador normalmente não terá mais que 2 * bispos (b / B)
* É legal para um jogador ' promova 'um peão para qualquer uma dessas quatro peças.
O total de peões, rainhas, gralhas, cavaleiros e bispos para cada jogador nunca será superior a 15
O número total de peças mais quadrados vazios (indicados por números) sempre deve somar exatamente 8 para cada classificação. E sempre deve haver exatamente 8 fileiras, separadas por uma barra.
Coisas que você pode ignorar
Você não precisa se preocupar se é possível ou não participar da posição indicada ou se a posição é legal, apenas que as peças podem existir nas quantidades indicadas.
Você pode ignorar outras complexidades das seqüências de caracteres FEN, como turno do jogador, direitos de castling e passantes.
Isso é código de golfe. O programa mais curto em bytes vence. Aplicam-se brechas e regras usuais.
Casos de teste
Entrada rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Saída True
Entrada 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Saída True
Entrada r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Saída falsa
(o preto tem 7 peões e 4 torres - impossível)
Entrada 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Saída falsa (apenas 7 classificações)
Entrada 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Saída falsa (9 classificações)
Entrada 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Saída falsa (a segunda classificação tem 9 quadrados / peças)
Entrada rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Saída Verdadeiro
Agradecimentos a Feersum e Arnauld por esclarecer este caso (3 + 5 = 8)
O que é FEN?
FEN é uma notação padrão para registrar a posição das peças em um tabuleiro de xadrez.
Crédito de imagem http://www.chessgames.com
* It is legal for a player to 'promote' a pawn to any of these four pieces.
O jogador pode ter até 9 rainhas, desde que o número de peões seja reduzido para compensar. Você não precisa se preocupar com a posição das peças como legal ou ilegal, apenas com o número de peças.
35
é apenas uma maneira incomum de descrever 8 quadrados vazios.