Le défi
Écrivez un programme ou une fonction qui prend une entrée de chaîne en tant que paramètre de fonction ou de stdin et détermine s'il s'agit d'une chaîne FEN valide .
Contribution
Vous pouvez supposer que l'entrée ne comprendra que les caractères suivants (sensible à la casse)
pkqrbnPKQRBN12345678/
La longueur de l'entrée sera toujours au minimum 1 caractère et au maximum 100 caractères
Production
La sortie doit être une valeur true / falsey. Il peut s'agir de toutes les valeurs souhaitées tant qu'elles sont cohérentes (tous les résultats véridiques ont la même sortie, tous les résultats falsey ont la même sortie). Vous devriez avoir exactement deux sorties distinctes possibles.
Ce qui compte comme valide
Les lettres minuscules représentent les pièces noires, les lettres majuscules représentent les pièces blanches.
Vous devez vous assurer qu'il est possible dans un jeu d'échecs que les pièces dans la position actuelle existent.
Chaque joueur aura toujours exactement 1 roi (k / K)
Chaque joueur ne peut pas avoir plus de 8 pions (p / P)
Chaque joueur n'aura généralement pas plus de 1 * reine (q / Q)
Chaque joueur n'en aura généralement pas plus de 2 * tours (r / R)
Chaque joueur n'aura généralement pas plus de 2 * chevaliers (n / N)
Chaque joueur n'aura généralement pas plus de 2 * évêques (b / B)
* Il est légal pour un joueur de ' promouvoir un pion à l'une de ces quatre pièces.
Le total des pions, reines, tours, chevaliers et évêques pour chaque joueur ne dépassera jamais 15
Le nombre total de pièces plus les cases vides (désignées par des nombres) doit toujours totaliser exactement 8 pour chaque rang. Et il devrait toujours y avoir exactement 8 rangs, séparés par une barre oblique.
Choses que vous pouvez ignorer
Vous n'avez pas à vous soucier de savoir s'il est possible ou non de jouer dans la position indiquée, ou si la position est légale, seulement que les pièces peuvent exister dans les quantités données.
Vous pouvez ignorer d'autres complexités des chaînes FEN telles que le tour du joueur, les droits de roque et en passant.
C'est le golf de code. Le programme le plus court en octets gagne. Les failles et les règles habituelles s'appliquent.
Cas de test
Entrée rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Sortie True
Entrée 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Sortie True
Entrée r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Sortie Faux
(le noir a 7 pions et 4 tours - impossible)
Entrée 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Sortie Faux (seulement 7 rangs)
Entrée 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Sortie Faux (9 rangées)
Entrée 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Sortie Faux (le 2e rang a 9 carrés / pièces)
Entrée rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Sortie True
Merci à Feersum et Arnauld pour avoir clarifié ce cas (3 + 5 = 8)
Qu'est-ce que le FEN?
FEN est une notation standard pour enregistrer la position des pièces sur un échiquier.
Crédit d'image http://www.chessgames.com
* It is legal for a player to 'promote' a pawn to any of these four pieces.
Le joueur peut avoir jusqu'à 9 reines tant que le nombre de pions est réduit pour compenser. Vous n'avez pas à vous soucier que la position des pièces soit légale ou illégale, seulement le nombre de pièces.
35
est juste une façon inhabituelle de décrire 8 cases vides.