Tugas Anda adalah menulis sebuah program yang menemukan jari-jari terbesar yang bisa dimiliki lingkaran N dan masih muat di dalam persegi panjang berukuran X demi Y piksel. (Mirip dengan artikel wikipedia ini ) Program Anda harus menemukan radius terbesar dan posisi optimal dari lingkaran N ini sehingga
- Tidak ada dua lingkaran yang tumpang tindih
- Semua lingkaran pas di dalam persegi panjang.
Program Anda kemudian harus mencetak ini ke konsol:
Highest possible radius: <some_number>
Circle 1 Focus: (x, y)
Circle 2 Focus: (x, y)
...
Circle N-1 Focus: (x, y)
Circle N Focus: (x, y)
(Jelas, Anda harus mengganti some_number dengan jari-jari yang dihitung program Anda, N dengan jumlah lingkaran yang akhirnya Anda gunakan, dan x dan y dengan koordinat sebenarnya dari lingkaran)
Terakhir, itu harus membuat dan menyimpan gambar dengan lingkaran ini digambar.
Aturan:
Program ini harus dijalankan dengan berbagai ukuran persegi panjang, dan sejumlah lingkaran dan masih mendapatkan jawaban yang valid. Anda dapat menggunakan argumen baris perintah, input pengguna, variabel kode keras, atau apa pun yang Anda inginkan.
Jika ada lingkaran yang tumpang tindih atau tidak sepenuhnya masuk ke dalam kotak, kiriman Anda tidak valid.
Setiap lingkaran harus memiliki jari-jari yang sama.
Hanya untuk membuat ini masuk akal dan bisa dilakukan, semua angka harus tepat ke tempat desimal ke-2.
Ini golf kode, jadi program tersingkat (per 10/28/2014) menang.
Jawaban:
JavaScript
782725 karakterposting pertama, lembut!
Program sekarang dipanggil melalui fungsi terbungkus. Misalnya:
(function(e,f,g){...})(100,200,10)
.Tes 1
(function(e,f,g){...})(200,200,4)
Jelas kami berharap radiusnya tepat 50, tetapi untuk alasan yang dibahas dalam komentar pertanyaan, saya tidak bisa secara wajar mewujudkannya. SVG terlihat seperti ini ...
Tes 2
(function(e,f,g){...})(100,400,14)
Dan SVG terlihat seperti ini ...
Tes 3
(function(e,f,g){...})(400,400,3)
Dan SVG terlihat seperti ini ...
Tidak semuanya cantik.
Bagaimana itu bekerja
Kode di bawah ini tidak dikumpulkan. Program ini memiliki dua asumsi:
Program dimulai dengan menghitung radius besar berdasarkan dimensi kotak. Kemudian mencoba memasukkan satu lingkaran di sudut kotak. Jika lingkaran itu cocok, itu akan memperpanjang garis diameter dari lingkaran itu dan mencoba untuk membuat lingkaran di ujung garis. Jika lingkaran baru cocok, garis lain akan diperpanjang dari lingkaran baru. Jika tidak pas, garis akan berayun 360 derajat, memeriksa ruang terbuka. Jika kotak terisi sebelum jumlah lingkaran yang diinginkan dibuat, jari-jari dikurangi dan semuanya dimulai lagi.
Kode Tidak Terkunci (cuplikan)
sumber