Diberikan input dari empat bilangan bulat x 1 , y 1 , x 2 , dan y 2 , menghasilkan apakah raja putih dalam catur (dengan koordinat ( x 1 , y 1 )) dapat menangkap pion hitam (dengan koordinat ( x 2 , y 2 )) dan tangkap jika pion bergerak untuk mempromosikan ke ratu secepat mungkin.
Koordinat dewan adalah sebagai berikut:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Anggaplah putih untuk bergerak (giliran raja) dan kedua pemain bermain secara optimal (raja akan bergerak secepat mungkin untuk menangkap pion, dan pion akan bergerak secepat mungkin untuk mempromosikan). Koordinat input akan selalu berbeda, dan pion tidak akan pernah mulai dengan koordinat y dari 8.
Raja bergerak satu bujur sangkar ke arah mana saja setiap belokan (ia dapat bergerak secara diagonal), dan pion hanya dapat memindahkan satu ruang ke depan (mengurangi koordinat y-nya), kecuali jika itu pada posisi awalnya (dengan sistem koordinat kami, koordinat y dari 7), dalam hal ini dapat memindahkan dua ruang ke depan.
Input dapat diberikan sebagai string whitespace- / dipisahkan koma, array string / integer, atau empat fungsi / baris perintah / argumen dll. Koordinat dapat diberikan dalam urutan mana yang paling nyaman / golf (jadi, menerima input sebagai [y 2 , y 1 , x 1 , y 2 ] boleh saja asalkan konsisten). Outputnya harus berupa nilai true atau falsy .
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Kasus uji kebenaran :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Kasus uji palsu :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, di mana raja menangkap sebelum bidak dapat memindahkan dua ruang. Saya pikir semua jawaban sekarang salah. Situasi ini membuat masalahnya jauh lebih sulit.Jawaban:
Jelly , 33 byte
Program ini membaca koordinat
x2\nx1\ny2\ny1
dari STDIN. Cobalah online!Versi yang tidak bersaing
Sayangnya, juru bahasa Jelly memiliki bug ketika pertanyaan ini diposting. Bug yang dikatakan mencegahnya menerima lebih dari dua argumen baris perintah. Versi terbaru Jelly dapat menyelesaikan tugas yang diberikan dalam 23 byte .
Cobalah online!
sumber
Python 2,
5340Raja memiliki koordinat
(x, y)
dan bidak(p, q)
.Ada tiga kasus penting:
Gadai berada di peringkat 7 dan raja di peringkat 8. Untuk menangkap pion, raja harus berada di file yang sama atau yang berdekatan.
Hasil:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
Gadai berada di peringkat 7. Untuk menangkap gadai, raja harus berada dalam enam file.
Hasil:
q = 7 → |x - p| ≤ 6
Gadai berada di peringkat yang lebih rendah. Untuk menangkap pion, raja harus dapat mencapai kotak promosi paling banyak satu langkah setelah pion.
Hasil:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Solusi saya hanyalah kondisi ini menurun. Semoga tidak ada kesalahan saat ini.
sumber
abs
denganmax(y-1,x-p,p-x)
?f(1,8,1,7)
seharusnyaTrue
karena raja segera menangkap pion? Saya pikir ada kehalusan di mana gadai baris 7 tidak dapat diperlakukan sebagai baris 6 jika raja langsung menangkap.or
dan-2
.Prolog,
4842 byteKode:
Contoh:
Bukan tantangan yang buruk untuk Prolog dibandingkan dengan kebanyakan.
Sunting: Disimpan 6 byte dengan beralih ke rumus yang digunakan dalam jawaban Python 2 grc .
Sayangnya Prolog tidak dapat membuat perbandingan rantai karena python dapat dan pembagian integer adalah 1 byte lebih panjang dari divisi float.
Cobalah online di sini
sumber
JavaScript (ES6), 52
Saya berharap telah menyimpan byte yang tidak menggunakan Math.abs, Math.min, Math.max
Gadai di baris tujuh dapat lolos dengan memindahkan 2 spasi, jika dan hanya jika raja tidak berada di kolom dekat - itu sebabnya ada tanda centang
d
sebelum mengganti 7 dengan 6.Test case untuk dijalankan di konsol:
Hasil:
[true, true, true, true, false, false, false]
sumber
Ruby, 50 byte
Argumennya adalah (raja x, raja y, gadai x, gadai y), semua bilangan bulat.
sumber