Sepenuhnya terkejut ini belum diposting, mengingat sejumlah besar teka-teki catur di situs. Sementara saya memikirkan hal ini sendiri, kredit untuk Anush karena mempostingnya ke kotak pasir kembali pada bulan Maret . Tapi saya pikir sudah cukup lama sehingga saya bisa melanjutkan dan melakukannya sendiri.
Sebuah skakmat dalam catur adalah posisi di mana raja diserang dan tidak ada langkah yang dapat mempertahankannya. Jika Anda tidak terbiasa dengan bagaimana bidak catur bergerak, Anda dapat membiasakan diri di Wikipedia .
Tantangan
Untuk tantangan ini, masukan Anda akan menjadi posisi papan catur dalam notasi apa pun yang Anda suka. Untuk memperjelas, input Anda akan menjelaskan potongan-potongan di papan catur, dengan warna dan posisinya, bersama dengan kotak tangkap en passant yang mungkin , jika ada. (Kemampuan untuk kastil tidak relevan karena Anda tidak dapat kastil tidak terkendali.) Anda mungkin menemukan notasi FEN berguna , tetapi format yang mudah digunakan baik-baik saja. Untuk kesederhanaan, Anda dapat menganggap itu Hitam untuk dimainkan - ini berarti Hitam akan selalu menjadi pemain skakmat. Posisi di mana White berada di check, skakmat, atau jalan buntu akan dianggap tidak valid untuk tantangan ini.
Anda harus menampilkan nilai yang benar jika posisi itu sekakmat, dan nilai yang salah jika tidak. Perhatikan bahwa jalan buntu bukanlah skakmat - raja harus diserang!
Kasus uji kebenaran
1k5R / 6R1 / 8/8/8/8/8 / 6K1 b - -
rn2r1k1 / pp1p1pQp / 3p4 / 1b1n4 / 1P2P3 / 2B5 / P5PP / R3K2R b - -
kr5R / rB6 / 8/8/8 / 5Q2 / 6K1 / R7 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / R3r2k b - - 0 1
Kasus uji Falsey
rnbqkbnr / pppppppp / 8/8 / 4P3 / 8 / PPPP1PPP / RNBQKBNR b KQkq -
8/8/8/8/8 / 1KQ5 / 4N3 / 1k6 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / 4r2k b - -
8/8 / 2Q5 / 3k4 / 3Q5 / 8/8 / 7K b - -
8 / 4Q1R1 / R7 / 5k2 / 3pP3 / 5K2 / 8/8 b - e3 (Awasi saat itu lewat!)
Golf kode - kode terpendek dalam byte menang. Semoga berhasil!
sumber
Jawaban:
JavaScript (Node.js) ,
499 ... 374370 byte(b)(X)
Di bawah ini adalah nilai yang diharapkan untuk setiap kotak:
Cobalah online!
Bagaimana?
Representasi dewan
Kami menggunakan representasi papan 0x88 klasik , sehingga kuadrat target di luar batas dapat dengan mudah dideteksi.
Pindahkan pengodean
Setiap rangkaian gerakan dikodekan dengan 5 parameter:
Semua parameter ini dikemas menjadi satu string. Misalnya, gerakan ksatria dikodekan sebagai berikut:
pemberian yang mana:
Semua set gerakan dirangkum dalam tabel berikut, kecuali tangkapan en-passant yang diproses secara terpisah.
Berkomentar
sumber
8/1ppp4/1pkp4/8/2Q5/8/8/7K b - -
Haskell ,
116510651053 byteBytes disimpan berkat Leo Tenenbaum
Cobalah online!
Ini bukan golf yang tepat seperti sekarang, tapi ini awal.Dengan beberapa bantuan di sepanjang jalan, saya sekarang telah menurunkan ini dengan cukup agresif (dan memperbaiki kesalahan di sepanjang jalan).Satu hal yang mungkin dipertanyakan adalah apakah ini mengasumsikan bahwa, selain oleh seorang raja atau pion dalam perjalanan, Anda tidak akan pernah bisa keluar dari cek dengan mengambil salah satu karya Anda sendiri. Dalam catur, Anda tidak diizinkan untuk melakukan langkah ini, tetapi program saya menganggap langkah-langkah ini untuk menghemat byte dengan asumsi bahwa jika Anda berada dalam kendali, ini tidak akan pernah bisa mengeluarkan Anda dari itu.
Asumsi ini berlaku karena bergerak seperti itu
Tidak dapat menangkap bidak yang menyerang raja, karena bidak yang mereka ambil berwarna hitam.
Tidak dapat memblokir jalan potongan yang menyerang raja, karena potongan hitam yang ditangkap sudah melakukan itu.
Kami juga menambahkan ketentuan tambahan bahwa jika Anda tidak memiliki raja, Anda berada dalam kendali.
Program ini juga membuat asumsi bahwa jika ada pion yang dapat ditangkap secara diam-diam, maka pion itu adalah bagian terakhir untuk dipindahkan dan langkah itu adalah langkah legal. Ini karena program tidak memeriksa apakah kuadrat itu memindahkan pion hitam menjadi kosong sehingga jika ada bagian di sana hal-hal bisa sedikit kacau. Namun ini tidak dapat diperoleh jika langkah terakhir adalah langkah hukum dan selanjutnya tidak dapat diwakili dalam FEN . Jadi anggapan ini agaknya solid.
Ini adalah versi "ungolfed" saya untuk referensi:
Cobalah online!
sumber
guard x = [0|x]
dan Anda juga dapat menggunakanx?y=Just(x,y)
untuk menyimpan beberapa byte lagi: 1129 bytePython 3 (PyPy) , 729 byte
Cobalah online!
sumber
8/2p5/Q7/Q2k4/Q7/8/8/7K b - -
(bukan skakmat).