Biarkan papan catur 8x8 diwakili oleh dua nilai berbeda, dengan satu nilai menjadi kotak kosong dan yang lainnya menjadi ratu. Dalam contoh berikut, saya menggunakan 0s sebagai kotak kosong dan 1s sebagai ratu. Sebagai contoh:
diberikan oleh
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Pertimbangkan jumlah pasangan ratu yang menyerang masing-masing yang setidaknya berjarak satu kuadrat (sebagai pengingat, ratu menyerang secara ortogonal dan diagonal). Dalam contoh di atas, diagram jelek luar biasa berikut ini menunjukkan semua pasangan ini sebagai panah.
Ada 43 pasangan yang ditemukan di atas yang memberikan test case berikut:
Input:
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Output: 43
Tantangan
Tulis sebuah program yang, diberi status papan yang diwakili oleh dua nilai berbeda, menampilkan jumlah pasangan ratu yang saling serang dengan setidaknya satu kotak di antaranya.
- Anda dapat memasukkan dalam format apa pun yang paling nyaman yang menggunakan dua nilai untuk mewakili kotak kosong dan ratu, misalnya, string 64 "." S untuk kotak kosong dan "Q" untuk queens dengan baris dari bawah ke atas, 8x8 matriks booleans, daftar bilangan bulat 0 dan 1 dll, selama dijelaskan dalam solusi Anda
- Output adalah bilangan bulat
- Metode I / O standar berlaku dan lubang standar dilarang
- Ini kode golf sehingga jawaban tersingkat dalam byte menang
Kasus uji:
Menggunakan format 0 dan 1, dengan 0 kotak kosong dan 1 menjadi ratu:
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 0
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 0
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 1
Input:
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 0
Output: 10
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 4
Input:
1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 11
sumber
Jawaban:
Python 2 , 105 byte
Cobalah online!
Penjelasan
Kami mengambil input sebagai string 64 karakter
'0'
atau'1'
. Menggunakan irisan langkah, kami melemparkan empat "garis pandang" dari setiap ratu yang kami temui. Misalnya, ketika i = 10 dan d = 7 , tandai ratu sebagai ♥ dan ubin dipilih olehb[i+d::d]
as:Jelas, kami sebenarnya tidak ingin visi membungkus papan seperti ini. Jadi kami menghitung seberapa jauh ujung papan di setiap arah, dan melihat ubin di
b[i+d::d][:…]
.Untuk setiap pasangan arah ubin kami menghitung:
Ini akan gagal kapan saja
c
bukan ratu; ataufind
menghasilkan 0); ataufind
pengembalian −1).Setiap pasangan ratu hanya diperiksa satu kali, karena sinar selalu dilemparkan ke depan dalam urutan membaca, dari ratu "sebelumnya" ke ratu "nanti".
sumber
JavaScript (ES7), 86 byte
Mengambil input sebagai array 64 bilangan bulat dengan 254 untuk queen dan 0 untuk kotak kosong.
Cobalah online!
Versi ini menyalahgunakan aritmatika underflow untuk mendapatkan kondisi berhenti di bagian rekursif.
JavaScript (ES7), 89 byte
Mengambil input sebagai array 64 bit.
Cobalah online!
Bagaimana?
Kami secara rekursif memanggil fungsi callback bernama
map()
untuk berjalan melalui kotak dalam arah tertentu. Meskipun kita tidak benar-benar membutuhkan konten dari parameter ketiga dari callback (arraymap()
dipanggil), kita secara tidak langsung menggunakannya untuk mengetahui apakah itu adalah iterasi pertama atau tidak.Ini adalah variabel x dalam kode.
sumber
Siput , 14 byte
Cobalah online!
Input adalah format 0/1, tanpa spasi di dalam garis.
Siput telah dibuat untuk tantangan PPCG desain bahasa pencocokan pola 2D . Yang paling penting, secara default menampilkan jumlah kecocokan yang ditemukan, yang sempurna untuk tantangan ini.
A
menetapkan opsi "semua jalur", sehingga jika seorang ratu berada dalam banyak pasangan, masing-masing pasangan itu akan menghasilkan kecocokan.rdaa7
menyetel arah pertandingan ke S, SE, E, dan NE. Pengaturan ke semua arah (z
) akan menyebabkan penghitungan ganda.\1\0+\1
cocok dengan1
, lalu satu atau lebih0
, lalu yang lain1
.sumber
APL (Dyalog Classic) ,
413932 byteCobalah online!
≠⍨
adalah "tidak sama dengan dirinya sendiri" - sebuah matriks all-zero 8x8⊢,≠⍨,⌽,≠⍨
- jika matriks asli adalahABC...
, ekspresi ini mengembalikan:8 31⍴
membentuk kembali dari 8x32 ke 8x31, menggunakan kembali elemen dalam urutan baris-utama:⊢,⍉,
tambahkan awal matriks asli dan transposinya (ruang ekstra untuk kejelasan):2<⌿0⍪
menambahkan 0s di atas dan membandingkan menggunakan<
setiap elemen terhadap elemen di bawahnya, jadi kami mendapatkan 1 untuk 1 terkemuka di setiap grup vertikal 1s, dan kami mendapatkan 0s di tempat lain+⌿-⌈⌿
jumlah per kolom dikurangi jumlah maksimum per kolom - kami menghitung jumlah celah antara 1-grup di setiap kolom, 0 jika tidak ada+/
jumlahsumber
Jelly ,
2220 byteCobalah online!
sumber
Retina 0.8.2 ,
6058 byteCobalah online! Mengambil input sebagai 8 string biner 8-karakter yang dipisahkan koma, tetapi header mengkonversi format yang disediakan untuk Anda. Penjelasan:
Buat semua substring papan mulai dari ratu. Sufikskan nilai marker ke setiap substring. Sunting: Disimpan 2 byte dengan meninggalkan beberapa string sampah; ini diabaikan secara efektif.
Pisahkan setiap marker ke dalam rentang inklusif, dan tambahkan 7 ke elemen yang tidak nol.
Hapus setiap karakter yang sama dengan panjang marker. Ini sama dengan menemukan setiap sinar timur, barat daya, selatan atau tenggara dari masing-masing ratu.
Hitung semua sinar yang melewati setidaknya satu kotak kosong sebelum bertemu ratu lain.
sumber
JavaScript (ES6) + SnakeEx , 38 byte
Mengambil input dalam formulir
'10111000\n10101011\n10101101\n01010100\n01100101\n10001000\n01000111\n01110101'
. Ternyata, SnakeEx masih bisa digunakan di luar tantangan aslinya!sumber
K (ngn / k) , 45 byte
Cobalah online!
sumber