Hasilkan Koch Snowflake
Kepingan salju Koch adalah segitiga yang untuk masing-masing n
, titik sama sisi lainnya ditambahkan di tengah masing-masing sisi: http://en.wikipedia.org/wiki/Koch_snowflake#Properties
Kami sudah punya kolmogrov-kompleksitas Koch Snowflake tantangan untuk n=4
. Tantangan baru adalah menggambar kepingan salju Koch dengan n
antara 1
dan 10
.
Aturan
Kepingan salju mungkin tidak di-hardcode dalam program atau file - mereka harus dihasilkan oleh program Anda.
Program Anda harus mendukung semua ukuran
n
antara 1 dan 10.Jumlah sisi harus dimasukkan oleh pengguna melalui std-in.
Anda harus mencetak representasi grafis kepingan salju ke layar.
Cicipi Koch Snowflakes dengan jumlah n
sama dengan 1, 2, 3, dan 4 (garis hijau untuk kejelasan saja, jangan mereproduksinya):
Dalam hal tie-breaker, program dengan jumlah upvote terbanyak menang (kontes pop).
sumber
n=7
, Anda tidak dapat melihat segitiga yang baru ditambahkan di kepingan salju di layar komputer. Apakah "upaya terbaik" di sini baik-baik saja? Apakah ada resolusi minimum untuk solusi berbasis piksel?Jawaban:
Mathematica 72
n = 3
Terima kasih untuk alephalpha.
sumber
AnglePath
dalam Mathematica 10.1.Graphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
MATLAB,
119115Dalam pergantian kejadian yang tidak biasa, saya menemukan bahwa program ini benar-benar bekerja lebih baik ketika saya bermain golf. Pertama, menjadi lebih cepat karena vektorisasi. Sekarang, ini menampilkan prompt yang membantu
~n:~
mengingatkan pengguna tentang jumlah yang akan dimasukkan!Baris baru bukan bagian dari program.
n = 9:
o
adalah string arbitrer yang sama dengan[0 2 4 0]
modulo 6. e iπ / 3 dinaikkan ke kekuatan ini memberikan simpul segitiga sama sisi pada bidang kompleks. Yang pertamakron
digunakan untuk membuat salinan daftar poin dengan masing-masing digandakan 4 kali.~~o
adalah cara mudah untuk mendapatkan 4 vektor. Kedua,diff(P)
temukan vektor di antara setiap pasangan titik berurutan. Kelipatan vektor ini (0, 1/3, (1 + e -iπ / 3 ) / 3, dan 2/3) ditambahkan ke masing-masing poin lama.sumber
T-SQL: 686 (tidak termasuk pemformatan)
Untuk SQL Server 2012+.
Meskipun ini tidak akan pernah menjadi pesaing, saya harus melihat apakah saya bisa menyelesaikannya dalam T-SQL. Pergi untuk pendekatan dimulai dengan tiga tepi awal, kemudian berulang melalui setiap tepi dan menggantinya dengan 4 tepi untuk setiap level. Akhirnya penyatuan semuanya menjadi geometri tunggal untuk level yang ditentukan untuk @i
sumber
LOGO: 95
Menentukan fungsi
k
dengan parameter level tunggal.Edit
Di editor online ini http://www.calormen.com/jslogo/ Anda dapat menambahkan
k readword
untuk menggunakan prompt untuk input, tetapi karena alasan tertentu perintah ini tidak mendukung singkatan standarrw
.Solusi 102 karakter di bawah ini berfungsi di USBLogo dengan input standar seperti yang ditentukan dalam pertanyaan. Namun kode ini memerlukan sedikit perubahan karena UCBLogo memiliki beberapa pengurai yang aneh. Ini membutuhkan
to
danend
berada di garis dan ruang terpisah sebelum:
diperlukan tetapi di sisi lain:
adalah opsional.sumber
BBC BASIC, 179
REV 1
Seperti sebelumnya, tetapi dalam versi hitam dan putih, dalam versi ungolfed (tapi ramping) dan golf. Bukan seorang pemenang, terlepas dari kenyataan bahwa melakukannya adalah cara menghindari perlunya treament khusus untuk n = 1.
REV 0
Menurut jawaban OP untuk @xnor, diisi dengan kepingan salju OK. Jawaban ini terinspirasi oleh komentar xnor. Warnanya hanya untuk bersenang-senang dan menunjukkan cara pembuatannya. Ambil sebuah segitiga (magenta dalam kasus ini) dan overplot dengan 6 segitiga 1/3 dari dasarnya.
sumber
Mathematica - 177
Klip bonus memvariasikan sudut bagian tengah
sumber
Python 3 - 139
Menggunakan perpustakaan grafis penyu.
sumber
"G">j
,"Q"<j
dan menggunakannyafd(9/b)
untuk menyimpan 3 byte? Selain itu, Anda dapat menghindariif
penggandaan pernyataan, misalnya("G">j)
dengan argumen9/b
dan menempatkan semuanya dalam satu baris di belakangfor
. Oh! Kemudian Anda bahkan dapat menggabungkanrt
danlt
menggunakan120*(...)-60*(...)
Python 3, 117 byte
Metode:
n
adalahinput - 1
0000
kita gabungkan setiap karakter dengan101
n
waktu iteratif dengan trik eval (terima kasih kepada @xnor untuk itu).1
atau0
) dan kemudian bergerak maju panjang (99/3^n
) yang menjamin ukuran yang sama untuk semuan
.0
dalam string tidak akan berguna tetapi hanya menggambar ulang garis yang sama dengan yang pertama kali0
diundi.Contoh output untuk
input = 3
:sumber
R:
240175Karena saya mencoba untuk mendapatkan kepalaku di sekitar R, inilah versi lain. Mungkin ada banyak cara yang lebih baik untuk melakukan ini dan saya senang menerima petunjuk. Apa yang saya lakukan tampaknya sangat berbelit-belit.
sumber
Wise fwom youw gwave ...
Saya tahu saya ingin mencoba mengimplementasikan ini di Befunge-98 menggunakan TURT, tapi saya tidak tahu bagaimana cara melakukannya dan saya duduk di sana selama beberapa bulan. Sekarang, hanya baru-baru ini, saya menemukan cara untuk melakukannya tanpa menggunakan modifikasi diri! Dan sebagainya...
Befunge-98 dengan sidik jari TURT, 103
Mari kita dapatkan detail implementasi terlebih dahulu:
I
"mencetak" gambar ke file SVG. Jika Anda menjalankan ini di CCBI tanpa argumen-perintah--turt-line=PATH
, itu akan keluar sebagai file bernama CCBI_TURT.svg secara default. Ini yang paling dekat dengan saya "mencetak representasi grafis kepingan salju ke layar" dengan juru bahasa Funge yang tersedia yang bisa saya temukan. Mungkin suatu hari akan ada penerjemah yang lebih baik di luar sana yang memiliki tampilan grafis untuk kura-kura, tetapi untuk sekarang ...Pada dasarnya, ini bekerja dengan menggunakan stack sebagai semacam L-system darurat dan memperluasnya dengan cepat. Pada setiap kartu, jika nomor teratas di tumpukan adalah:
f
pada baris terakhir);n-1, -1, n-1, 0, n-1, -1, n-1
.Sebab
n = 10
, proses ini membutuhkan waktu yang sangat lama (beberapa menit pada sistem saya), dan SVG yang dihasilkan adalah ~ 10MB dalam ukuran dan tidak terlihat ketika dilihat di browser karena Anda tidak dapat menyesuaikan ukuran sikat menggunakan TURT. IrfanView tampaknya berfungsi dengan baik jika Anda memiliki plugin yang tepat. Saya tidak terlalu terbiasa dengan SVG, jadi saya tidak tahu apa metode yang disukai untuk melihat file-file itu (terutama ketika mereka sangat besar).Hei, setidaknya itu berfungsi - yang, mengingat itu Befunge, adalah sesuatu yang harus disyukuri sendiri.
sumber
Python 2, 127 byte
sumber