Ihre Aufgabe ist es, ein Programm zu schreiben, das den größten Radius findet, den N Kreise haben können und der dennoch in ein Rechteck passt, das X mal Y Pixel groß ist. (ähnlich wie in diesem Wikipedia-Artikel ) Ihr Programm muss den größtmöglichen Radius und die optimale Position dieser N Kreise finden, damit
- Keine zwei Kreise überlappen sich
- Alle Kreise passen in das Rechteck.
Ihr Programm sollte dies dann auf der Konsole drucken:
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)
(Natürlich müssen Sie some_number durch den Radius ersetzen, den Ihr Programm berechnet, N durch die Anzahl der Kreise, die Sie am Ende verwenden, und x und y durch die tatsächlichen Koordinaten des Kreises.)
Zuletzt sollte ein Bild mit diesen gezeichneten Kreisen erstellt und gespeichert werden.
Regeln:
Dieses Programm muss mit einer beliebigen Größe eines Rechtecks und einer beliebigen Anzahl von Kreisen ausgeführt werden und dennoch eine gültige Antwort erhalten. Sie können Befehlszeilenargumente, Benutzereingaben, fest codierte Variablen oder alles andere verwenden, was Sie möchten.
Wenn sich ein Kreis überlappt oder nicht vollständig in das Feld passt, ist Ihre Einreichung ungültig.
Jeder Kreis muss den gleichen Radius haben.
Um dies vernünftig und machbar zu machen, müssen alle Zahlen auf die 2. Dezimalstelle genau sein.
Dies ist Code Golf, also gewinnt das kürzeste Programm (Stand 28.10.2014).
Antworten:
JavaScript
782725 Zeichenerster Beitrag, sei sanft!
Das Programm wird nun über die Wrapped-Funktion aufgerufen. ZB :
(function(e,f,g){...})(100,200,10)
.Test 1
(function(e,f,g){...})(200,200,4)
Natürlich würden wir erwarten, dass der Radius genau 50 beträgt, aber aus Gründen, die in den Kommentaren der Frage erörtert wurden, konnte ich dies nicht vernünftigerweise erreichen. Die SVG sieht so aus ...
Test 2
(function(e,f,g){...})(100,400,14)
Und die SVG sieht so aus ...
Test 3
(function(e,f,g){...})(400,400,3)
Und die SVG sieht so aus ...
Sie sind nicht alle hübsch.
Wie es funktioniert
Ungolfed Code unten. Dieses Programm hat zwei Annahmen:
Das Programm berechnet zunächst einen großen Radius anhand der Kastenabmessungen. Es wird dann versucht, einen Kreis in die Ecke der Box zu passen. Wenn dieser Kreis passt, verlängert er eine Durchmesserlinie von diesem Kreis und versucht, am Ende der Linie einen Kreis zu erstellen. Wenn der neue Kreis passt, wird eine weitere Linie vom neuen Kreis verlängert. Wenn es nicht passt, schwingt die Linie um 360 Grad und sucht nach offenen Stellen. Wenn sich das Feld füllt, bevor die gewünschte Anzahl von Kreisen erstellt wurde, wird der Radius verringert und alles beginnt von vorne.
Ungolfed Code (Ausschnitt)
quelle