Catur heksagonal menggambarkan keluarga varian catur dimainkan di papan di mana sel-selnya adalah segi enam bukan kotak tradisional. Ada banyak varian seperti itu; dalam tantangan ini kita akan fokus pada varian Gliński, yang merupakan yang paling umum.
Papan terdiri dari tiga warna (sehingga warna yang sama tidak berbagi tepi), dengan tepi segi enam menghadap pemain. Papan memiliki 11 file, ditandai dengan huruf a
melalui l
(huruf j
tidak digunakan), dan 11 peringkat (yang menekuk 60 ° pada file f
). Jajaran 1
melalui 6
masing-masing berisi 11 sel, peringkat 7
memiliki 9 sel, peringkat 8
memiliki 7, dan sebagainya. Peringkat 11
persis mengandung satu sel: f11 . (Jika itu membantu, anggaplah setiap peringkat membuat bentuk "V" yang sangat luas.)
Berikut adalah contoh gambar papan, dengan ksatria di sel tengah. Sel-sel yang ditandai dengan titik adalah langkah hukum ksatria khusus ini. Ksatria bergerak dengan cara yang mirip dengan catur "normal", dua turun dan satu. Dalam istilah catur heksagonal, ini adalah langkah ortogonal (melintasi tepi), kemudian langkah diagonal dalam arah yang sama (gerakan terdekat dengan warna yang sama). Misalnya dengan ksatria di bawah, gerakan ortogonal "naik" ke coklat muda kemudian disertai dengan gerakan diagonal "ke atas dan kanan" atau "ke atas dan ke kiri" ke cokelat muda terdekat.
Dari domain publik melalui https://commons.wikimedia.org/wiki/File:Glinski_Chess_Knight.svg
Ksatria ini diposisikan di f6 dan langkah hukumnya demikian
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
Memasukkan
Satu input memberi sel awal ksatria kita. Ini bisa berupa string tunggal "b6"
, dua string "b", "6"
, dll., Dalam format apa pun yang nyaman . Huruf input dapat berupa huruf besar atau kecil - pilihan Anda.
Keluaran
Daftar gerakan valid yang dapat dilakukan oleh seorang ksatria di lokasi itu. Ini bisa berupa array string, string tunggal dengan pembatas yang jelas dan konsisten, memisahkan string dengan baris baru, dll., Apa pun yang paling nyaman. Output tidak harus dalam urutan, dan dapat dalam huruf besar atau kecil - pilihan Anda.
Aturan
- Asumsikan tidak ada bagian lain di papan tulis atau mengganggu gerakan. Kami fokus hanya pada ksatria.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
b6
a3, c4, d5, d9, e7, e8
f6
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
f11
d8, e8, g8, h8
i1
f2, f3, g4, h4, l2, k3
sumber
Jawaban:
JavaScript (ES6), 184 byte
Mengambil file
F
sebagai karakter dan pangkatR
sebagai integer dalam sintaks currying(F)(R)
. Mengembalikan array string.Bagaimana?
Langkah # 1: konversi file / peringkat ke koordinat Cartesian
Kami mengonversi koordinat catur heksagonal ke koordinat Cartesius (x, y) dengan x di [0 .. 10] dan y di [0 .. 20] :
Langkah # 2: terapkan vektor pemindahan
Di bawah ini adalah daftar vektor pemindahan dalam sistem Cartesian:
Kami menerapkan masing-masing ke koordinat sumber (x, y) dan mendapatkan daftar koordinat target (X, Y) .
Langkah # 3: Uji koordinat sasaran
Kita sekarang perlu memeriksa koordinat target mana yang sebenarnya terletak di dalam papan. Ini dilakukan dengan menguji X + Y dan X - Y :
Koordinat valid jika semua perbandingan berikut ini benar:
Kami juga harus memastikan bahwa X adalah dalam [0 .. 10] . Ini tidak dilakukan secara eksplisit karena
s[X]
tidak terdefinisi jika tidak, yang akhirnya menghasilkan nilai palsu yang akan disaring.Langkah # 4: konversikan kembali ke koordinat catur heksagonal
Akhirnya koordinat target yang valid dikonversi kembali ke koordinat catur heksagonal, menggunakan kebalikan dari rumus yang dijelaskan pada langkah # 1.
Uji kasus
Tampilkan cuplikan kode
sumber
Batch. 403 byte
Menyesuaikan sistem koordinat, meskipun dengan cara yang berbeda dengan jawaban @ Arnauld. The
c
subroutine mengambil keuntungan dari simetri dengan mencoba refleksi cermin masing-masing bergerak. (Saya juga mencoba memutar tetapi butuh terlalu banyak byte.)sumber
JavaScript (ES6), 184 byte
Saya pikir saya akan pelabuhan solusi Batch saya untuk ES6 untuk melihat bagaimana hal ini dibandingkan ... Aku tidak berharap untuk menjadi yang dekat ...
sumber
CJam, 77
Cobalah online
Gambaran:
Saya menggunakan sistem koordinat yang terlihat seperti ..f dan 1..6 di sisi kiri, diperpanjang tanpa menekuk, dengan huruf diganti dengan angka, dan diubah menjadi berbasis 0 (b3 → [1 2], g1 → [6 1], k3 → [9 6]). Gerakan relatif dalam sistem ini adalah [1 3], [2 -1], [2 3] dan refleksinya (negatif dan bertukar, misalnya [1 3] → [-1 -3], [3 1], [- 3 -1]). Posisi [xy] yang dihasilkan adalah valid jika [xyz] ⊂ [0 1 .. 10] di mana z = x-y + 5.
sumber
Dyalog APL, 72 bytes
mencoba
membangun daftar
a
dari semua sel yang valid:'A1' 'A2' ... 'L6'
a
digunakan untuk input dan outputmembangun daftar
j
koordinat terkait kea
dalam sistem di mana sumbu x sepanjangA6-L1
dan y sepanjangF1-F11
koordinat ketiga imajiner adalah perbedaan dari dua yang pertama
jika sel input diterjemahkan menjadi coords
0 0 0
, knight dapat berpindah ke sel-sel yang produk coords-nya adalah 6 atau -6sumber
Python 3.6, 149
Fungsi anonim dipanggil dengan dua string untuk file dan peringkat; mengembalikan daftar string.
Tidak Terkumpul:
sumber