Hilbert Curve adalah jenis kurva pengisian ruang, dan pada dasarnya memetakan garis ke pesawat. Setiap titik dalam garis hanya bersesuaian dengan satu titik di bidang, dan setiap titik di bidang tersebut bersesuaian dengan hanya satu titik pada garis. Yang ditampilkan adalah iterasi 0 hingga 4 dari Kurva Hilbert:
Iterasi 0 hingga 4:
Tujuan dari tugas ini: Tulis kode yang menggambarkan iterasi keempat Kurva Hilbert, sebagaimana didefinisikan di atas. Kode Anda harus lengkap - dengan kata lain, jika Anda membuat fungsi untuk menggambar Kurva Hilbert, kode Anda harus memanggil fungsi itu. Outputnya dapat ditampilkan langsung di layar, atau Anda dapat menulis output ke file gambar. Kurva dapat diputar atau dibalik, tetapi garis harus berpotongan pada sudut kanan dan output tidak dapat ditarik. Seni ASCII dihargai tetapi tidak akan diterima. Kode terpendek dalam byte menang!
sumber
Jawaban:
R, 90 byte
Shameless R-port dari algoritma yang digunakan dalam tautan yang diposting oleh @Luis Mendo.
Untuk
n=5
kita dapatkan:sumber
MATL ,
3938 byteIni mengambil jumlah iterasi sebagai input. Jika Anda ingin hard-code-nya, ganti
i
dengan nomornya.Program ini adalah port dari kode Matlab oleh Jonas Lundgren yang ditampilkan di sini .
Hasilnya ditunjukkan di bawah ini. Anda juga dapat mencobanya di MATL Online! Butuh beberapa detik untuk menghasilkan output. Kompiler ini bersifat eksperimental; Anda mungkin perlu me-refresh halaman dan tekan "Run" lagi jika awalnya tidak bekerja.
Penjelasan
sumber
MATLAB,
264262161 byteIni masih sangat mirip, kecuali bahwa kita pada dasarnya menghitung "turunan" dari kurva hilbert, yang kemudian kita "integrasikan" melalui `cumsum``. Ini mengurangi ukuran kode dengan cukup banyak byte.
Versi lama
Ini hanyalah pendekatan rekursif. Saya menggunakan bilangan kompleks untuk menyimpan informasi vektor untuk kesederhanaan. Anda dapat mengubah kurva di bagian tersebut
h(0,1,1+i,4)
. Argumen pertamap=0
adalah posisi awal, argumen keduaf
adalah bendera untuk orientasi (+1
atau-1
), argumen ketigad
adalah arah / rotasi di mana kurva harus digambar dan yang keempatl
adalah kedalaman rekursi.Ini seperti apa di versi yang lebih lama:
Seperti di 2015b:
->sumber
cumsum
ide yang hanya brilian!MATLAB / Oktaf, 202 byte
Saya melihat versi @LuisMendo terkait
yaituadalah cara lebih pendek dari sebelumnya solusi "buatan tangan" tetapi menggunakan pendekatan yang sama sekali berbeda. Saya memposting versi golf di sini sekarang sebagai CW:Versi ini didasarkan pada pendekatan sistem Lindenmayer:
sumber
JavaScript (ES6),
266...233232 byteRender SVG dari Kurva Hilbert.
Disimpan 1 byte berkat Neil
sumber
fill=none
Python 3,
177175171 byteImplementasi sederhana dari sistem Lindenmayer untuk kurva Hilbert. Selamat datang saran bermain golf!
Edit: -2 byte terima kasih kepada Kade. -3 byte dari restrukturisasi bagaimana kurva Hilbert dibangun. -1 byte dengan terima kasih kepada ETHproductions.
Tidak melakukanolf
sumber
t
dapat menyimpan dua byte:t+=[[c,"+AF-BFB-FA+"][c=="B"],"-BF+AFA+FB-"][c=="A"]
. Karena polanya hampir sama untuk mereka berdua, saya ingin tahu apakah ada cara untuk menggunakannya ..if c>"E":
menjadiif"E"<c:
untuk menyimpan byte?MSWLogo (Versi 6.5b), 136 byte
Berdasarkan program kurva Hilbert akhir di sini .
Suatu fungsi
h
didefinisikan, yang mengambil jumlah iterasi:n
(berbasis 1), sudut:a
, panjang:l
. Itu rekursif, memanggil iterasi yang lebih rendah dari dirinya sendiri dengan sudut:a
dinegasikan dalam dua contoh untuk mendapatkan orientasi yang benar.rt :a
,lt :a
putar kura-kura (benda segitiga yang jalurnya dilacak) ke kanan, sedikit demi sedikit:a
.fd :l
menggerakkan penyu dengan:l
langkah-langkah.Akhirnya, fungsi ini dipanggil:
h 5 90 9
. Penyu bisa disembunyikan selama 2 byte ekstraht
,.sumber
ht
.Mathematica 128 Bytes
Ganti 4 di atas dengan jumlah iterasi yang berbeda jika Anda mau.
Dilakukan sebagai sistem Lindenmayer dengan urutan bilangan bulat dan bukan urutan string sehingga aturan produksi kedua hanyalah negatif dari aturan pertama. Versi ini adalah 151 byte.
Port kode MATLAB Jonas Lundgren hanya 128 byte.
Saya melihat bahwa dalam versi Mathematica yang akan datang, ini mungkin menjadi sangat singkat, seperti:
http://mathworld.wolfram.com/HilbertCurve.html
sumber
LindenMASM , 63 Bytes
Pertanyaan lain dengan jawaban LindenMASM? Luar biasa!
Sekali lagi, karena beberapa bug menggambar dengan Python
turtle
, kadang-kadang ketika Anda menjalankan ini seluruh gambar tidak ada. Namun Anda dapat melihatnya benar-benar berfungsi:sumber