C'è molto lavoro svolto nel mondo degli scacchi. Ad esempio, esiste un formato file standardizzato .pgn
che descrive una partita a scacchi, incluso l'elenco delle mosse. Inoltre, esiste un altro formato di file .fen
che descrive una posizione della scheda. La sfida oggi è convertire un elenco di mosse di scacchi ( in notazione algebrica ) in una posizione sulla scacchiera.
definizioni
- Posizione
[a-h][1-8]
: data dall'aggiunta della riga (file) e della colonna (classifica). Definisce una delle 64 posizioni possibili sul tabellone. - Piece
[KQRBNP]?
: Rappresenta il K voce, Q ueen, R ook, B IShop, K N estra, P AWN. Nella notazione algebrica,P
non viene utilizzato. Se utilizzate su una lavagna, le lettere sono maiuscole se sono bianche, altrimenti minuscole. - Sposta
[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O)
: un pezzo seguito dalla posizione in cui si sta spostando.- Se il pezzo è ambiguo, vengono dati la riga, la colonna o entrambi.
- Se il pezzo sta catturando un pezzo,
x
viene posizionato tra il pezzo e la posizione. - Se la mossa è un castling, allora
O-O
viene data per il lato re, altrimentiO-O-O
. - Se viene promossa una pedina, la mossa viene aggiunta
=
seguita dal pezzo a cui viene promossa. - Se una mossa mette sotto controllo il re, viene aggiunto con a
+
. - Se una mossa mette il re in scacco matto, viene aggiunto
#
. - Il colore del pezzo è determinato dal numero di giri (giri alternati bianchi e neri, iniziando dal nero).
- Tavola
(([1-8]|[KQRBNPkqrbnp])*\/){8}
: le righe sono indicate elencando i pezzi in ordine di fila. Se ci sono quadrati vuoti, ogni serie di quadrati vuoti viene data usando la lunghezza della serie. Le righe vengono separate utilizzando/
La posizione iniziale di una tavola è rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, che rappresenta:
rnbqkbnr
pppppppp
PPPPPPPP
RNBQKBNR
Devi prendere un elenco di mosse e restituire una tavola. Puoi presumere che il tuo input sia valido.
Esempi
-> 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
Questo è un codice-golf , quindi rendi le tue risposte il più brevi possibile!
e.p.
.