Dalam catur, seorang ksatria hanya dapat bergerak ke posisi yang ditandai dengan X relatif terhadap posisi saat ini, ditandai dengan ♞:
A Knight's Graph adalah grafik yang mewakili semua gerakan hukum dari bidak ksatria di papan catur. Setiap titik dari grafik ini mewakili kuadrat papan catur, dan masing-masing ujung menghubungkan dua kotak yang merupakan langkah ksatria yang terpisah satu sama lain.
Grafik terlihat seperti ini untuk papan 8-by-8 standar.
Tantangan:
Diberikan bilangan bulat N , di mana 3 ≤ N ≤ 8 , menghasilkan matriks N-by-N yang mewakili papan, tempat jumlah gerakan yang mungkin dari setiap posisi ditampilkan. Untuk N = 8 , output akan berupa matriks yang menunjukkan nilai dari setiap simpul dalam grafik di atas.
Format output fleksibel. Daftar daftar atau bahkan daftar yang diratakan dll. Adalah format yang diterima.
Kumpulan kasus uji lengkap:
--- N = 3 ---
2 2 2
2 0 2
2 2 2
--- N = 4 ---
2 3 3 2
3 4 4 3
3 4 4 3
2 3 3 2
--- N = 5 ---
2 3 4 3 2
3 4 6 4 3
4 6 8 6 4
3 4 6 4 3
2 3 4 3 2
--- N = 6 ---
2 3 4 4 3 2
3 4 6 6 4 3
4 6 8 8 6 4
4 6 8 8 6 4
3 4 6 6 4 3
2 3 4 4 3 2
--- N = 7 ---
2 3 4 4 4 3 2
3 4 6 6 6 4 3
4 6 8 8 8 6 4
4 6 8 8 8 6 4
4 6 8 8 8 6 4
3 4 6 6 6 4 3
2 3 4 4 4 3 2
--- N = 8 ---
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2
Ini adalah kode-golf sehingga solusi terpendek dalam setiap bahasa menang. Penjelasan didorong!
Jawaban:
MATL ,
1716 byteCobalah online!
(-1 byte terima kasih kepada @Luis Mendo.)
(Sehubungan dengan pusat matriks, masing-masing 1 adalah langkah ksatria yang valid.)
t&l
- Bentuk matriks nxn dari semua 1s (di mana n adalah input). Biarkan ini menjadi M.[2K0]
- Dorong array yang berisi [2, 4, 0] pada stackB
- Konversi semua menjadi biner, padding dengan 0s sesuai kebutuhan2:&Zv
- Mencerminkan bahwa pada kedua dimensi, tanpa mengulangi baris / kolom terakhir ("pengindeksan rentang simetris"). Ini memberi kita matriks K. yang diperlukanZ+
- Lakukan lilitan 2D K pada matriks M (conv2(M, K, 'same')
) sebelumnya, rangkum 1s pada target ksatria legal untuk setiap posisiMatriks hasil ditampilkan secara implisit.
sumber
11043370BP5e
tetapi itu tidak lebih pendek ...Python 2 , 81 byte
Cobalah online!
sumber
JavaScript (ES6), 88 byte
Mengembalikan string.
Cobalah online!
Bagaimana?
JavaScript (ES7), 107 byte
Implementasi naif yang sebenarnya mencoba semua gerakan.
Cobalah online!
sumber
Jelly ,
23 22 1410 byteTautan monadik yang menghasilkan daftar datar - menggunakan ide yang pertama kali digunakan oleh KSab dalam jawaban Python mereka - gerakan knight memiliki "sisi" 1 dan 2, satu-satunya faktor 2.
Cobalah online! (footer menyebut hanya tautan program dan kemudian memformat hasilnya sebagai kisi)
²Ḷdðạ²§ċ5)
Bagaimana?
22 byter sebelumnya
Program lengkap (karena
³
).Cobalah online! (footer menyebut hanya tautan program dan kemudian memformat hasilnya sebagai kisi)
Temukan semua gerakan dan hitung yang mendarat di papan
mungkinpasti dapat dikalahkan dengan menghitung (mungkin dapat dikalahkan dengan mengubah logika "mendarat di papan").sumber
APL (Dyalog Classic) , 18 byte
Cobalah online!
⎕
input yang dievaluasi N2⍴⎕
dua salinan N⍳2⍴⎕
indeks matriks N × N - matriks panjang-2 vektor∘.-⍨
kurangi setiap pasangan indeks dari masing-masing pasangan lainnya, dapatkan array N × N × N × N|
nilai mutlak×/¨
produk masing-masing2=
dimana 2s? mengembalikan matriks boolean (0/1)Perhatikan bahwa seorang ksatria bergerak ± 1 pada satu sumbu dan ± 2 pada yang lain, sehingga nilai absolut dari produk langkah-langkah tersebut adalah 2. Karena 2 tidak dapat difaktorkan dengan cara lain, ini hanya berlaku untuk gerakan ksatria.
+/+/
jumlahkan sepanjang dimensi terakhir, dua kalisumber
RAD ,
514639 byteCobalah online!
Bagaimana?
Menghitung jumlah gerakan ksatria yang valid untuk setiap kotak dengan melihat gerakan ksatria mana yang akan mendarat di papan:
sumber
Brachylog ,
654033 byteIni terurai untuk N lebih besar dari 9. Jadi saya senang N hanya bisa pergi ke 8 =)
Cobalah online!
Brachylog ,
4436 byteYang ini juga berfungsi untuk angka yang lebih tinggi daripada 9
Cobalah online!
sumber
⟨∋≡∋⟩
awal untuk menghasilkan koordinat matriks juga, dan menyimpan 7 byte secara keseluruhan (output adalah daftar datar, yang diizinkan oleh OP): Coba online!Retina , 161 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Konversikan ke unary.
Daftar nilai satu kali untuk masing-masing
_
dalam nilai, yaitu membuat kotak.Mulai dari
_
di tengah regex, cobalah untuk mencocokkan konteks yang cukup untuk menentukan apakah masing-masing dari delapan ksatria bergerak adalah mungkin. Setiap pola menangkap satu karakter jika pertandingan berhasil. Saya mencoba menggunakan grup bernama sehingga jumlah tangkapan langsung sama dengan hasil yang diinginkan tetapi biaya 15 byte.Menggabungkan semua menangkap sukses dan mengambil panjangnya.
sumber
Bahasa Wolfram (Mathematica) , 34 byte
Namun lain Mathematica built-in.
Mengembalikan daftar yang diratakan.
Cobalah online!
sumber
Python 2 ,
11410392 byteCobalah online!
sumber
C (gcc) ,
133125 byteSolusi ini harus bekerja pada papan ukuran apa pun.
Cobalah online!
sumber