Tugas Anda: diberi bilangan bulat n
, buat pola segi enam tertanam mengikuti aturan di bawah ini, hingga kedalaman ke-n.
Hexagon yang disematkan memiliki bentuk dasar ini: ( n=0
)
__
/ \
\__/
Segi Enam Tertanam n=1
dan n=2
:
____
/ \ \
/\__/ \
\ /
\____/
________
/ \ \ \
/\__/ \ \
/\ / \
/ \____/ \
\ /
\ /
\ /
\________/
Panjang setiap sisi adalah 2 kali panjang sisi yang sama pada kedalaman sebelumnya dua kali. Sisi atas dan bawah panjangnya 2 karakter, kapan n=0
dan sisanya mulai panjang 1 karakter. Panjang sisi non atas-bawah harus 2^n
panjang ( OEIS: A000079 ) dan sisi atas dan bawah harus mengikuti aturan 2^(n+1)
(OEIS yang sama).
Segi enam saat ini diindeks 0, Anda dapat memilih untuk menggunakan 1-diindeks jika Anda mau.
Ini kode-golf , jadi jawaban terpendek menang!
code-golf
ascii-art
hexagonal-grid
Kamerad SparklePony
sumber
sumber
n
?Jawaban:
Arang ,
4029 byte11 byte disimpan berkat @Neil dengan mengubah loop sementara menjadi for-loop di antara trik lainnya
Cobalah online!
Penjelasan (kedaluwarsa)
Program ini dimulai dengan menghasilkan hexagon terbesar, dan kemudian melakukan yang lebih kecil satu-per-satu dalam loop sementara (1-diindeks). Untuk referensi,
α
adalah nomor input,β
adalah variabel yang berisi2^(α-1)
danι
merupakan variabel iterasi dalam loop.sumber
×_X²ι
itu sama dengan×__β
, dan beberapa byte lagi dengan mengubah AndaW
menjadiF
, yang juga menghindari keharusan untuk menyimpan nomor input. Cobalah online! .Haskell ,
230217207 byteEDIT:
#
bisa sajamax
.zipWith
danp
bisa digabung menjadi?
operator, dan saya akan (entah bagaimana!) Diimplementasikan kembalireplicate
.m
mengambilInteger
dan mengembalikan aString
.Cobalah online!
Bagaimana itu bekerja
m
adalah fungsi utama. Ini digunakan&
untuk menghasilkan segi enam dengan bantalan yang tepat, lalu melipatnya bersamao
.l&t
menghasilkan segi enam kecil panjang sisit
, empuk di dalam yang besar panjang sisil
, sebagai daftarString
garis.a
adalah garis atas segi enam, dengan garis bawah.b
adalah daftar garis lain di bagian atas segi enam. Garis-garisb
dipusatkan di padding, yang persegi panjang; ini memungkinkan langkah selanjutnya untuk bekerja.a
dilapis di atasb
dengano
, lalu dibalik (urutan kedua garis dan di dalam setiap baris).c
mengambil dua argumen, daftar panjang dan string, dan menghasilkan string yang memiliki banyak salinan dari masing-masing karakter dalam aslinya sebagai panjang yang sesuai, misalnyac[1,3,2]"abc" == "abbbcc"
. Ini digunakan&
untuk menghasilkan garis.o
mengambil dua argumen yang mewakili gambar sebagai daftar garis, dan menayangkan yang pertama, lebih kecil di atas yang kedua.?
dua kali untuk melapisi gambar pertama dengan banyak ruang tak terbatas baik ke bawah dan ke kanan, kemudian zipping bersama karakter yang sesuai denganmax
, yang memilih karakter non-spasi jika ada.(f?e)l m
membalut daftarl
dengan menambahkan banyak elemen 'e', kemudian ritsleting daftar yang dihasilkan dan daftarm
denganf
fungsi.sumber
(#)
bisamax
.p
ke save bytes:o=max?' '?"";f?e=z f.(++repeat e)
. Mungkin pointfree lebih pendek.(\n->(<$[1..n]))
adalahreplicate
.replicate
? Nah, itu memalukan. Aku terlalu terbiasa<$[1..n]
atau[1..n]>>
hampir selalu menang. Namun, saya tidak melihat bagaimana mempersingkat?
lebih lanjut. Saya sudah mencoba membuatp
pointfree dan++
hanya ada di tempat yang salah, meledakkan hal-hal denganflip
.JavaScript (ES6), 258 byte
Penjelasan: Untuk segi enam setelah yang pertama, segi enam sebelumnya pertama kali dihasilkan dan empuk di setiap sisi (ini bergantung pada output menjadi persegi panjang). (Untuk heading pertama, beberapa dummy padding dibuat.) Sisi atas dan atas segi enam dihasilkan, dan semua ruang digabung dengan segi enam sebelumnya. (Ada beberapa tipu daya untuk membuat hexagon berbaris; ini akan lebih mudah jika margin tambahan diizinkan.) Sisi bawah hexagon dihasilkan secara analog ke sisi atas, dan bagian bawah hexagon kemudian diisi. Kehati-hatian harus diambil untuk mengembalikan output persegi panjang, termasuk baris baru, agar rekursi dapat bekerja.
sumber
/
s populer dalam seni ASCII danreplace
metode ini adalah cara yang relatif murah untuk menghasilkan mereka dalam JavaScript.1<<n>>1
: Nice symmetry ;-)v
tetapi sayangnya1
tidak simetris di salah satu font biasa saya.PHP, 337 Bytes
0 Pengindeksan
Cobalah online!
Diperluas
sumber