Vous recevrez une liste de rayons, vous devez sortir la zone du plus petit rectangle dans lequel ils s'inscriront tous.
Par exemple, étant donné la liste que [5,3,1.5]
vous produirez 157.460
.
Voici l'image:
La largeur est de 15,7460 et la hauteur de 10, donc la zone est de 157,460
Règles:
Vous obtenez la liste via stdin ou l'argument de fonction, affichez la réponse via stdout ou retour de fonction.
Les rayons auront au plus 2 décimales.
La liste aura une longueur comprise entre 2 et 6.
La sortie doit être précise à 3 décimales ou plus.
Si vous en avez besoin, π = 3,1416.
Cas de test:
[5,3,1.5] = 157.460
[9,4,8,2] = 733.431
- travailler ici .[18,3,1] = 1296.000
Le code le plus court en octets gagne.
Réponses:
Python 2 + PySCIPOpt , 267 octets
Comment ça marche
Nous écrivons le problème comme suit: minimiser c sur les variables a , b , c , x 1 , y 1 ,…, x n , y n , où
Évidemment, nous utilisons une bibliothèque d'optimisation externe sur ces contraintes, mais vous ne pouvez pas simplement les alimenter à n'importe quel ancien optimiseur - même Mathematica
NMinimize
est bloqué aux minima locaux pour ces minuscules cas de test. Si vous regardez attentivement les contraintes, vous verrez qu'elles constituent un programme quadratique à contraintes quadratiques , et trouver l'optimum global pour un QCQP non convexe est NP-difficile. Nous avons donc besoin d'une magie incroyablement puissante. J'ai choisi le solveur de puissance industrielle SCIP , qui est le seul solveur QCQP mondial que j'ai pu trouver avec autant de licence gratuite pour un usage académique. Heureusement, il a de très belles liaisons Python.Entrée et sortie
Passez la liste des rayons sur stdin, comme
[5,3,1.5]
. La montre de sortieobjective value:
zone rectangle,x1
,x2
dimensions rectangle,x3
zone rectangulaire à nouveau,x4
,x5
des premières coordonnées du centre du cercle,x6
,x7
deuxièmes coordonnées du centre du cercle, etc.Cas de test
[5,3,1.5]
↦157.459666673757
[9,4,8,2]
↦709.061485909243
C'est mieux que la solution de l'OP. Les dimensions exactes sont 18 par 29 + 6√3.
[18,3,1]
↦1295.999999999
Cas bonus
[1,2,3,4,5]
↦230.244214912998
[3,4,5,6,7]
↦553.918025310597
[3,4,5,6,7,8]
↦777.87455544487
la source