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\___
\ / \ /
sumber
Jawaban:
Ruby, 221 byte
Tidak digabungkan dalam program uji
Keluaran
Ketika saya selesai debugging, saya melihat ambiguitas dalam spesifikasi. Di mana
w+1
habis dibagi 4, koordinat x pertama dan terakhir ganjil, dan tidak ada ambiguitas. Tetapi di manaw-1
dibagi 4 oleh koordinat x pertama dan terakhir genap. Saya berasumsi bahwa kolom pertama dan terakhir harus diimbangi di bawah yang berikutnya. Tapi kemudian saya membaca pertanyaan sebelumnya dan mencatat dalam kasus itu adalah kolom aneh yang harus diimbangi di bawah yang genap (catatan untukw-1
habis dibagi 4 tidak mungkin untuk melakukan keduanya.)Namun, perbedaan itu tidak dibuat dalam pertanyaan ini. Saya akan menyerahkan penilaian OP dan mengerjakannya kembali jika perlu, meskipun saya lebih suka tidak harus melakukannya.
sumber