Lihatlah gambar ini. Secara khusus, pada bagaimana lubang di ujungnya diatur.
( Sumber gambar )
Perhatikan bagaimana pipa di gambar ini dikemas dalam pola heksagonal. Diketahui bahwa dalam 2D, kisi heksagonal adalah kemasan lingkaran yang paling padat. Dalam tantangan ini, kami akan fokus pada meminimalkan keliling kemasan lingkaran. Salah satu cara yang berguna untuk memvisualisasikan perimeter adalah membayangkan meletakkan karet gelang di sekitar kumpulan lingkaran.
Tugas
Dengan bilangan bulat positif n
sebagai input, tunjukkan kumpulan n
lingkaran yang dikemas sekencang mungkin.
Aturan dan Klarifikasi
- Asumsikan lingkaran memiliki diameter 1 unit.
- Variabel yang akan diminimalkan adalah panjang perimeter, yang didefinisikan sebagai lambung cembung dari pusat lingkaran dalam grup. Lihatlah gambar ini:
Tiga lingkaran dalam garis lurus memiliki perimeter 4 (cembung cembung adalah persegi panjang 2x0, dan 2 dihitung dua kali), yang disusun dalam sudut 120 derajat memiliki perimeter sekitar 3,85, dan segitiga memiliki perimeter hanya 3 unit. Perhatikan bahwa saya mengabaikan unit pi tambahan yang perimeter sebenarnya karena saya hanya melihat pusat lingkaran, bukan tepi mereka.
- Mungkin ada (dan hampir pasti akan) beberapa solusi untuk setiap yang diberikan
n
. Anda dapat menampilkan semua ini atas kebijakan Anda. Orientasi tidak masalah. - Lingkaran harus pada kisi heksagonal.
- Lingkaran harus berdiameter minimal 10 piksel, dan dapat diisi atau tidak.
- Anda dapat menulis program atau fungsi.
- Input dapat diambil melalui STDIN, sebagai argumen fungsi, atau setara terdekat.
- Output dapat ditampilkan atau output ke file.
Contohnya
Di bawah ini saya memiliki contoh output yang valid dan tidak valid untuk n dari 1 hingga 10 (contoh yang valid hanya untuk lima yang pertama). Contoh yang valid ada di sebelah kiri; setiap contoh di sebelah kanan memiliki perimeter lebih besar dari contoh valid yang sesuai.
Terima kasih banyak kepada steveverrill atas bantuannya menulis tantangan ini. Selamat packing!