Schauen Sie sich dieses Bild an. Insbesondere, wie die Löcher an den Enden angeordnet sind.
( Bildquelle )
Beachten Sie, wie die Rohre in diesem Bild in einem sechseckigen Muster gepackt sind. Es ist bekannt, dass in 2D ein hexagonales Gitter die dichteste Packung von Kreisen ist. Bei dieser Herausforderung werden wir uns darauf konzentrieren, den Umfang einer Packung von Kreisen zu minimieren. Ein nützlicher Weg, um den Umfang zu visualisieren, besteht darin, sich vorzustellen, ein Gummiband um die Sammlung von Kreisen zu legen.
Die Aufgabe
n
Zeigen Sie bei einer positiven Ganzzahl als Eingabe eine Sammlung von n
Kreisen, die so eng wie möglich gepackt sind.
Regeln und Erläuterungen
- Angenommen, Kreise haben einen Durchmesser von 1 Einheit.
- Die zu minimierende Variable ist die Länge des Umfangs, die als konvexe Hülle der Zentren der Kreise in der Gruppe definiert ist. Schauen Sie sich dieses Bild an:
Die drei Kreise in einer geraden Linie haben einen Umfang von 4 (die konvexe Hülle ist ein 2x0-Rechteck und die 2 wird zweimal gezählt), die in einem Winkel von 120 Grad angeordneten Kreise haben einen Umfang von etwa 3,85 und das Dreieck hat einen Umfang von nur 3 Einheiten. Beachten Sie, dass ich die zusätzlichen pi-Einheiten ignoriere, die der tatsächliche Umfang darstellen würde, da ich nur die Zentren der Kreise und nicht deren Kanten betrachte.
- Es kann (und wird mit ziemlicher Sicherheit) mehrere Lösungen für jede gegebene geben
n
. Sie können diese nach eigenem Ermessen ausgeben. Orientierung spielt keine Rolle. - Die Kreise müssen sich auf einem sechseckigen Gitter befinden.
- Die Kreise müssen mindestens 10 Pixel im Durchmesser haben und dürfen gefüllt sein oder nicht.
- Sie können entweder ein Programm oder eine Funktion schreiben.
- Die Eingabe kann über STDIN als Funktionsargument oder über das nächste Äquivalent erfolgen.
- Die Ausgabe kann angezeigt oder in eine Datei ausgegeben werden.
Beispiele
Unten habe ich Beispiele für gültige und ungültige Ausgaben für n von 1 bis 10 (gültige Beispiele nur für die ersten fünf). Die gültigen Beispiele finden Sie links. Jedes Beispiel auf der rechten Seite hat einen größeren Umfang als das entsprechende gültige Beispiel.
Vielen Dank an steveverrill für die Hilfe beim Schreiben dieser Herausforderung. Viel Spaß beim Packen!