Tulis program terpendek yang mencetak bagian seni ASCII ini dari ubin heksagonal atau sarang lebah :
__
__/ \__
__/ \__/ \__
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
\__/ \__/
\__/
- Tidak ada input yang harus diambil.
- Output ke stdout atau alternatif terdekat bahasa Anda.
- Alih-alih sebuah program, Anda dapat menulis fungsi bernama yang tidak mengambil parameter dan mencetak hasilnya secara normal atau mengembalikannya sebagai string.
- Output mungkin memiliki sejumlah baris utama dan / atau trailing dan setiap baris dalam output dapat memiliki sejumlah ruang memimpin dan / atau trailing (selama pola berbaris dengan benar.)
- Kode terpendek dalam byte menang.
code-golf
ascii-art
kolmogorov-complexity
tiling
hexagonal-grid
Hobi Calvin
sumber
sumber
Jawaban:
CJam,
4543424140 byteCobalah online di juru bahasa CJam .
Bagaimana itu bekerja
mengulangi pola
\__/
38 kali dan membaginya menjadi potongan-potongan dengan panjang 21 . Jika potongan dipisahkan oleh umpan baris, ini akan menjadi hasilnya:Ini jelas mengandung honeycomb yang diinginkan. Yang tersisa untuk dilakukan adalah mengganti beberapa karakter dengan spasi, memotong beberapa karakter lainnya dan benar-benar memperkenalkan umpan baris.
menghasilkan integer 74 100 000 036 dan mengubahnya menjadi array [7 4 1 0 0 0 0 0 0 3 3] . Setiap elemen array mengkodekan jumlah karakter utama dari baris yang sesuai yang harus diganti dengan spasi. Dengan mengurangi angka ini dari 16 , kami juga mendapatkan panjang yang benar untuk baris ini.
Karena spasi memiliki titik kode yang lebih rendah daripada karakter L lainnya dan operator vektor membuat karakter string yang lebih panjang yang tidak sesuai dengan salah satu yang lebih pendek tidak tersentuh,
.e<
menggantikan karakter D pertama dengan spasi.sumber
Python 2, 73
Lihat berlari.
Untuk masing-masing dari 11 baris keluaran, hitung jumlah ruang terdepan
k
sebagai maksimum dari tiga fungsi linier yang membentuk amplop sisi kiri segi enam. Karena garis diagonal memiliki kemiringan3
dan-3
, lebih baik untuk mengindeks nomor baris sebagaii=0,3,...30
.Untuk membuat mesh segi enam, pertama-tama kita harus memasang cukup unit
'\__/ '
. Kemudian, menggeser[i:]
luruskan kembali dengan 3 untuk baris aneh. Akhirnya, kami mengambil porsi yang dibutuhkan[k:16-k]
, meninggalkan margink
di kiri dan kanan.sumber
CJam,
655655 byteCobalah online di juru bahasa CJam .
Ide
Bagian kanan dari setiap baris adalah salinan terbalik dari bagian kiri dengan garis miring dan garis miring terbalik. Oleh karena itu, cukup untuk menyandikan bagian kiri sarang lebah:
Daripada menganalisis pola ini baris demi baris, kita dapat menganalisisnya kolom demi kolom:
Pola yang jelas muncul:
_ _ _ _
muncul lima kali./
diikuti oleh a\
.Dengan mengganti setiap
/\
,_
,_ _ _ _
dan ruang dengan nomor dari 0 sampai 3, kita dapat mengkonversi array yang dihasilkan dari basis 4 nomor untuk basis yang lebih tinggi dan menyimpan pola lengkap secara kompak.Kode
sumber
C,
148144140 byteDengan spasi putih, tanpa peringatan kompiler, dan sebelum beberapa kode tweak untuk menyimpan beberapa byte:
Pendekatan ini tidak menggunakan tabel karakter / string. Itu loop atas semua 187 (11 baris, 17 kolom termasuk baris baru), dan memutuskan karakter mana yang akan dicetak untuk setiap posisi, berdasarkan kombinasi kondisi.
Kondisi termasuk tes untuk berada di dalam / di luar 4 sudut, menggunakan 4 persamaan garis, dengan hasil disimpan dalam variabel
p
. Sisanya sebagian besar berulang setiap 6 karakter, dengan baris ganjil digeser oleh 3 karakter relatif ke baris genap.sumber
int
.k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
Ruby - 78 Bytes
Transkripsi solusi xnor (69 Bytes):
sumber
11.times
menghemat 2 byteJavaScript (ES6), 129
130Itu string murni ganti / ganti / ganti ... tidak memanfaatkan properti geometris apa pun.
Menggunakan string template, semua baris baru signifikan dan diperhitungkan.
Jalankan cuplikan di Firefox untuk menguji
sumber
PHP -
1391371071019187 byteSaya tidak tahu apakah ini cara terbaik untuk bermain golf tetapi ini adalah percobaan saya:
303646-50 bytes berkat Ismael MiguelUji secara online di sini
kode lama:
sumber
<?
alih-alih<?php
menyimpan 3 byte. Alih-alih$c=$a.$a."/ \\\n\__".$a.$a."/\n";
, Anda dapat menulis$c="$a$a/ \\\n\__.$a$a/\n";
(karena PHP memperluas variabel dalam string). Anda dapat menerapkan logika yang sama keecho
untuk lebih mengurangi panjangnya. Selain itu, Anda tidak perlu ruang antaraecho
dan string.\n
, Anda dapat meletakkan baris baru nyata dan menyimpan 1 byte per baris.<?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";
. Ingatlah untuk mengganti\t
dengan karakter tab dan\n
dengan baris baru yang sebenarnya.Lua 146
(baris baru ditambahkan untuk kejelasan)
sumber
S
tiga kali.Dart - 113
Solusi interpolasi string murni, tidak ada yang mewah. Operasi string seperti "substring" terlalu bertele-tele untuk bersaing dalam praktik.
Jalankan di DartPad .
sumber
Javascript ( ES7 Draft ),
969493 byteInspirasi diambil dari beberapa solusi di sini ...
Edit: -1 dari edc65
Berkomentar:
sumber
.substr(+x+z,16-x-x)
->.slice(+x+z,16-x+z)
-1+x
bukan hanyax
?x
untuk menggunakan nomor. Tanpa itu, itu akan menyatukanz
Python 3,
10087 byteDan versi kode yang dapat dibaca di bawah ini. Idenya adalah untuk membuat hardcode interval (mulai, panjang) dan kemudian pad dengan jumlah ruang yang tepat untuk menempatkan interval.
sumber
Retina , 66 byte
Setiap baris harus menuju ke file sendiri dan
<LF>
berarti baris baru yang sebenarnya dalam file. 1 byte per file tambahan ditambahkan ke byte-count.Anda dapat menjalankan kode sebagai satu file dengan
-s
bendera, menjaga<LF>
spidol dan mungkin mengubahnya menjadi baris baru di output agar mudah dibaca jika diinginkan.Algoritma ini adalah 5 langkah pengganti sederhana (mengubah konten garis ganjil menjadi konten baris genap) mulai dari string input kosong. Hasil setelah setiap langkah yang (dibatasi oleh
=
's):sumber
Javascript,
154151 bytesumber