Tugas Anda: membuat segitiga heksagonal dengan panjang sisi n
, di mana n
bilangan bulat positif atau 0.
Pertama, izinkan saya mendefinisikan segi enam:
/ \
| |
\ /
(Seni ASCII yang luar biasa, kan?)
Segi enam dapat dihubungkan bersama dengan berbagi sisi:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Segitiga heksagonal adalah sebagai berikut:
/ \
| |
/ \ / \
| | |
\ / \ /
Segitiga heksagonal memiliki panjang sisi 2 - 2 segi enam diperlukan untuk membuat satu sisi. Segitiga heksagonal dengan panjang sisi 1 hanya berupa segi enam tunggal, dan segi enam dengan panjang sisi 0 kosong.
Lebih formal, segitiga heksagonal adalah segitiga yang terbuat dari segi enam yang dihubungkan oleh sisinya. Hexagon atas menghubungkan ke dua di bawahnya di dua sisi bawahnya. Segitiga di kiri bawah tautan ke yang di kanan dan atas-kanan, dan yang di kanan bawah tautan ke yang di kiri dan atas. Ada segi enam di antara yang sudut, terhubung oleh sisi yang berlawanan, dan jumlahnya n-2
. Segitiga tidak terisi.
Lebih banyak contoh:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
sumber
Jawaban:
Arang ,
624339 byteCobalah online! Sunting: Menyimpan beberapa byte berkat hanya @ ASCII (tidak yakin persis berapa banyak saya juga menyimpan
610 byte lain tetapi kemudian harus menghabiskan 4 byte pada perbaikan bug). Sekarang menggunakan loop bersarang, itulah yang seharusnya terjadi.sumber
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(arang btw otomatis melengkapi semua yang dibutuhkan»
di akhir)Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
, masing-masing untuk loop menarik satu sisiPython 2,
184177174164 byteCobalah secara Online!
-7 byte berkat Ørjan Johansen
sumber
|
s paling kanan di tiga teratas dan baris segi enam bawah.p[:4]*(i+2)
bukannyap[:4]*(i+1)
tampaknya memperbaikinya.b
di satu tempat, jadi gabungkan dengan~
trik Anda ,w=' '*2*~(i-n)
7 byte lebih pendek.JavaScript (ES6), 243 byte
sumber
JavaScript (ES6),
133129128126 byteMembangun karakter keluaran dengan karakter dengan dua untuk loop.
Bagaimana itu bekerja
Dalam loop luar, y iterates dari n * 2-1 untuk -1 . Di loop dalam, x iterasi dari n * 4-1 ke -1 . Kami menetapkan k = (x + y) & 3 , yang merupakan pola dasar yang digunakan untuk menghasilkan hexagon.
Di bawah ini adalah kisi yang dihasilkan untuk n = 4 :
Pada baris genap, sel diisi dengan karakter pipa ketika k = 3 , dan spasi sebaliknya. Pipa adalah karakter ke-5 dalam string referensi kami
" \ /|"
, jadi indeks yang benar diberikan oleh (k + 1) & 4 .Pada baris ganjil, setiap sel diisi secara langsung dengan karakter yang sesuai dalam string referensi:
Di bawah ini adalah contoh kami yang diperbarui (spasi diganti dengan titik-titik):
Dalam rumus berikut, kami mendefinisikan N = n * 4 untuk keterbacaan (meskipun variabel yang sama digunakan dalam kode).
Bentuk segitiga diperoleh dengan menguji:
Dan bagian dalam dihapus dengan pengujian:
Demo
Tampilkan cuplikan kode
sumber
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
bekerja?(x+y+1)&4
tidak sama dengan(((x+y)&3)+1)&4
.Jelly ,
6261 byteSaat ini mengandung enam enam.
Cobalah online!
Bagaimana?
sumber
>
dalam penjelasan (<space
)ẋ
ruang di bawah dalam penjelasan tidak selaras", beri tahu saya.Pyth , 82 byte
Cobalah online!
sumber
Mathematica, 155 byte
dengan
\n
diganti dengan baris baru.Lebih mudah dibaca:
Membuat array karakter, diindeks oleh i dari 1 hingga 4 n + 1 secara horizontal dan j dari 1 hingga 2 n + 1 secara vertikal. Pertama,
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
mengisi kotak heksagonal:kemudian
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
ganti ini dengan di" "
luar segitiga yang tidak terisi.sumber