Você receberá uma lista de raios. Você deve imprimir a área do menor retângulo no qual todos eles se encaixam.
Por exemplo, dada a lista que [5,3,1.5]
você produziria 157.460
.
Esta é a imagem:
A largura é 15.7460 e a altura é 10, então a área é 157.460
Regras:
Você obtém a lista via stdin ou argumento de função, gera a resposta via stdout ou retorno de função.
Os raios terão no máximo 2 casas decimais.
A lista terá um comprimento entre 2 e 6.
A saída deve ser precisa com 3 casas decimais ou mais.
Se você precisar, π = 3,1416.
Casos de teste:
[5,3,1.5] = 157.460
[9,4,8,2] = 733.431
- trabalhando aqui .[18,3,1] = 1296.000
O menor código em bytes vence.
Respostas:
Python 2 + PySCIPOpt , 267 bytes
Como funciona
Escrevemos o problema da seguinte maneira: minimize c sobre as variáveis a , b , c , x 1 , y 1 ,…, x n , y n , em que
Obviamente, estamos usando uma biblioteca de otimização externa sobre essas restrições, mas você não pode simplesmente alimentá-las com qualquer otimizador antigo - até mesmo com o Mathematica
NMinimize
fica preso nos mínimos locais para esses minúsculos casos de teste. Se você observar atentamente as restrições, verá que elas constituem um programa quadrático com restrição quadrática e encontrar o ideal global para um QCQP não convexo é difícil para o NP. Então, precisamos de uma magia incrivelmente poderosa. Escolhi o solucionador de força industrial SCIP , que é o único solucionador global de QCQP que eu poderia encontrar com uma licença gratuita para uso acadêmico. Felizmente, ele tem algumas ligações Python muito legais.Entrada e saída
Passe a lista de raios em stdin, como
[5,3,1.5]
. O resultado mostraobjective value:
a área de rectângulo,x1
,x2
dimensões do retângulo,x3
área rectângulo de novo,x4
,x5
primeiras coordenadas do centro do círculo,x6
,x7
segundo as coordenadas do centro do círculo, etc.Casos de teste
[5,3,1.5]
↦157.459666673757
[9,4,8,2]
↦709.061485909243
Isso é melhor que a solução do OP. As dimensões exatas são 18 por 29 + 6√3.
[18,3,1]
↦1295.999999999
Casos de bônus
[1,2,3,4,5]
↦230.244214912998
[3,4,5,6,7]
↦553.918025310597
[3,4,5,6,7,8]
↦777.87455544487
fonte