Sie erhalten eine Liste mit Radien, Sie müssen den Bereich des kleinsten Rechtecks ausgeben, in den alle passen.
Angenommen, [5,3,1.5]
Sie würden eine Liste ausgeben 157.460
.
Das ist das Bild:
Die Breite beträgt 15,7460 und die Höhe 10, die Fläche also 157,460
Regeln:
Sie erhalten die Liste über stdin oder Funktionsargument, geben die Antwort über stdout oder Funktionsrückgabe aus.
Die Radien haben höchstens 2 Dezimalstellen.
Die Liste hat eine Länge zwischen 2 und 6.
Die Ausgabe sollte auf 3 Dezimalstellen oder mehr genau sein.
Wenn Sie brauchen, ist π = 3.1416.
Testfälle:
[5,3,1.5] = 157.460
[9,4,8,2] = 733.431
- hier zu arbeiten .[18,3,1] = 1296.000
Kürzester Code in Bytes gewinnt.
Antworten:
Python 2 + PySCIPOpt , 267 Bytes
Wie es funktioniert
Wir schreiben das Problem wie folgt: Minimieren Sie c über die Variablen a , b , c , x 1 , y 1 , ..., x n , y n , wobei
Offensichtlich verwenden wir eine externe Optimierungsbibliothek für diese Einschränkungen, aber Sie können sie nicht einfach an einen alten Optimierer weiterleiten - selbst Mathematicas
NMinimize
hängt bei diesen winzigen Testfällen an den lokalen Minima fest. Wenn Sie sich die Einschränkungen genau ansehen, werden Sie feststellen, dass sie ein quadratisch eingeschränktes quadratisches Programm darstellen . Das globale Optimum für eine nicht konvexe QCQP zu finden, ist NP-schwer. Wir brauchen also unglaublich mächtige Magie. Ich entschied mich für den industrietauglichen Solver SCIP , den einzigen globalen QCQP-Solver, den ich mit so viel wie einer kostenlosen Lizenz für den akademischen Gebrauch finden konnte. Zum Glück hat es einige sehr schöne Python-Bindungen.Ein- und Ausgabe
Übergeben Sie die Radiusliste auf stdin, wie
[5,3,1.5]
. Der Ausgabe zeigtobjective value:
Rechteckbereich,x1
,x2
Rechteck Abmessungen,x3
Rechteckbereich wiederx4
,x5
erste Kreismittelkoordinatenx6
,x7
zweite Kreismittelkoordinaten usw.Testfälle
[5,3,1.5]
↦157.459666673757
[9,4,8,2]
↦709.061485909243
Dies ist besser als die Lösung des OP. Die genauen Abmessungen sind 18 mal 29 + 6√3.
[18,3,1]
↦1295.999999999
Bonusfälle
[1,2,3,4,5]
↦230.244214912998
[3,4,5,6,7]
↦553.918025310597
[3,4,5,6,7,8]
↦777.87455544487
quelle