Dalam tantangan saya sebelumnya , saya menggambar diagram pertama sebagian besar dengan tangan (dengan bantuan mode blok visual vim). Tapi tentunya harus ada cara yang lebih baik ...
Diberikan input dari dua dimensi, lebar dan tinggi, output grid heksagonal dengan dimensi dalam seni ASCII.
Berikut diagram yang dirujuk dalam intro (dengan pengeditan kecil), yang seharusnya menjadi output Anda untuk input width=7, height=3
:
_____ _____ _____
/ \ / \ / \
_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Perhatikan beberapa hal:
Lebar dan tinggi pada dasarnya setara dengan berapa banyak heksagon yang ada untuk koordinat y dan x yang diberikan masing-masing. Ini akan selalu menjadi angka ganjil.
Setiap segi enam diwakili oleh seni ASCII
_____ / \ / \ \ / \_____/
tetapi batas "dibagi" antara segi enam tetangga.
Koma dalam koordinat selalu tepat dua karakter di bawah tengah tepi atas. Koordinat x kemudian diposisikan tepat sebelum koma, dan koordinat y langsung sesudahnya.
Anda dapat mengasumsikan bahwa koordinat tidak akan pernah terlalu besar sehingga mereka akan tumpang tindih dengan batas segi enam.
Input dapat diambil sebagai string yang dipisahkan spasi-koma, array bilangan bulat, atau dua argumen fungsi / baris perintah. Output harus berupa string tunggal (untuk STDOUT, sebagai nilai balik, dll.).
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Kotak di atas dapat digunakan sebagai test case. width=199, height=199
Kisi berukuran maksimum
jelas tidak praktis untuk disertakan di sini, tetapi beberapa baris dan kolom pertama akan terlihat seperti berikut:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /