Tulis program atau fungsi yang menggunakan input berikut dalam format pilihan Anda yang masuk akal:
Dua bilangan bulat positif W dan H yang menentukan lebar dan tinggi gambar yang akan Anda hasilkan.
Dua warna RGB C1 dan C2 yang akan digunakan untuk mewarnai gambar.
Daftar 3-tupel formulir
(r, x, y)
yang menentukan lingkaran dengan jari-jarir
dan pusatx, y
di bidang gambar.r
adalah bilangan bulat positif danx
dany
bilangan bulat apa saja. Pixel kiri atas gambar adalah0, 0
dan sumbu x meningkat ke kanan dan sumbu y meningkat ke bawah.
Keluarkan gambar dengan dimensi W oleh H yang diwarnai dengan C1 dan C2 sehingga tidak ada dua daerah tetangga yang ditentukan oleh semua lingkaran yang tumpang tindih dengan warna yang sama.
Misalnya: Jika inputnya adalah
W = 300 H = 200 C1 = (255, 200, 0) C2 = (128, 0, 255) Circles = (25, 50, 80), (40, 80, 120), (300, -100, 6), (17, 253, 162)
maka batas lingkaran terlihat seperti ini:
Ada enam wilayah berbeda yang bersebelahan dalam gambar yang dibuat oleh lingkaran. Setiap daerah harus diwarnai dengan C1 (kuning) atau C2 (ungu) sehingga tidak ada dua daerah tetangga yang warna yang sama.
Ada dua cara untuk melakukan ini, satu-satunya perbedaan adalah bahwa warna ditukar:
Jadi, salah satu dari kedua gambar ini akan menjadi output yang valid untuk input contoh.
Sesuatu seperti ini akan menjadi keluaran yang tidak valid karena dua daerah kuning saling bertetangga.
Gambar output Anda harus mengikuti pedoman ini:
Selain C1 dan C2, warna netral ketiga seperti hitam atau putih dapat digunakan untuk batas lingkaran asalkan ketebalannya tidak lebih dari 5 piksel. (Hitam, batas tebal 1-piksel ada pada contoh di atas.)
Batas lingkaran tidak diperlukan. Daerah-daerah dapat saling bertetangga secara langsung:
Kedua hal ini merupakan keluaran yang valid untuk contoh di atas.
Lingkaran harus seakurat mungkin, menggunakan algoritme menggambar lingkaran atau apa pun yang disediakan perpustakaan grafis Anda.
Secara umum, penyempurnaan piksel tidak diperlukan, tetapi jika parameter input diskalakan lebih besar dan lebih besar, gambar yang dihasilkan harus menjadi lebih dan lebih akurat.
Anti-aliasing diizinkan tetapi tidak diperlukan.
Label garis kisi atau sumbu dll di latar belakang tidak diperbolehkan.
Kode terpendek dalam byte menang.
Lebih banyak contoh
Semua menggunakan input ini dengan rangkaian lingkaran yang berbeda:
W = 100
H = 60
C1 = (255, 0, 0)
C2 = (0, 0, 255)
Dalam contoh apa pun, warna dapat ditukar dan tetap valid.
Circles =
A. empty list
B. (13, 16, 20)
C. (30, 16, 20)
D. (200, 16, 20)
E. (42, 50, 20)
F. (42, 50, 20), (17, 40, 30)
G. (42, 50, 20), (17, 20, 30)
H. (42, 50, 20), (17, 10, 30), (10, 50, 30)
I. (42, 50, 20), (17, 10, 30), (35, 50, 20)
J. (18, 36, 40), (18, 63, 40), (18, 50, 20)
K. (100, -10, -20), (60, 50, -10)
L. (18, 36, 40), (18, 63, 40), (18, 50, 20), (14, 50, 20), (5, 50, 18), (20, 0, 0), (70, 22, 0), (10000, -9970, 0), (135, 100, -80)
A.
B.
C.
D.
E.
F.
G.
H.
I.
J.
K.
L.
Pastikan output Anda berperilaku mirip dengan semua contoh ini.
sumber
tikz
Jawaban:
Mathematica, 165 byte
Fungsi murni mengambil empat argumen: lebar, tinggi (kedua bilangan bulat), sepasang tiga kali lipat angka antara 0 dan 1 (mewakili dua warna RGB), dan daftar item formulir
{r, {x, y}}
untuk merekam jari-jari dan pusat-pusat dari lingkaran. Misalnya, contoh pertama dalam OP akan dipanggil dengan argumen[300, 200, {{1, 0.784, 0}, {0.5, 0, 1}}, {{25, {50, 80}}, {40, {80, 120}}, {300, {-100, 6}}, {17, {253, 162}}}]
. Sumbu y positif menunjuk ke atas di Mathematica.Norm[{x,y}-#2]<#
mendeteksi apakah suatu titik berada di dalam lingkaran yang diberikan;Boole[...]Pi
mengubah ituTrue
atauFalse
keπ
atau0
. Setelah menghitung πs / 0s pada semua lingkaran input,Tr
tambahkan mereka dan ubahCos
kelipatan genap π menjadi 1, kelipatan ganjil π hingga –1.ContourPlot[...,Contours->{0}]
kemudian warna wilayah yang sesuai dari pesawat dalam dua warna tergantung pada apakah nilainya lebih besar atau kurang dari0
.AspectRatio->Automatic
membuat lingkaran tampak seperti lingkaran;PlotPoints->5!
memberikan akurasi yang layak (tingkatkan ke9!
jika Anda benar-benar menginginkan gambar yang menakjubkan, jauh di masa depan!);Frame->False
menghilangkan kapak; danContourShading->RGBColor@@@#3
menggunakan warna input untuk kontur.Output sampel, dengan pasangan warna pertama (karena bagus) tetapi rangkaian lingkaran terakhir:
sumber
JavaScript / SVG / HTML5, 219 byte
sumber
BBC Basic,
120117 byteUnduh juru bahasa di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
BBC Basic memiliki serangkaian mode warna yang memungkinkan Anda untuk merencanakan grafik raster sesuai dengan operasi logika dasar: OR, AND, XOR dll.
Ini juga mendukung pemrograman ulang pallete, artinya misalnya di sini gambar 2 warna dapat memprogram ulang warnanya ke 4096 warna. Implementasi yang digunakan di sini memiliki beberapa (tidak terdokumentasi) perbedaan dari implementasi BBC asli, di mana operator EOR tidak diperlukan.
Tidak disatukan
Layar keluaran khas
Contoh gambar ditingkatkan dengan faktor 10 dalam satuan / faktor 5 dalam piksel (dasar BBC menggunakan 1 piksel = 2 unit.)
sumber
MATL ,
302925 byteMasukkan format:
Coba di MATL Online! Atau verifikasi kasus uji terakhir . (Penerjemah masih eksperimental. Anda mungkin perlu menyegarkan halaman dan coba lagi jika tidak berhasil).
Penjelasan
Kode ini menggunakan bilangan kompleks untuk menentukan kisi poin dan menghitung jarak, dan menggunakan operasi array dengan penyiaran .
sumber
Python menggunakan pypng ,
140138 byteContoh penggunaan:
Terima kasih kepada xnor karena telah menghemat 2 byte.
sumber
abs(x-X+1j*(y-Y))<r
.Matematika (tidak bersaing)
(idk bagaimana melakukan LaTeX di PPCG, jadi saya menggunakan alat LaTeX untuk png)
Penjelasan
Produk dari beberapa persamaan lingkaran (
(x-a)^2+(y-b)^2-r^2
)> = 0 akan membuat grafik yang dibutuhkan pertanyaan ini. Dalam persamaan,n
adalah ukuran array, dan(x, y or r)_k
merupakan elemenk
th(x, y, or r)
.Contoh
(0,0,2),(2,2,2)
(Plot ketidaksetaraan oleh WolframAlpha)
Dapatkan / Jalankan persamaan untuk WolframAlpha
Tampilkan cuplikan kode
Sekarang buat itu bekerja dengan Mathematica ...
sumber
Python 2.x,
166158Fungsi menghasilkan file PPM pada output standar.
contoh:
sumber
Gangguan Umum + Quicklisp + ZPNG 260 + 20 = 280 karakter
Ini adalah beberapa kode terluas yang pernah saya tulis dalam CL, dan jika saya tidak melakukan golf kode saya akan merestrukturisasi ini untuk membuatnya lebih mudah dibaca ...
Prelude (20 karakter)
Golf (260 karakter)
Tidak Disatukan:
(Menggunakan defun untuk memungkinkan pengujian dan nama variabel yang lebih panjang agar mudah dibaca)
Contoh penggunaan:
Penjelasan
Mengembalikan nilai true jika titik (i, j) berada di dalam lingkaran lingkaran yang diberikan. Jarak Euclidean dihitung dengan mengambil nilai absolut dari bilangan kompleks yang mewakili vektor dari (i, j) ke pusat lingkaran.
Petakan fungsi itu di seluruh daftar lingkaran dan periksa apakah titik yang diberikan (i, j) termasuk dalam jumlah genap.
Pilih warna berdasarkan tes itu.
Kumpulkan daftar datar semua byte rgb dengan mengulangi setiap (i, j) pada gambar dan menambahkan daftar yang dihasilkan secara bersamaan.
Konversikan daftar byte tersebut menjadi array byte yang tepat, sehingga zpng dapat menelannya dengan benar.
Buat objek png.
Buat fungsi untuk mengambil lebar, tinggi, dua warna, dan daftar lingkaran dan mengembalikan objek png yang dibuat.
sumber
JavaScript (ES6), 224 byte
Saya melihat solusi JS + SVG, tetapi saya hanya harus membuat solusi berbasis kanvas ;-) Ini adalah fungsi yang mengembalikan elemen kanvas. Jika elemen kanvas yang ada dapat disediakan, hapus 40 byte.
Sebut seperti
f(width, height, [[r1, g1, b1], [r2, g2, b2]], [[r1, x1, y1], [r2, x2, y2], ...])
Contoh output:
sumber
Löve2D , 353 Bytes.
sumber