In der Schachwelt wurde eine Menge Arbeit geleistet. Zum Beispiel gibt es ein standardisiertes Dateiformat .pgn
, das ein Schachspiel einschließlich der Zugliste beschreibt. Zusätzlich gibt es ein anderes Dateiformat .fen
, das eine Boardposition beschreibt. Die Herausforderung besteht heute darin, eine Liste von Schachzügen ( in algebraischer Notation ) in eine Brettposition umzuwandeln .
Definitionen
- Position
[a-h][1-8]
: Wird durch Anhängen der Zeile (Datei) und der Spalte (Rang) angegeben. Definiert eine der 64 möglichen Positionen auf dem Board. - Stück
[KQRBNP]?
: steht für die K ing, Q ueen, R ook, B ishop, K N ight, P awn. In der algebraischen NotationP
wird nicht verwendet. Bei der Verwendung auf einer Tafel werden Buchstaben in Großbuchstaben geschrieben, wenn sie weiß sind, andernfalls in Kleinbuchstaben. - Bewegen
[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O)
: Ein Teil, gefolgt von der Position, in die es sich bewegt.- Wenn das Stück mehrdeutig ist, werden die Zeile oder die Spalte oder beide angegeben.
- Wenn das Stück ein Stück erfasst,
x
wird es zwischen dem Stück und der Position platziert. - Wenn es sich um eine Rochade handelt,
O-O
gilt dies ansonsten für die KönigsklasseO-O-O
. - Wenn ein Bauer befördert wird, wird der Zug
=
gefolgt von der Figur , zu der befördert wird, angehängt . - Wenn ein Zug den König in Schach setzt, wird ein angefügt
+
. - Wenn ein Zug den König in Schachmatt setzt, wird er mit angehängt
#
. - Die Farbe der Figur wird durch die Zugnummer bestimmt (abwechselnd weiße und schwarze Züge, beginnend mit schwarz).
- Tafel
(([1-8]|[KQRBNPkqrbnp])*\/){8}
: Die Reihen ergeben sich aus der Auflistung der Teile in der Reihenfolge der Reihen. Wenn es leere Quadrate gibt, wird jeder Lauf eines leeren Quadrats anhand der Länge des Laufs angegeben. Zeilen werden mit getrennt/
Die Ausgangsposition eines Boards ist rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
:
rnbqkbnr
pppppppp
PPPPPPPP
RNBQKBNR
Sie müssen eine Moves-Liste erstellen und ein Board zurückgeben. Sie können davon ausgehen, dass Ihre Eingabe gültig ist.
Beispiele
-> rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
e4 -> rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
e4,c5 -> rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5 -> rnbqkbnr/ppp2ppp/8/3Pp3/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6 -> rnbqkbnr/ppp2ppp/4P3/8/8/8/PPPP1PPP/RNBQKBNR
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4 -> r1bqk2r/ppp2pp1/4Pn2/2P4p/6nP/8/PPP2PPN/RNBQKB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4 -> r1bqk2r/ppp2pp1/4P3/2P4p/3Q2nP/6P1/PPP2n1N/RNB1KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O -> r1bq1rk1/ppp2pp1/4P3/2P4p/3Q1BnP/6P1/PPP2n1N/RN2KB1R
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+ -> r1b2rk1/ppp2Pp1/8/2P3qp/3Q1BnP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q -> r1br1Q2/ppp3pk/8/2P3Bp/3Q2nP/N5P1/PPP4N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6 -> r4Q2/p5pk/bppQ1Q2/6Bp/7P/N5P1/PPP2n1N/2KR1B1n
e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O,Na3,Nxh1,O-O-O,Qg5,exf7+,Kh7,Bxg5,Rd8,f8=Q,Ngf2,c6,Rd7,cxd7,b6,d8=Q,c6,Q4d6,Ba6,Qd8f6,Rb8,Qdd8,b5,Qc5,b4,Qxb8,bxa3,Rd3,Nxd3+,Kd1,axb2,Bh3,b1=Q+,Kd2,Qxa2,Qh6+,gxh6,Qcd6,Qa1,Qbc7+,Kh8,Qdd8# -> 3Q3k/p1Q5/b1p4p/6Bp/7P/3n2PB/2PK3N/q6n
Dies ist ein Code-Golf , also machen Sie Ihre Antworten so kurz wie möglich!
e.p.
.