Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge als Funktionsparameter oder von stdin empfängt und feststellt, ob es sich um eine gültige FEN- Zeichenfolge handelt.
Eingang
Sie können davon ausgehen, dass die Eingabe immer nur die folgenden Zeichen enthält (Groß- und Kleinschreibung beachten).
pkqrbnPKQRBN12345678/
Die Länge der Eingabe beträgt immer mindestens 1 Zeichen und höchstens 100 Zeichen
Ausgabe
Die Ausgabe sollte ein wahrer / falscher Wert sein. Dies können beliebige Werte sein, solange sie konsistent sind (alle echten Ergebnisse haben die gleiche Ausgabe, alle falschen Ergebnisse haben die gleiche Ausgabe). Sie sollten genau zwei verschiedene mögliche Ausgaben haben.
Was als gültig gilt
Kleinbuchstaben stehen für schwarze Teile, Großbuchstaben für weiße Teile.
Sie sollten sicherstellen, dass in einem Schachspiel die Figuren in der aktuellen Position vorhanden sein können.
Jeder Spieler hat immer genau 1 König (k / K).
Jeder Spieler darf nicht mehr als 8 Bauern (p / P) haben.
Jeder Spieler hat normalerweise nicht mehr als 1 * Dame (q / Q).
Jeder Spieler hat normalerweise nicht mehr als 2 * rooks (r / R)
erhält jeder Spieler hat in der Regel nicht mehr als 2 * Ritter (n / N)
in der Regel Jeder Spieler nicht mehr als 2 * Bischof (B / B) hat
* Es ist für einen Spieler legal ist zu " Werben Sie für eines dieser vier Teile um einen Bauern.
Die Gesamtzahl der Bauern, Königinnen, Türme, Ritter und Bischöfe pro Spieler wird niemals mehr als 15 betragen
Die Gesamtzahl der Teile plus leere Felder (durch Zahlen gekennzeichnet) sollte für jeden Rang immer genau 8 ergeben. Und es sollte immer genau 8 Ränge geben, die durch einen Schrägstrich voneinander getrennt sind.
Dinge, die Sie ignorieren können
Sie müssen sich nicht darum kümmern, ob es möglich ist, in die angegebene Position zu spielen, oder ob die Position legal ist, nur dass die Stücke in den angegebenen Mengen existieren können.
Sie können weitere Komplexitäten von FEN-Saiten wie Spielzug, Rochade-Rechte und En-Passant ignorieren.
Das ist Code Golf. Kürzestes Programm in Bytes gewinnt. Es gelten die üblichen Regelungslücken.
Testfälle
Eingabe rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Ausgabe True
Eingang 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Ausgang Wahr
Eingang r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Ausgang Falsch
(Schwarz hat 7 Bauern und 4 Türme - unmöglich)
Input 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Output False (nur 7 Ränge)
Eingang 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Ausgang False (9 Ränge)
Input 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Output False (2. Rang hat 9 Felder / Stücke)
Eingabe rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Ausgabe True
Vielen Dank an Feersum und Arnauld für die Klärung dieses Falls (3 + 5 = 8)
Was ist FEN?
FEN ist eine Standardnotation zum Aufzeichnen der Position der Figuren auf einem Schachbrett.
Bildnachweis http://www.chessgames.com
quelle
* It is legal for a player to 'promote' a pawn to any of these four pieces.
Der Spieler darf bis zu 9 Damen haben, solange die Anzahl der Bauern zum Ausgleich verringert wird. Sie müssen sich keine Gedanken darüber machen, ob die Teile legal oder illegal sind, sondern nur über die Anzahl der Teile.35
ist nur eine ungewöhnliche Art, 8 leere Quadrate zu beschreiben.Antworten:
Netzhaut , 105 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Erweitern Sie die Ziffern zu leeren Quadraten, die wir mit
1
s bezeichnen.Löschen Sie die Eingabe, wenn sie nicht mit 8 Mengen von 8 gültigen Quadraten übereinstimmt, die mit
/
s verbunden sind. (Ein Extra/
wird vorangestellt, um die Prüfung zu vereinfachen.)Löschen Sie die Eingabe, wenn sie keinen weißen oder keinen schwarzen König hat oder wenn sie zwei von beiden hat.
Lösche die Startsteine von Weiß, wenn sie noch da sind.
Reduziere alle verbleibenden weißen Teile auf Bauern.
Löschen Sie die gültigen weißen Bauern.
Löschen Sie die Eingabe, wenn noch weiße Bauern übrig sind.
Überprüfen Sie noch einmal, aber mit den schwarzen Stücken.
Gibt einen Wahrheitswert aus, sofern die Zeile nicht gelöscht wurde.
quelle
JavaScript (ES6),
168174... 155Diese Antwort wurde bereits mehrmals peinlich bearbeitet. Hoffentlich ist die aktuelle Version sowohl zuverlässig als auch anständig golfen.
Gibt einen Booleschen Wert zurück.
Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
Python 3,
284 259 236 225 247234 BytesProbieren Sie es online!
Probieren Sie es online mit allen Testfällen!
-11 Bytes dank Mr. Xcoder
-13 Bytes dank Jonathan Allen
+22 Ich habe vergessen, dass Könige existieren.
Semi-ungolfed mit einer Erklärung:
quelle
,p,P=9,9
mit;P=p=9
.for-loop
: /p>0<P
anstelle von auchp>0and P>0
5 Bytes speichern. Alternativ hätten Siep and P
(für -3 Bytes) das brauchen Sie nicht>0
, denn in Python sind Werte ungleich Null wahro=0
vor der Schleife mit initialisieren undo+=o<2
am Ende des Schleifenkörpers mit inkrementieren .PHP , 269 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
181172174 ByteUngolfed:
Code-Snippet anzeigen
quelle
Python 3 , 263 Bytes
Probieren Sie es online!
Nicht die kleinste Python-Einreichung, aber ich denke, sie ist noch vielversprechend.
quelle