Tulis program atau fungsi yang menghasilkan bilangan bulat positif N dan buat ulang pola lingkaran ini agar sesuai dengan gambar piksel N × N:
Gambar ini adalah contoh output yang valid untuk N = 946.
Jika tidak jelas, semua lingkaran kecil biru muda memiliki jari-jari yang sama dan diposisikan di empat lingkaran biru tua dengan cara yang sama. Lingkaran biru gelap memiliki dua kali lipat jari-jari itu dan diposisikan serupa di lingkaran biru muda yang besar.
Dua warna yang berbeda secara visual dapat digunakan sebagai pengganti dua warna biru.
Latar belakang persegi memang perlu diwarnai.
Anti-aliasing adalah opsional.
Simpan gambar ke file, tampilkan, atau pipa data gambar mentah ke stdout.
Semua format file gambar umum diperbolehkan.
Kode terpendek dalam byte menang.
Brownie menunjuk jika Anda memperluas aspek rekursif dari pola lingkaran ini ke level lebih lanjut. (Simpan berbeda dari entri tantangan Anda.)
sumber
Jawaban:
CJam, 83 byte
Cobalah online
CJam tidak memiliki fungsi output gambar khusus. Kode saya menghasilkan gambar dalam PBM ASCII. Untuk posting, saya mengonversi gambar itu ke PNG menggunakan GIMP.
Perhatikan bahwa tidak ada fungsi menggambar lingkaran, atau sesuatu seperti itu, yang digunakan. Gambar dihitung piksel demi piksel.
Derajat yang lebih tinggi dari subdivisi dapat dengan mudah dibuat dengan meningkatkan konstanta di
3
sekitar tengah kode.Gambar derajat 4 dan 5 terlihat seperti ini:
Urutan keseluruhan kode adalah:
Penjelasan:
sumber
Python 2 + PIL, 262 byte
Pendekatan ini menentukan warna masing-masing piksel koordinat menggunakan fungsi rekursif
c
.c(x,y,0)
merender lingkaran;c(x,y,1)
membuat lingkaran dengan empat lingkaran terpotong darinya;c(x,y,2)
merender gambar dalam OP. Apa pun yang lebih besar dari 2 memberi saya poin brownies.Versi non-golf:
Bonus gambar ekstra rekursif:
sumber
.save("p.png")
hanya menggunakan.show()
PostScript, 335 byte.
PostScript bukan hanya format file grafik dengan kemampuan vektor dan bitmap, itu sebenarnya bahasa pemrograman Turing-complete berbasis objek. Kode di atas adalah implementasi fungsi rekursif yang cukup mudah. Semua operator PostScript adalah fungsi, dan sudah biasa untuk mendefinisikan ulang mereka untuk menyingkat kode. Perhatikan bahwa PostScript menggunakan notasi Reverse Polish (alias notasi postfix).
Penerjemah PostScript umumnya membaca metadata (seperti ukuran dan judul halaman) dari komentar khusus pada awal file; jelas saya sudah menghapus semua kecuali tanda tangan penting komentar PostScript
%!
dari entri saya, tetapi harus tetap menampilkan ok di penerjemah PostScript standar, misalnya GhostScript atau Okular. Itu juga dapat dilihat menggunakan utilitas tampilan yang dilengkapi dengan ImageMagick / GraphicsMagick.Perhatikan bahwa file tersebut harus diakhiri dengan baris baru (yang sudah saya sertakan dalam jumlah byte saya), atau penerjemah mungkin kesal.
Parameter ukuran
N
untuk kode ini adalah 512; dibagi 2 dan digandakan dua kali untuk membuat parameter untuk panggilan awal dari fungsi rekursiff
. Kedalaman rekursi adalah 2, yang diberikan tepat sebelumf
masuk512 2 div dup dup 2 f
. Untuk menjaga ukuran kecil outputnya hitam & putih. Meskipun Anda dapat mengatur kedalaman rekursi integer non-negatif yang masuk akal, versi ini hanya terlihat bagus dengan kedalaman genap.Gambar ini adalah grafik vektor, sehingga dapat ditampilkan dalam resolusi apa pun tanpa pikselisasi, tergantung pada kualitas & pengaturan juru bahasa / printer PostScript yang digunakan. (FWIW, PostScript menggunakan kurva kubik Bézier untuk menggambar busur lingkaran, dengan splines yang cukup digunakan untuk memastikan bahwa kesalahan selalu kurang dari satu piksel dalam ruang perangkat). Untuk melihatnya menggunakan layar ImageMagick dalam kualitas yang cukup tinggi, Anda dapat melakukan:
parameter yang sama juga baik jika Anda ingin menggunakan ImageMagick
convert
untuk mengubahnya ke format lain. Misalnya, inilah versi 640x640 dari kode PostScript di atas yang dikonversi ke PNG:Berikut adalah versi yang sedikit lebih besar yang menangani warna RGB dan kedalaman rekursi yang aneh:
Ini juga memungkinkan Anda untuk mengatur parameter ukuran
N
dan kedalaman rekursi did
dekat bagian atas skrip.Akhirnya, inilah bentuk kode yang lebih mudah dibaca. (Sayangnya, penyorotan sintaks yang digunakan di sini untuk PostScript meninggalkan banyak hal yang diinginkan, tapi saya rasa itu lebih baik daripada tidak sama sekali ...). Penerjemah Smart PostScript akan membaca geometri halaman dari
%%BoundingBox:
komentar khusus.Dan inilah kedalaman == 4 keluaran dalam format PNG, sekali lagi dibuat menggunakan convert (dan dioptimalkan dengan optipng ):
sumber
Python 2 + PIL, 361 byte
Menyimpan gambar dalam hitam putih ke file
c.png
:Saya pada dasarnya menghasilkan salah satu lingkaran berukuran setengah dalam gambar
J
. Saya kemudian menggunakan dirinya sebagai topeng untuk melukis bentuk ke gambarI
, yang memiliki lingkaran utama.Itu bisa disingkat menggunakan
I.show()
pada akhir, bukanI.save("c.png")
, tapi saya tidak membuatnya bekerja pada Python 2. Jika seseorang dapat mengonfirmasi itu berfungsi pada Python 2 saya akan mengubah itu.Program berikut menghasilkan gambar seperti pada pertanyaan (419 byte):
sumber
save
.SVG (1249 karakter)
Ya, banyak karakter. Tapi itu statis dan ditampilkan dalam ukuran berapa pun, sehingga memberikan beberapa bonus.
Cuplikan yang bisa dilihat:
sumber
0
konstanta floating point terkemuka ? Misalnya, ganti0.4
dengan.4
? Dalam kebanyakan bahasa, itu valid. Dan pandangan yang sangat cepat dari spesifikasi SVG menunjukkan bahwa itu mungkin harus bekerja dengan baik.Mathematica
336359 byteObjek grafik utama adalah daerah yang ditentukan melalui kombinasi logis dari persamaan.
sumber
Jawa, 550
Sebagian besar hanya bereksperimen dengan JavaFX.
Tangkapan layar:
Untuk poin brownies, ubah
2
kode (d(n,2,0,0)
) ke nomor yang berbeda.Versi lama, 810
Ini meninggalkan beberapa tepi yang tidak diinginkan seperti yang dapat Anda lihat di screenshot ini .
sumber
JavaScript (ES6), 279
Secara rekursif buat kanvas dan tambahkan kanvas anak empat kali ke kanvas induknya. Di lapisan bawah, kanvas adalah satu lingkaran; kanvas akan dicap empat kali ke kanvas orang tua, dan kemudian yang kanvas dicap empat kali ke master kanvas akhir.
Demo yang dapat dijalankan:
Tampilkan cuplikan kode
Dengan spasi putih, komentar, dan agak tidak bercampur:
Ini dapat dengan mudah menghasilkan lapisan rekursi yang lebih dalam dengan mengubah nilai awal
o-2
atauo-z
nilai yang lebih besar.Perhatikan bahwa pengiriman ini hanya akan berjalan di Firefox, karena penggunaan fitur ES6 dan inkonsistensi dalam API kanvas untuk
fill
danclip
argumen.sumber