The kurva Hilbert adalah mengisi fraktal ruang yang dapat diwakili sebagai sistem Lindenmayer dengan generasi-generasi yang terlihat seperti ini:
Berkat http://www.texample.net/tikz/examples/hilbert-curve/ untuk gambar.
Tujuan
Tuliskan program sesingkat mungkin (dalam byte) yang mengambil bilangan bulat positif dari stdin dan menggambar kurva Hilbert urutan ke-5 dengan menggunakan hanya garis miring, garis miring, spasi, dan baris baru.
Misalnya, jika inputnya adalah 1
output harus
\
\/
Jika inputnya adalah 2
output harus
/
\/\
/\ \
/ /\/
\ \
\/
Jika inputnya adalah 3
output harus
\
/\/
/ /\
\/\ \ \
/\ / / /
/ / \/ \/\
\ \/\ /\ \
\/ / / / /\/
/\/ / \ \
\ \/\ \/
\/\ \
/ /\/
\ \
\/
Dan seterusnya. (Mereka terlihat lebih bagus jika Anda menempelkannya ke sesuatu dengan jarak garis yang lebih sedikit.)
Output tidak boleh mengandung baris baru di atas atau di bawah ekstremitas kurva, atau spasi tambahan pada garis apa pun.
.map(&:rstrip)
harus ditambahkan untuk memenuhi persyaratan "tidak ada spasi tambahan".x
dan mempersingkat penugasan key
dand
, dengan total 205 karakter (lihat tautan yang sama seperti sebelumnya).Python, 282
Ini menggunakan pendekatan rekursif untuk membangun kurva urutan Hilbert ke-n dari kurva sebelumnya. Kurva direpresentasikan sebagai susunan numpy 2d untuk pengirisan dan manipulasi yang lebih baik.
Berikut ini beberapa contohnya:
sumber
Malsys -
234221 karakterSaya mencium beberapa sistem L di sini :) Malsys adalah penerjemah L-sistem online. Ini bukan entri yang benar-benar serius tetapi saya merasa solusi ini agak menarik.
Sintaks dari Malsys tidak benar-benar baik untuk bermain golf karena mengandung banyak kata kunci yang panjang tapi tetap saja, ini cukup pendek, mudah dibaca, dan ekspresif.
http://malsys.cz/g/3DcVFMWn
Penerjemah: http://malsys.cz/Process
Versi golf:
Dan bagaimana dengan kurva Gosper heksagonal Ascii? :)
http://malsys.cz/g/ae5v5vGB
sumber
JavaScript (ES6) 313
340Sunting Beberapa karakter yang dihapus menggunakan praktik yang benar-benar buruk - seperti variabel global, bukan nilai balik dari fungsi H
Mengkonversi x, posisi y ke jarak d (lihat Wikipedia ) untuk setiap x, y dan memverifikasi jika posisi terdekat terhubung,
Tes di konsol FireFox. Input melalui popup, output melalui console.log.
Tidak ada spasi tambahan dan tidak ada baris baru di atas atau di bawah gambar. Tapi setiap baris diakhiri dengan baris baru, saya pikir itu cara yang tepat untuk membuat gambar seni Ascii.
sumber
alert
alih-alihconsole.log
. Anda juga memiliki ruang ekstra setelahfor
pada baris keempat, dan Anda harus dapat menyingkirkan jeda baris terakhir.Perl, 270 Karakter
Super golf
Tidak terlalu banyak bermain golf
Mungkin bisa menurunkannya jika saya lebih memahami Perl. Menggunakan pendekatan sistem Lindenmayer menggunakan aturan produksi yang didefinisikan pada baris 1.
sumber
APL (Dyalog Unicode) , 90 byte SBCS
Cobalah online!
2 2⍴0
sebuah matriks 2x2 nol{ }⍣⎕
masukan N dan terapkan fungsi N kali⍵,⍨-⊖⍵
menyatukan salinan matriks yang dibalik dan dinegasikan secara vertikal ke kiri matriks(2×s←⍴⍵)↑
pad dengan nol sehingga dimensi (dikenang sebagais
) dua kali argumen¯.5×≢⍵
putar ke bawah untuk memusatkannya secara vertikal, diapit di antara nol bantalan2@(¯1 0+3 1×s÷2)
Letakkan 2-s di lokasi tertentu - ini adalah garis miring yang menghubungkan antara instance fraktal yang lebih kecil(⊢+⍉)
tambahkan matriks dengan diri yang ditransformasikan3|
modulo 3; kami menggunakan negasi, jadi harap perhatikan bahwa -1≡2 (mod 3) dan -2≡1 (mod 3)' /\'[ ]
gunakan elemen matriks sebagai indeks dalam string' /\'
1↓∘⍉∘⌽⍣4
potong margin kosong selebar 1 elemen dari semua sisi↓
terpecah menjadi garis-garis' +$'⎕r''¨
hapus spasi tambahan dari masing-masing (tantangan ini mengharuskannya)⎕∘←¨
output masing-masingsumber