Ada banyak pekerjaan yang telah dilakukan di dunia catur. Misalnya, ada format file standar .pgn
,, yang menjelaskan permainan catur, termasuk daftar gerakan. Selain itu, ada format file lain .fen
, yang menggambarkan posisi papan. Tantangannya hari ini adalah mengubah daftar gerakan catur ( dalam notasi aljabar ) ke posisi dewan.
Definisi
- Posisi
[a-h][1-8]
: Diberikan dengan menambahkan baris (file) dan kolom (peringkat). Tetapkan salah satu dari 64 posisi yang memungkinkan di papan tulis. - Sepotong
[KQRBNP]?
: Merupakan K ing, Q ueen, R ook, B Ishop, K N ight, P awn. Dalam notasi aljabar,P
tidak digunakan. Saat digunakan di papan tulis, huruf besar adalah huruf besar jika putih, atau huruf kecil. - Pindah
[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O)
: Sepotong diikuti oleh posisi bergerak.- Jika bagian tersebut ambigu, maka baris, atau kolom, atau keduanya diberikan.
- Jika potongan menangkap potongan, maka
x
ditempatkan di antara potongan dan posisi. - Jika langkah itu adalah sebuah castling, maka
O-O
diberikan untuk sisi raja, jika tidakO-O-O
. - Jika pion dipromosikan, gerakan ini ditambahkan dengan
=
diikuti oleh pion yang dipromosikan. - Jika suatu langkah menempatkan raja di cek, itu ditambahkan dengan
+
. - Jika suatu langkah menempatkan raja dalam skakmat, itu ditambahkan dengan
#
. - Warna potongan ditentukan oleh nomor belokan (Belokan bergantian putih dan hitam, dimulai dengan hitam.)
- Papan
(([1-8]|[KQRBNPkqrbnp])*\/){8}
: Baris diberikan dengan mendaftarkan potongan dalam urutan baris. Jika ada kotak kosong, setiap run dari kotak kosong diberikan menggunakan panjang run. Baris dipisahkan menggunakan/
Posisi awal dewan adalah rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, yang mewakili:
rnbqkbnr
pppppppp
PPPPPPPP
RNBQKBNR
Anda perlu mengambil daftar Gerakan dan mengembalikan Papan. Anda dapat berasumsi bahwa input Anda valid.
Contohnya
-> 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
Ini adalah kode-golf , jadi buat jawaban Anda sesingkat mungkin!
e.p.
.Jawaban:
Javascript (ES6),
1024995 byteIni adalah upaya awal dan masih besar. Saya baru saja berhenti mengoptimalkannya ketika batas 1K tercapai.
Itu mungkin tidak tahan peluru dan hanya mempertimbangkan promosi untuk seorang Ratu. Tapi itu lulus ujian.
Sunting: 995 byte - beberapa optimasi yang jelas
Sumber
Cuplikan yang dapat dieksekusi penuh
sumber