Anda harus menulis sebuah program atau fungsi yang menerima string yang mewakili papan catur dengan hanya pion sebagai input dan output atau mengembalikan apakah penangkapan mungkin dilakukan di papan tulis.
Input dalam notasi FEN- like menggambarkan posisi pion putih dan hitam tanpa ada potongan lainnya. Anda harus memutuskan apakah ada pion yang bisa menangkap musuh.
Setiap peringkat dijelaskan, dimulai dengan peringkat 8 dan berakhir dengan peringkat 1; dalam setiap peringkat, isi setiap kotak dijelaskan dari file "a" hingga file "h". Setiap pion diidentifikasi dengan satu huruf (pion putih = "P", pion hitam = "p",). Kotak kosong dicatat menggunakan angka 1 hingga 8 (jumlah kotak kosong), dan "/" memisahkan peringkat. (sebagian diambil dari Wikipedia)
Sebagai contoh
8/pppppppp/8/8/4P3/8/PPPP1PPP/8
menggambarkan papan
--------
pppppppp
P
PPPP PPP
--------
Sebuah pion putih dapat menangkap yang hitam jika yang hitam diposisikan secara diagonal di atasnya (hitam di atas-kiri atau kanan-atas) dan pion hitam dapat menangkap yang putih jika yang putih secara diagonal di bawahnya (putih adalah bawah-kiri atau bawah-kanan). Tidak ada langkah penangkapan lain ( en passant ) yang harus dipertimbangkan.
Memasukkan
- Sebuah FEN tali -seperti yang terdiri dari karakter
12345678pP/
. - Masukan tersebut menjelaskan pion dari posisi permainan catur yang valid. Ini berarti (di antara kendala yang lebih rumit lainnya) akan ada paling banyak 8 pion untuk setiap sisi dan tidak ada pion pada peringkat 1 dan 8.
Keluaran
- Jika ada kemungkinan penangkapan untuk kedua sisi Anda harus menampilkan nilai kebenaran dan nilai palsu sebaliknya.
Contohnya
Input dengan truthy keluaran (satu per baris)
8/7p/6P1/8/8/8/8/8
8/8/p7/1P6/3P3p/8/8/8
8/2P5/8/4P1p1/2p2P2/3p4/3p1P2/8
8/P7/8/5P2/2pp4/3P2p1/3pP3/8
8/P7/p7/p1P1P3/1P3p2/8/1p6/8
8/4p1P1/2P2P1P/2p1pPpp/8/6P1/pP1p4/8
Input dengan output falsy (satu per baris)
8/8/8/8/8/8/8/8
8/7P/6p1/8/8/8/8/8
8/7p/7P/8/8/8/8/8
8/pppppppp/8/8/8/8/PPPPPPPP/8
8/p7/8/1p6/5P2/8/8/8
8/p7/P7/2P1p1p1/2p5/8/PP6/8
Ini kode golf sehingga entri terpendek menang.
8/pppppppp/8/8/8/7P/PPPP1PPP/8
?7P
berarti pion ada di file terakhir, ke-8. (Diagram itu salah, saya memperbaikinya.)Jawaban:
Pyth, 25 byte
Suite uji
Langkah:
Ubah input dengan mengganti digit dengan jumlah tanda kutip yang setara (
N
). Ini disimpan dalamJ
. Kami kemudian memotong 8 atau 10 karakter pertama, dan menutup hasilnya dengan yang asli. Setiap pasangan yang menangkap akan diubah menjadi"Pp"
, jadi kami kemudian menemukan jumlah string itu dalam daftar yang dihasilkan. Ini adalah output.Sebagai bonus, ini sebenarnya menghitung jumlah tangkapan yang mungkin dalam input.
sumber
:sXz`M9*LN9"p.{7}(..)?P"1
Sayangnya parameter terakhir:
tidak opsional (saya pikir seharusnya).Retina ,
3329 byteUntuk menjalankan kode dari satu file, gunakan
-s
bendera.Seharusnya mudah dikalahkan oleh sesuatu seperti Perl di mana perluasan digit menjadi string spasi (atau karakter lain) tidak memakan waktu 17 byte.
Outputnya positif (benar) jika ada kemungkinan penangkapan dan nol (palsu) jika tidak ada.
Penjelasan
Ini adalah lingkaran dua tahap. Yang pertama adalah tahap transliterasi yang menurunkan setiap digit, dan mengubah nol menjadi garis bawah. Mengapa? Karena
d
danw
perluas dua baris berikut:Jika set target tahap transliterasi lebih panjang dari set sumber, karakter asing diabaikan, maka perilaku menurun (jujur, itu hanya keberuntungan bahwa saya memutuskan untuk meletakkan garis bawah di depan digit ketika memperluas
w
kelas karakter) .Kemudian tahap kedua adalah pengganti, yang menambahkan a
.
ke setiap digit. Itu berarti bahwa untuk setiap digitn
,n
titik ditambahkan sebelum angka tersebut diubah menjadi garis bawah.Ini hanya menghilangkan garis bawah.
Akhirnya, kami menemukan kecocokan. Karena kita mengabaikan en passant, menangkap hanya mungkin jika ada
p
dan kemudian secaraP
diagonal di bawahnya. Dalam string linier, ini berarti bahwa harus ada 7 atau 9 karakter antara dua pion. Ini cocok dengan.{7}(..)?
(yaitu mencocokkan 7 karakter dan kemudian, secara opsional, cocok dengan dua lainnya).Tahap pertandingan seperti itu mengembalikan jumlah pertandingan yang ditemukannya.
sumber
Javascript, 272 karakter
Mungkin ada banyak ruang untuk perbaikan.
sumber
Ruby,
145 12346 byteSaya tidak tahu mengapa saya tidak memikirkan hal ini sejak awal. Ini jauh lebih pendek dan juga sangat mudah dibaca.
Inilah tesnya: http://ideone.com/Gzav8N
Pendekatan lama:
Tes online: http://ideone.com/9L01lf , versi sebelum bermain golf: http://ideone.com/CSmqlW
Riwayat modifikasi tersedia di sini .
sumber
ES6, 64 byte
Hitungan byte yang sesuai, jika bertahan!
Saya benar-benar memikirkan solusi ini tanpa membaca jawaban yang lain terlebih dahulu, tetapi saya tidak keberatan jika Anda tidak percaya kepada saya.
sumber
Perl 5, 30 byte
29, ditambah 1 sebagai
-pe
ganti-e
Salinan Perl dari jawaban Ruby w0lf .
sumber
PHP,
948780 byteLoop
strtr
itu jauh lebih pendek daripadapreg_replace_callback
denganstr_pad
.sumber
Jelly,
888479726965646360 bytePasti ruang untuk perbaikan. Tidak bersaing karena Jelly dibuat sebelum pertanyaan. Terima kasih kepada @ lirtosiast karena mengatakannya kepada saya!
sumber