Chandler kecil sedih. Gambarkan dia awan untuk menghiburnya.
Catatan: Menggambar awan tidak akan benar-benar menghiburnya.
Lingkaran dapat didefinisikan sebagai 3-tupel di (x,y,r)
mana x
posisi x lingkaran pada bidang Cartesius, y
adalah posisi y lingkaran pada bidang Cartesius, dan r
merupakan jari-jari lingkaran. x
dan y
mungkin negatif. r
selalu positif. Input adalah daftar lingkaran dalam bentuk 3-tupel yang dipisahkan ruang. Misalnya:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
The 3,1,1
berarti "Sebuah lingkaran dengan titik pusat di 3,1
dengan 1 jari-jari. 3,2,1.5
Berarti" Sebuah lingkaran dengan titik pusat di 3,2
dengan radius 1,5.
Jika kita menggambar semua lingkaran input pada grafik, sepertinya ini (saya sudah memasukkan garis kotak dan label untuk kejelasan saja; mereka tidak diperlukan):
Perhatikan bagaimana semua lingkaran itu kohesif . Yaitu, mereka semua tumpang tindih bersama sehingga membentuk satu kelompok besar tanpa kelompok lingkaran kecil yang terpisah dari yang lainnya. Masukan dijamin kohesif.
Misalkan sekarang kita menggambar garis yang bergerak di sekitar "perbatasan" yang dibentuk oleh lingkaran-lingkaran ini, tanpa garis lainnya. Itu akan seperti menggambar batas siluet yang dibentuk oleh semua lingkaran. Cloud yang dihasilkan akan terlihat seperti ini:
Jadi awan ini telah dibentuk dengan menggambar hanya busur lingkaran di input yang membentuk perbatasan, sehingga menghasilkan bentuk tunggal. Dengan kata lain, awan dibentuk dengan hanya menggambar busur yang tidak berada dalam lingkaran lain. Program Anda akan menerima input dalam bentuk yang dijelaskan di atas, dan menampilkan gambar yang menampilkan cloud yang dihasilkan. Bentuk keseluruhan awan harus benar, tetapi skala, warna, ketebalan garis, dan bagaimana tampilannya pada titik terserah Anda. Perhatikan bahwa cloud harus terlihat, sehingga Anda tidak dapat menarik sesuatu seperti "Program ini menggambar awan putih pada latar belakang putih", "Program ini menggambar cloud pada skala yang sangat kecil", "Program ini menggambar cloud dengan 0 ketebalan garis ", dll. Juga perhatikan bahwa warna batas harus berbeda dari warna isi atau latar belakang.
Contoh lain. Memasukkan:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
Keluaran:
Jika ada "lubang" di awan, Anda harus menggambar lubang itu juga. Memasukkan:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
Keluaran:
Berikut ini aturan penting: program Anda harus hanya menggambar garis yang membentuk perbatasan. Ini berarti bahwa Anda TIDAK BISA menggambar lingkaran sepenuhnya, dan kemudian menggambar lingkaran sedikit lebih kecil dengan isian putih - karena metode itu masih menarik garis yang tidak membentuk perbatasan, itu hanya akan menutupi mereka setelah itu. Tujuan aturan ini adalah untuk mencegah implementasi "gambar lingkaran, lalu gambar lingkaran lagi dengan isian putih", atau yang serupa dengan itu. Jawabannya diharapkan benar-benar menghitung tempat menggambar sebelum menggambarnya.
Ini adalah kode golf, sehingga jumlah karakter terpendek menang.
sumber
Jawaban:
Mathematica
177 126 121119Memecahkan dengan Wilayah Disk: pendekatan ahli matematika
Logikanya adalah untuk
Inilah tepatnya pendekatan yang diambil di bawah ini. Ini menghasilkan 3 angka di atas.
Wilayah implisit # 1 adalah penyatuan lingkaran. Wilayah implisit # 2 adalah penyatuan disk yang terletak di dalam lingkaran. Perbedaan mereka adalah perbatasan.
Memecahkan berdasarkan Wilayah Disk: pendekatan insinyur (119 karakter)
Yang berikut ini mengambil penyatuan wilayah disk, mendiskritisasi wilayah itu, dan menemukan batasnya. Titik-titik dalam diagram membatasi interval mesh Delaunay. Kami menampilkan wilayah diskrit di bawah ini untuk menyorot objek yang memberikan batas minat (garis besar awan).
"3,1,1 3,2,1,5 1,2,0,7 0,9,1,2,1,2 1,0,0,8"
Batas wilayah didiskritisasi.
Mengatasi dengan Mendeteksi Tepi: Pendekatan Fotografer - 121 karakter
Ini menarik disk menjadi hitam, rasterisasi gambar, mendeteksi tepi, dan membalikkan hitam dan putih.
sumber
RegionBoundary@DiscretizeRegion@RegionUnion[{#,#2}~Disk~#3&@@@ToExpression[#~s~","]&@s@InputString[s=StringSplit]]
s=StringSplit
dalam prompt? Coba pindahkan itu di depan lagi, masih harus lebih pendek dari versi Anda saat ini.T-SQL
23523422921217173 bytesIni memanfaatkan fungsionalitas spasial di SQL Server 2012+. Ketika dijalankan di SSMS (SQL Server Management Studio) menghasilkan panel hasil spasial.
Masukan dari variabel @i. Saya bisa menguranginya lebih jauh jika input bisa diambil dari tabel.Karena input tabel sekarang diizinkan.
Saya telah meninggalkan solusi sebelumnya di bawah ini.
Sunting : Hapus ruang liar, surplus menjadi dan subquery
171: Pembuatan tabel diganti dengan CTE dan @s dengan @.
Hancurkan SQL Dinamis
sumber
'A' has fewer columns than were specified in the column list
DECLARE @i VARCHAR(100) = '1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7'
. Sayangnya saya tidak bisa menguji dia saat ini dan SQLfiddle tidak bermain dengan baik untuk 2012.Mathematica,
175158149 byteSaya ingat dari diskusi di kotak pasir bahwa pendekatan ini seharusnya valid, tapi saya tidak sepenuhnya yakin bagaimana hal itu bisa terjadi dengan kata-kata baru dari aturan, jadi @Lilac, beri tahu saya jika menurut Anda ini melanggar aturan.
Pada dasarnya, saya membuat kondisi logis yang benar untuk semua titik di dalam cloud dan salah untuk semua titik di luarnya. Saya memberi makan itu
RegionPlot
yang kemudian merender wilayah semua titik di mana ekspresiTrue
serta garis besar di sekitarnya.Tidak Disatukan:
sumber
ImplicitRegion
secara otomatis menemukan nilai x dan y yang tepat untuk memplot. 122 karakter:s = StringSplit; RegionPlot@ ImplicitRegion[ Or @@ (((x - #)^2 + (y - #2)^2 < #3^2) & @@@ (ToExpression[#~s~","] &@(s@InputString[]))), {x, y}]
RegionPlot
sejauh ini.),AspectRatio-> 1
membawa kode kembali ke 149 byte, tepat di tempatnya sekarang.Python 3.3 (
183177164160 byte)Ini membutuhkan konsol lebar 80 karakter, yang saya tahu adalah default di Windows. Ini bekerja paling baik jika konsol Anda memiliki font persegi. Berikut adalah beberapa kutipan dari beberapa input tes.
Asli:
Lain:
Lubang:
sumber
Python -
253249215199Ini adalah iklan untuk perpustakaan indah yang mengagumkan , yang operasi geometrinya membuat penulisan solusi dengan langsung dengan menggambar garis besar dari gabungan lingkaran yang tumpang tindih (= titik buffer):
Keluaran:
Edit:
sys.argv[1:]
olehraw_input().split()
, menyimpan aimport sys
k={'color':'k'}
Kemewahan yang dihapus , digantikansavefig
olehshow
map(float,s.split(','))
oleheval(s)
sumber
Python - 535
sumber
from math import*
menghilangkan ruang yang tidak dilacak, hanya menggunakan nama variabel satu huruf saja, menggunakan pemahaman daftar (misalnya,cc=[z for z in a if z!=a2 and (z[0]…)]
). Lihat juga tips untuk bermain golf dengan Python .a2
.Python -
296249231223212Kredit pergi ke @ richard-green (izin diberikan) untuk solusi asli, saya baru saja mengecilkannya sedikit.
sumber
pylab
alih-alihmatplotlib.pyplot
.from pylab import *
apakah saya masih dapat meneleponshow()
danscatter()
tanpa referensi?[eval(i)for i in raw_input().split()]
sebagai pythoneval
berubah1,2,3
menjadi tuple. Anda juga tentu saja harus mengubah[x,y,r]
ke(x,y,r)
.JavaScript (E6) + HTML 322
JSFiddle
Setiap lingkaran dibagi lagi menjadi sekitar 100 busur kecil, dan setiap busur digambar jika titik tengahnya tidak berada di dalam lingkaran lainnya.
sumber
Python 274 byte
Ini mengambil input dari stdin dan memeriksa setiap titik pada tampilan, menggambar piksel satu per satu saat berjalan. Tidak persis efisien tetapi mengikuti semua aturan.
Perhatikan bahwa tampilan pygame akan berakhir segera setelah gambar selesai, saya tidak yakin apakah saya harus memasukkannya sebagai bagian dari jawaban saya tetapi untuk melihatnya Anda bisa memasukkan
raw_input
di akhir atau menambahkan sedikit lingkaran jika Anda ingin menghentikan OS dari mengeluh tentang hal itu tidak merespons dan semacamnya:Contoh gambar:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7, 1,2,0.7
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
sumber
Perl - 430
Menulis file pbm ke stdout.
Gambar uji (dikonversi ke png):
sumber