Il y a beaucoup de travail qui a été fait dans le monde des échecs. Par exemple, il existe un format de fichier normalisé,, .pgnqui décrit une partie d'échecs, y compris la liste des coups. De plus, il existe un autre format de fichier .fen, qui décrit la position d'une carte. Le défi aujourd'hui est de convertir une liste de mouvements d'échecs ( en notation algébrique ) en position de plateau.
Définitions
- Position
[a-h][1-8]: donnée en ajoutant la ligne (fichier) et la colonne (rang). Définit l'une des 64 positions possibles sur le tableau. - Pièce
[KQRBNP]?: Représente le K ing, Q ueen, R ook, B ishop, K N ight, P awn. En notation algébrique,Pn'est pas utilisé. Lorsqu'elles sont utilisées sur un tableau, les lettres sont en majuscules si elles sont blanches, sinon en minuscules. - Déplacer
[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O): un morceau suivi de la position vers laquelle il se déplace.- Si la pièce est ambiguë, la ligne, la colonne ou les deux sont données.
- Si la pièce capture une pièce, elle
xest alors placée entre la pièce et la position. - Si le coup est un roque, alors
O-Oest donné pour le côté roi, sinonO-O-O. - Si un pion est promu, le coup est ajouté avec
=suivi de la pièce vers laquelle il est promu. - Si un coup met le roi en échec, il est accompagné d'un
+. - Si un mouvement met le roi en échec et mat, il est ajouté
#. - La couleur de la pièce est déterminée par le numéro de tour (tours alternés blanc et noir, en commençant par le noir.)
- Tableau
(([1-8]|[KQRBNPkqrbnp])*\/){8}: Les lignes sont données en listant les pièces dans l'ordre des lignes. S'il y a des cases vides, chaque série de cases vides est donnée en utilisant la longueur de la série. Les lignes sont séparées en utilisant/
La position initiale d'un conseil est rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR, ce qui représente:
rnbqkbnr
pppppppp
PPPPPPPP
RNBQKBNR
Vous devez prendre une liste de mouvements et retourner un plateau. Vous pouvez supposer que votre entrée est valide.
Exemples
-> 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
Ceci est un code-golf , alors faites vos réponses aussi courtes que possible!
e.p..