Dengan kisi 8x8 huruf yang mewakili kondisi permainan catur saat ini, tugas program Anda adalah menemukan langkah selanjutnya untuk warna putih yang menghasilkan skakmat (jawabannya akan selalu menjadi pasangan dalam satu langkah).
Memasukkan
Masukan akan di STDIN - 8 baris masing-masing 8 karakter. Arti masing-masing karakter adalah sebagai berikut:
K/k - king
Q/q - queen
B/b - bishop
N/n - knight
R/r - rook
P/p - pawn
- - empty square
Huruf besar mewakili potongan putih, dan huruf kecil mewakili hitam. Papan akan berorientasi sehingga putih diputar dari bawah dan hitam diputar turun dari atas.
Keluaran
Langkah untuk putih yang menghasilkan skakmat, notasi aljabar . Anda tidak perlu memberi tahu kapan sebuah karya telah diambil, Anda juga tidak perlu khawatir tentang disambiguasi antara dua bagian yang identik yang dapat membuat langkah yang sama.
Masukan sampel
Contoh 1
Memasukkan:
------R-
--p-kp-p
-----n--
--PPK---
p----P-r
B-------
--------
--------
Keluaran:
c6
Contoh 2
Memasukkan:
--b-r--r
ppq-kp-p
-np-pn-B
--------
---N----
--P----P
PP---PP-
R--QRBK-
Keluaran:
Nf5
Contoh 3
Memasukkan:
---r-nr-
-pqb-p-k
pn--p-p-
R-------
--------
-P-B-N-P
-BP--PP-
---QR-K-
Keluaran:
Rh5
Anda dapat mengasumsikan bahwa solusinya tidak akan melibatkan castling atau en-passant.
Ini adalah kode-golf - solusi terpendek menang.
(Contoh diambil dari mateinone.com - puzzle 81, 82 dan 83)
Jawaban:
Ruby,
589512510499493 karakterInput diberikan melalui stdin, misalnya:
Outputnya bukan hanya satu gerakan yang memaksa pasangan dalam satu gerakan tetapi setiap gerakan yang melakukannya.
Sunting 1: Fungsi
e
hanya digunakan sekali jadi saya sebaris itu. Kedua, pengkodean sekarang didasarkan pada nomor 5 bukan 10. Dan refactoring kloning papan menghemat beberapa karakter.Sunting 2: Masih tidak sebanyak perbaikan yang saya inginkan. Mengubah hash dari
{a=>b,c=>d}
menjadiHash[a,b,c,d]
. Biaya ini 4 karakter tetapi menyimpan satu per pasangan nilai kunci.Sunting 3: Hanya pengurangan kecil: inlining M (4 karakter),
t==?-
->t<?.
(2), menghapus Gadai dalam notasi aljabar di akhir (2), menggantikan put (3). Program ini sekarang kurang dari 500 karakter.Sunting 4: Sangat menarik betapa banyak yang masih bisa ditemukan dalam program semacam itu. Memindahkan invarian di luar loop dan menemukan perhitungan duplikat lain.
sumber
[*$<]
bukan$<.map{|l|l}
.