Tantangan
Tulis program atau fungsi yang menggunakan input string sebagai parameter fungsi atau dari stdin dan tentukan apakah itu string FEN yang valid .
Memasukkan
Anda dapat mengasumsikan input hanya akan menyertakan karakter berikut (peka huruf besar-kecil)
pkqrbnPKQRBN12345678/
Panjang input akan selalu minimum 1 karakter dan maksimal 100 karakter
Keluaran
Output harus berupa nilai truey / falsey. Ini bisa berupa nilai apa pun yang Anda inginkan asalkan konsisten (semua hasil yang benar memiliki hasil yang sama, semua hasil yang palsu memiliki hasil yang sama). Anda harus memiliki dua kemungkinan output yang berbeda.
Apa yang dianggap valid
Huruf kecil mewakili potongan hitam, huruf besar mewakili potongan putih.
Anda harus memastikan ada kemungkinan dalam permainan catur untuk potongan-potongan di posisi saat ini ada.
Setiap pemain akan selalu memiliki tepat 1 raja (k / K).
Setiap pemain mungkin tidak memiliki lebih dari 8 pion (p / P).
Setiap pemain biasanya tidak memiliki lebih dari 1 * ratu (q / Q).
Setiap pemain biasanya tidak memiliki lagi dari 2 * rooks (r / R)
Setiap pemain biasanya memiliki tidak lebih dari 2 * ksatria (n / N)
Setiap pemain biasanya tidak memiliki lebih dari 2 * uskup (b / B)
* Adalah sah bagi seorang pemain untuk ' mempromosikan 'pion ke salah satu dari keempat bagian ini.
Total pion, ratu, benteng, ksatria, dan uskup untuk setiap pemain tidak akan pernah lebih dari 15
Jumlah total potongan ditambah kotak kosong (dilambangkan dengan angka) harus selalu menambahkan hingga tepat 8 untuk setiap peringkat. Dan harus selalu ada persis 8 peringkat, dipisahkan oleh garis miring ke depan.
Hal yang bisa Anda abaikan
Anda tidak perlu mengkhawatirkan diri Anda dengan apakah mungkin untuk bermain ke posisi yang dilambangkan, atau jika posisi itu legal, hanya potongan-potongan itu bisa ada dalam jumlah yang diberikan.
Anda dapat mengabaikan kompleksitas string FEN lebih lanjut seperti giliran pemain, hak castling dan en passant.
Ini golf kode. Program terpendek dalam byte menang. Celah dan aturan biasa berlaku.
Uji Kasus
Input rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Output Benar
Input 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Output Benar
Input r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Output Salah
(hitam memiliki 7 pion dan 4 benteng - tidak mungkin)
Input 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Output Salah (hanya 7 peringkat)
Input 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Output Salah (9 peringkat)
Input 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Output Salah (peringkat ke-2 memiliki 9 kotak / potongan)
Masukan rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Keluaran Benar
Terima kasih kepada Feersum dan Arnauld untuk mengklarifikasi kasus ini (3 + 5 = 8)
Apa itu FEN?
FEN adalah notasi standar untuk merekam posisi potongan-potongan di papan catur.
Kredit gambar http://www.chessgames.com
sumber
* It is legal for a player to 'promote' a pawn to any of these four pieces.
Pemain mungkin memiliki hingga 9 ratu asalkan jumlah pion dikurangi untuk mengimbangi. Anda tidak perlu khawatir tentang posisi potongan yang legal atau ilegal, hanya jumlah potongan.35
hanyalah cara yang tidak biasa untuk menggambarkan 8 kotak kosong.Jawaban:
Retina , 105 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Perluas digit ke kotak kosong, yang kami tunjukkan menggunakan
1
s.Hapus input jika tidak cocok dengan 8 set dari 8 kotak yang valid yang bergabung dengan
/
s. (Ekstra/
diawali untuk menyederhanakan pemeriksaan.)Hapus input jika tidak ada putih atau tidak ada raja hitam, atau jika ada dua.
Hapus potongan awal putih, jika masih ada.
Demosikan potongan putih yang tersisa menjadi pion.
Hapus pion putih yang valid.
Hapus input jika ada pion putih yang tersisa.
Periksa lagi tetapi dengan potongan hitam.
Keluarkan nilai yang sebenarnya kecuali garis itu dihapus.
sumber
JavaScript (ES6),
168174... 155Jawaban ini telah diedit beberapa kali memalukan. Mudah-mudahan, versi saat ini dapat diandalkan dan layak golf.
Mengembalikan boolean.
Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
Python 3,
284 259 236 225 247234 byteCobalah secara Online!
Cobalah Online dengan semua test case!
-11 byte terima kasih kepada Tn. Xcoder
-13 byte terima kasih kepada Jonathan Allen
+22 Saya lupa raja ada.
Semi-ungolfed dengan beberapa penjelasan:
sumber
,p,P=9,9
dengan;P=p=9
.for-loop
: /p>0<P
bukannyap>0and P>0
menyimpan 5 byte juga. Atau, Anda bisa menggunakanp and P
(untuk -3 byte), Anda tidak memerlukannya>0
, karena nilai-nilai bukan nol adalah benar dalam Pythono=0
sebelum loop dan menambahkan dengano+=o<2
di akhir tubuh loop.PHP , 269 byte
Cobalah online!
sumber
JavaScript (ES6),
181172174 byteTidak Disatukan:
Tampilkan cuplikan kode
sumber
Python 3 , 263 byte
Cobalah online!
Bukan pengajuan Python terkecil, tapi saya pikir itu masih memiliki beberapa janji.
sumber