Hãy nhìn vào hình ảnh này. Cụ thể, tại cách các lỗ trên các đầu được sắp xếp.
( Nguồn hình ảnh )
Lưu ý cách các đường ống trong hình ảnh này được đóng gói theo mô hình lục giác. Được biết , trong 2D, một mạng lục giác là nơi chứa các vòng tròn dày đặc nhất. Trong thử thách này, chúng tôi sẽ tập trung vào việc giảm thiểu chu vi của một vòng tròn. Một cách hữu ích để hình dung chu vi là tưởng tượng đặt một dải cao su xung quanh bộ sưu tập các vòng tròn.
Nhiệm vụ
Cho một số nguyên dương n
làm đầu vào, hiển thị một tập hợp các n
vòng tròn được đóng gói càng chặt chẽ càng tốt.
Quy tắc và làm rõ
- Giả sử các vòng tròn có đường kính 1 đơn vị.
- Biến được thu nhỏ là chiều dài của chu vi, được xác định là thân lồi của tâm của các vòng tròn trong nhóm. Hãy nhìn vào hình ảnh này:
Ba đường tròn trên một đường thẳng có chu vi là 4 (vỏ lồi là hình chữ nhật 2x0 và 2 được tính hai lần), những đường tròn được sắp xếp theo góc 120 độ có chu vi khoảng 3,85 và tam giác có chu vi chỉ có 3 chiếc. Lưu ý rằng tôi đang bỏ qua các đơn vị pi bổ sung rằng chu vi thực tế sẽ là do tôi chỉ nhìn vào tâm của các vòng tròn chứ không phải các cạnh của chúng.
- Có thể (và gần như chắc chắn sẽ có) nhiều giải pháp cho bất kỳ
n
. Bạn có thể xuất bất kỳ thứ nào trong số này theo ý của bạn. Định hướng không quan trọng. - Các vòng tròn phải nằm trên một mạng lục giác.
- Các vòng tròn phải có đường kính ít nhất 10 pixel và có thể được lấp đầy hoặc không.
- Bạn có thể viết một chương trình hoặc một chức năng.
- Đầu vào có thể được lấy thông qua STDIN, dưới dạng đối số chức năng hoặc tương đương gần nhất.
- Đầu ra có thể được hiển thị hoặc xuất ra một tập tin.
Ví dụ
Dưới đây tôi có ví dụ đầu ra hợp lệ và không hợp lệ cho n từ 1 đến 10 (ví dụ hợp lệ chỉ cho năm đầu tiên). Các ví dụ hợp lệ ở bên trái; mỗi ví dụ bên phải có chu vi lớn hơn ví dụ hợp lệ tương ứng.
Rất cám ơn steveverrill đã giúp đỡ viết bài thách thức này. Chúc mừng đóng gói!