Joe tinggal di Bahama. Ini musim dingin. Anak-anaknya kecewa karena tidak ada salju. Joe perlu membuat salju untuk anak-anaknya. Untungnya, ia memiliki printer 3-d. Dia berencana membuat kepingan salju dengan itu. Sayangnya dia tidak tahu bagaimana bentuk kepingan salju. Bahkan, dia belum pernah melihat serpihan salju! Mari kita bantu dia dengan membuat program yang secara otomatis menghasilkan gambar salju 2d untuknya.
Memasukkan
Diameter gambar (dalam piksel), persentase gambar yang sebenarnya adalah kepingan salju.
Keluaran
Gambar kepingan salju dengan diameter yang diperlukan. Itu dapat disimpan ke file atau ditampilkan kepada pengguna.
Spesifikasi
Buat irisan yang memiliki sudut 30 derajat. Buat Pohon Brown dengan benih awal pada titik irisan. Refleksikan irisan di sekitar tengah gambar 12 kali untuk menghasilkan sisa gambar. Kepingan salju memiliki warna Putih. Latar belakang memiliki warna Hitam.
Mencetak gol
Karena kenyataannya ada berbagai cara untuk menghasilkan Pohon Brown, skornya adalah 10 * jumlah upvote - skor golf.
Skor golf didefinisikan sebagai jumlah byte dalam program dengan bonus berikut:
-20% Dapat secara sewenang-wenang menentukan simetri kepingan salju.
-50% Dapat menentukan bentuk kepingan salju. (Dengan bisa menentukan rasio panjang sisi wedge.)
Kemenangan skor tertinggi.
Berikut ini gambar bentuk wedge dengan perbandingan kira-kira 2:
Papan angka:
Martin Buttner: 10 * 14 - 409 = -269
Nimi: 10 * 1 - 733 * .5 = -356.5
Pengoptimal: 10 * 5 - 648 = -598
Pemenangnya adalah Martin dengan skor -269!
sumber
Jawaban:
Mathematica, 409 byte
Tidak Disatukan:
Ini mengharapkan input bentuk di
{n,p}
manan
ukuran gambar dalam piksel, danp
merupakan persentase dari gambar yang akan ditutupi oleh kepingan salju.Dibutuhkan sekitar setengah menit untuk menghasilkan kepingan salju dengan parameter yang diberikan. Anda dapat mempercepatnya dengan mengubah nilai
m
dari999
menjadi99
, tetapi hasilnya terlihat agak jarang. Demikian juga, Anda dapat meningkatkan kualitas dengan menggunakan angka yang lebih besar, tetapi kemudian akan memakan waktu sangat lama.Saya membentuk pohon Brown pada kisi integer, menempatkan partikel baru di
{999, 0}
, dan memindahkan secara acak ke kiri dan ke atas atau ke bawah (bukan ke kanan), sampai mereka mengenai partikel yang ada. Saya juga membatasi gerakan ke irisan antara 0 dan 30 derajat. Akhirnya, saya merefleksikan irisan itu pada sumbu x, dan menampilkannya dengan 5 putarannya.Berikut beberapa hasil (klik untuk versi yang lebih besar):
Dan inilah dua animasi dari pertumbuhan pohon Brown (10 partikel per irisan per bingkai):
sumber
JavaScript, ES6,
799 740 695 658648Saya hanya menghitung dua tag kanvas dan fungsi
f
dari cuplikan di bawah ini sebagai bagian dari jumlah byte. Sisa barang adalah untuk demo langsungUntuk menyaksikannya beraksi, jalankan cuplikan di bawah ini di Firefox terbaru yang memberikan ukuran dan rasio melalui kotak input
Perhatikan bahwa Anda harus menyembunyikan hasilnya lalu tampil lagi sebelum kepingan salju berturut-turut
Berikut adalah beberapa contoh render dengan ukuran dan persentase yang berbeda. Yang terbaik disebut SkullFlake (pertama dalam daftar). Klik gambar untuk melihatnya dalam resolusi penuh.
Banyak bantuan dan masukan dari Martin dan githubphagocyte.
sumber
Haskell,
781733 BytesProgram ini menampilkan opsi "tentukan rasio panjang sisi wedge", jadi Anda harus menyebutnya dengan tiga argumen baris perintah:
Argumen # 1 adalah ukuran gambar, # 2% dari piksel dalam irisan dan # 3 panjang (dalam%) dari sisi yang lebih pendek dari irisan. Gambar disimpan dalam file yang disebut "o.png".
150-50-40:
Program saya menghasilkan kepingan salju dengan paku cut-off, karena piksel baru mulai pada sumbu tengah wedge (titik hijau, lihat di bawah) dan cenderung tetap di sana, karena mereka bergerak secara acak ke kiri, ke atas atau ke bawah. Karena piksel di luar baji dibuang, garis lurus muncul di batas baji (panah hijau). Saya terlalu malas untuk mencoba jalur lain untuk piksel.
150-50-40:
Ketika baji cukup besar (argumen ke-3 100) lonjakan pada sumbu tengah dapat tumbuh dan kemudian ada 12 dari mereka.
150-40-100:
Beberapa piksel membuat bentuk bundar (kiri: 150-5-20; kanan 150-20-90).
Program:
sumber
*-*-100
gambar kedua sisi mencapai ke batas kiri gambar (lihat gambar kedua untuk posisi irisan). Ada piksel di sekitar setengah dari sisi - bagian lainnya kosong.code style
. Saya telah mengedit posting saya dan mengatur Tab, tetapi masih muncul sebagai spasi. Adakah yang tahu cara memperbaikinya?#
tautan hash yang bisa Anda klik. Anda dapat menempelkan kode tab di sana dan menautkannya.code style
dengan membuat indentasi setiap spasi 4 baris.Memproses 2 - 575 karakter
Mengambil file f yang baris pertama adalah ukuran gambar dan yang kedua adalah radius serpihan. Setiap kali titik baru ditempatkan, ia diputar di sekitar pusat 12 kali. Ini menciptakan efek yang sangat mirip dengan irisan yang diputar, tetapi tidak persis sama.
Anda dapat memproses di sini
sumber
color(255)
dapat menjadicolor(-1)
menghemat satu byte