Mr Short suka bermain catur. Tuan Short juga orang yang sangat tradisional. Oleh karena itu, Mr Short terganggu oleh tren baru-baru ini menggunakan notasi aljabar dalam catur modern, dan ia lebih suka menggunakan notasi deskriptif , seperti ayahnya dan ayah ayahnya sebelum dia.
Catatan
Untuk menyederhanakan tantangan ini, saya memilih untuk tidak berurusan dengan disambiguasi (seperti, ketika dua potong dapat pindah ke kotak yang sama, atau dapat menangkap potongan yang sama.) Juga tidak ada berurusan dengan en passant, promosi, atau Castling.
Notasi aljabar untuk yang belum tahu
- Kotak papan diberi nomor mulai
a1
dari kiri bawah hinggah8
kanan atas. Huruf mewakili file (kolom) sedangkan angka mewakili peringkat (baris). Raja putih ditempatkan di awal permainan di alun-alune1
. - Langkah terdiri dari bagian yang bergerak + kotak tujuan. Sebagai contoh, seorang raja pindah ke
e2
akanKe2
. - Jika potongan yang dipindahkan adalah Pion, huruf potong dihilangkan. Misalnya, langkah awal Gadai
e4
ditulis sebagaie4
. - Jika langkah tersebut merupakan tangkapan, maka
x
huruf dimasukkan di antara bagian dan kotak tujuan. Sebagai contoh, seorang Ratu yang menangkap dif7
diberi penjelasan sebagaiQxf7
. - Jika bagian yang menangkap adalah Gadai, karena ia bergerak secara diagonal, notasi mencatat file asal Gadai tersebut. Misalnya, ketika Pion di
c4
menangkap bagian did5
, langkah tersebut dijelaskan sebagaicxd5
. - Simbol bagian
K
untuk Raja,Q
untuk Ratu,B
untuk Uskup,N
untuk Ksatria, danR
untuk Benteng. Pion tidak memiliki simbol. - Anotasi lain termasuk
+
untuk cek, dan#
untuk skakmat. Gadai pindah ke f7 dan memberi cekf7+
. Perhatikan kekurangan ruang.
Notasi deskriptif untuk yang belum tahu
- File-file tersebut dijelaskan oleh bagian yang dimulai di atasnya. Misalnya, apa yang akan menjadi
e
file dalam Aljabar, menjadi file King, atau, singkatnyaK
,. File-file lain ditandai di sisi mereka, lalu bagian itu. Jadi fileh
adalah file King's Rook, atauKR
. - Barisan diberi nomor dari sudut pandang pemain yang bergerak. Apa yang akan menjadi peringkat keempat dalam Aljabar, adalah peringkat keempat untuk kulit putih, tetapi peringkat kelima untuk kulit hitam.
- Oleh karena itu alun-alun
e4
adalahK4
untuk pemain putih danK5
untuk pemain hitam. Kotakf7
adalahKB7
untuk pemain putih danKB2
untuk pemain hitam. - Sebuah gerakan dijelaskan oleh bagian yang bergerak, kemudian tanda hubung, lalu target persegi. Jadi pion pindah
K4
adalahP-K4
. Seorang Ratu pindah keKR5
adalahQ-KR5
. - Suatu tangkapan dianotasi oleh bagian yang menangkap, kemudian
x
, bagian yang ditangkap. Karena itu seorang Uskup yang menangkap seorang Pion adalahBxP
. Biasanya Anda perlu menandai Pion mana yang sedang ditangkap, tetapi abaikan saja ini demi kesederhanaan. - Simbol bagian
K
untuk Raja,Q
untuk Ratu,B
untuk Uskup,Kt
untuk Ksatria (perhatikan simbol yang berbeda),R
untuk Benteng, danP
untuk Pion. - Anotasi lain termasuk
ch
untuk cek danmate
untuk skakmat. Gadai pindah keKB7
dan memberi cekP-KB7 ch
. Perhatikan ruangnya.
Memasukkan
Sederetan notasi aljabar bergerak, digambarkan oleh spasi. Tidak ada nomor bergerak. Misalnya, pasangan Bodoh seperti ini:
f3 e5 g4 Qh4#
Atau game Teed vs Delmar, dari halaman Wikipedia yang sama:
d4 f5 Bg5 h6 Bf4 g5 Bg3 f4 e3 h5 Bd3 Rh6 Qxh5+ Rxh5 Bg6#
The Immortal permainan .
e4 e5 f4 exf4 Bc4 Qh4+ Kf1 b5 Bxb5 Nf6 Nf3 Qh6 d3 Nh5 Nh4 Qg5 Nf5 c6 g4 Nf6 Rg1 cxb5 h4 Qg6 h5 Qg5 Qf3 Ng8 Bxf4 Qf6 Nc3 Bc5 Nd5 Qxb2 Bd6 Bxg1 e5 Qxa1+ Ke2 Na6 Nxg7+ Kd8 Qf6+ Nxf6 Be7#
Anda dapat berasumsi bahwa input selalu merupakan game yang valid. Semua gerakan berada dalam urutan yang benar, dan tidak ada data asing yang hadir. Tidak ada gerakan yang akan mencakup disambiguasi .
Sebagai contoh, permainan The Evergreen meskipun, jelas, permainan yang valid, tidak akan menjadi masukan karena langkah ke - 19 Rad1
,.
Anda juga dapat mengasumsikan bahwa semua daftar langkah input mulai dari posisi awal.
Keluaran
Daftar pemindahan, dengan format yang serupa, dalam notasi deskriptif.
Misalnya, pasangan Bodoh:
P-KB3 P-K4 P-KKt4 Q-KR5 mate
Teed vs Delmar:
P-Q4 P-KB4 B-KKt5 P-KR3 B-KB4 P-KKt4 B-KKt3 P-KB5 P-K3 P-KR4 B-Q3 R-KR3 QxP ch RxQ B-KKt6 mate
The Immortal Game:
P-K4 P-K4 P-KB4 PxP B-QB4 Q-KR5 ch K-KB1 P-QKt4 BxP Kt-KB3 Kt-KB3 Q-KR3 P-Q3 Kt-KR4 Kt-KR4 Q-KKt4 Kt-KB5 P-QB3 P-KKt4 Kt-KB4 R-KKt1 PxB P-KR4 Q-KKt3 P-KR5 Q-KKt4 Q-KB3 Kt-KKt1 BxP Q-KB3 Kt-QB3 B-QB4 Kt-Q5 QxP B-Q6 BxR P-K5 QxR ch K-K2 Kt-QR3 KtxP ch K-Q1 Q-KB6 ch KtxQ B-K7 mate
Ini bukan notasi Deskriptif yang paling sederhana yang mungkin, karena kadang-kadang Anda tidak perlu menentukan ke mana file Knight dipindahkan (seperti dalam, Q-KKt4
dapat ditulis sebagai Q-Kt4
karena langkah Q-QKt4
itu tidak mungkin.) Langkah BxP
ini ambigu (yang menggadaikan: seharusnya BxQKtP
) , tapi Tuan Short tidak terlalu peduli tentang itu.
Anda dapat mempertimbangkan ini kasus uji Anda.
Catatan: Saya menulis ini dengan tangan. Jika Anda menemukan kesalahan mencolok, beri tahu saya.
Aturan dan Penilaian
- Aturan standar berlaku: program dengan output ke stdout, atau fungsi. Tidak ada apa-apa untuk stderr. Celah standar dilarang.
- Harap tautkan ke situs tempat kami dapat menguji kode Anda.
- Golf kode: kode menang pendek.
Kesimpulannya
Ini adalah tantangan pertama saya, jadi saya mungkin membuat beberapa kesalahan noobish. Umpan balik atas pertanyaan (dalam komentar, jelas) sangat dihargai.
Jawaban:
Batch, 554 byte
s
adalah string output.m
adalah langkah saat ini (bergerak diambil sebagai parameter baris perintah).c
adalah benderach
ataumate
.p
adalah bagian saat ini. Jika tidak ada bagian (yaitu huruf kecila-h
) kemudianP
diganti. (TheN
untukKt
substitusi dilakukan kemudian untuk menyelamatkan bytes.) Kolom tujuan kemudian mendongak dalam kamus. Namun jika langkah itu benar-benar menangkap maka tujuan menjadix
diikuti oleh bagian sebelumnya di alun-alun itu. Either way alun-alun tujuan kemudian diatur ke potongan yang baru saja pindah ke sana. Langkah tersebut diakumulasikan hingga tidak ada lagi parameter dan kemudian dicetak.Variabel
a1
...h8
digunakan untuk menyimpan bagian yang terakhir terlihat. The.
prefix ada karena dari cara saya menginisialisasinya barisan belakang; sulit untuk mengulang dua variabel sekaligus dalam Batch kecuali saya diizinkan untuk memulai satu dengan a.
.sumber