The Koch snowflake (juga dikenal sebagai bintang Koch dan pulau Koch) adalah kurva matematika dan salah satu kurva fraktal awal telah dijelaskan. Hal ini didasarkan pada kurva Koch, yang muncul dalam makalah 1904 berjudul "Pada kurva kontinu tanpa garis singgung, dapat dibangun dari geometri dasar" (judul Prancis asli: "Sur une courbe melanjutkan sans tangente, lihat par une konstruksi géométrique élémentaire") oleh matematikawan Swedia Helge von Koch.
Berikut adalah beberapa representasi ascii dari berbagai iterasi:
n=1
__
\/
n=2
__/\__
\ /
/_ _\
\/
n=3
__/\__
\ /
__/\__/ \__/\__
\ /
/_ _\
\ /
__/ \__
\ /
/_ __ __ _\
\/ \ / \/
/_ _\
\/
Karena jelas ada batas untuk resolusi representasi ascii, kita harus memperbesar ukuran kepingan salju dengan faktor 3 untuk setiap iterasi untuk menunjukkan detail ekstra.
Tulis kode terpendek untuk menampilkan kepingan salju dengan gaya yang sama untuk n = 4
Program Anda seharusnya tidak mengambil input apa pun.
Program Anda harus menulis kepingan salju ke konsol.
sumber
Jawaban:
Python, 338 byte
Hanya eksploitasi unicode lain
lari pada ideone
sumber
Python,
650612594574 karakterIni bekerja dengan memperluas segitiga dengan faktor 3 setiap kali. Untuk melakukan itu, kita perlu melacak apakah setiap simbol adalah batas kiri atau kanan (misalnya bagaimana
/
diperluas tergantung pada sisi mana yang/
merupakan bagian dalam). Kami menggunakan simbol yang berbeda untuk dua kemungkinan kasus, sebagai berikut:The
d
variabel menangani kasus khusus di mana perluasan suatua
kebutuhan untuk memperluas ke 3x3 di baris berikutnya.sumber
('acEei',r'_/\\ ')
=>('aecEi','_\/\ ')
menyimpan 1 lagi. Anda mungkin juga ingin memeriksaunicode.translate()
.Kode mesin MS-DOS 16 bit: 199 byte
Decode menggunakan situs ini , simpan sebagai file 'koch.com' dan jalankan dari command prompt WinXP.
Memperbarui
Berikut ini adalah versi assembler yang mudah dibaca:
sumber
"scAA...w==".decode("base64")
untuk mendekode di Python2 (tidak berfungsi untuk Python3)Perl,
176175 bytePosting ini sebagai jawaban terpisah karena menggunakan file sumber biner, yang mungkin agak curang. Tapi mengingat itu masih kode sumber Perl , saya pikir itu luar biasa bahwa itu mengalahkan solusi kode mesin MS-DOS !
Sumber sebagai base64-encoded
Agak lebih mudah dibaca
Ganti semua instance
/<[0-9a-f]+>/
dengan data biner yang relevan:Dalam versi ini, kepingan salju dikodekan dengan cara berikut:
8 bit dalam setiap byte dibagi seperti ini:
R
mengkodekan serangkaian spasi. Run terpanjang adalah 27 karakter, jadi semua run masuk ke dalam 5 bit.C
mengkodekan urutan karakter yang hanya dilihat dalam array literal. (Dulu saya memiliki penyandian sedikit lebih gila di sini di mana array hanya berisi/ \ _
, tetapi kode Perl yang diperlukan untuk memecahkan kode itu lebih lama ...)Saya beruntung bahwa data biner tidak mengandung
"
/'
atau\
yang perlu melarikan diri. Saya tidak berencana untuk ini. Tetapi bahkan jika itu terjadi, saya mungkin bisa saja mengubah urutan item dalam array untuk memperbaikinya.Sungguh menakjubkan betapa sederhananya solusi ini dibandingkan dengan puluhan solusi lain yang saya lalui sebelum saya menemukan ini. Saya bereksperimen dengan banyak pengkodean bitwise berbeda yang lebih kompleks daripada yang ini, dan tidak pernah terpikir oleh saya bahwa yang lebih sederhana mungkin sepadan hanya karena kode Perl untuk memecahkan kode akan lebih pendek. Saya juga mencoba untuk mengompresi pengulangan dalam data menggunakan interpolasi variabel (lihat jawaban lain), tetapi dengan versi terbaru yang tidak mendapatkan karakter apa pun lagi.
sumber
Python, 284
Dengan spasi lebih sedikit:
Sisi kiri dikompresi; sisi kanan direproduksi dari sisi kiri.
sumber
Perl,
224223 karakterAgak lebih mudah dibaca
Bagaimana itu bekerja
Untuk penjelasan tentang cara kerjanya, lihat jawaban lain di mana saya memposting yang sama dalam biner . Saya benar-benar menyesal bahwa saya tidak benar-benar menghasilkan kepingan salju Koch, hanya mengompresnya ...
Versi sebelumnya
(359) Menyandikan seluruh kepingan salju alih-alih hanya setengah yang tersisa. Spasi dimasukkan dalam pengkodean bit; belum ada run-length. Digunakan beberapa variabel interpolasi ditambah
@_
array yang diakses menggunakans/\d/$_[$&]/eg
. Baris baru dikodekan sebagai!
.(289) Versi pertama yang disandikan hanya setengah dari kepingan salju.
(267) Versi pertama yang menggunakan pengkodean run-length untuk spasi.
(266) Ubah
' '
ke$"
.(224) Kompresi yang sangat berbeda, dikodekan sebagai basis-64. (Sekarang setara dengan versi biner .)
(223) Menyadari bahwa saya dapat meletakkan cetakan di dalam subtitle terakhir dan dengan demikian menyimpan tanda koma.
sumber