Se le dará una lista de radios, debe generar el área del rectángulo más pequeño en el que encajarán todos.
Por ejemplo, dada la lista [5,3,1.5]
que generaría 157.460
.
Esta es la imagen:
El ancho es 15.7460 y la altura es 10, por lo que el área es 157.460
Reglas:
Obtiene la lista a través de stdin o argumento de función, emite la respuesta a través de stdout o retorno de función.
Los radios tendrán como máximo 2 decimales.
La lista tendrá una longitud entre 2 y 6.
La salida debe tener una precisión de 3 decimales o más.
Si lo necesita, π = 3.1416.
Casos de prueba:
[5,3,1.5] = 157.460
[9,4,8,2] = 733.431
- trabajando aquí .[18,3,1] = 1296.000
El código más corto en bytes gana.
Respuestas:
Python 2 + PySCIPOpt , 267 bytes
Cómo funciona
Escribimos el problema de la siguiente manera: minimice c sobre las variables a , b , c , x 1 , y 1 , ..., x n , y n , donde
Obviamente, estamos utilizando una biblioteca de optimización externa para estas restricciones, pero no puede simplemente alimentarlas a cualquier optimizador antiguo, incluso Mathematica se
NMinimize
queda atascado en los mínimos locales para estos pequeños casos de prueba. Si observa atentamente las restricciones, verá que constituyen un programa cuadrático con restricciones cuadráticas , y encontrar el óptimo global para un QCQP no convexo es NP-hard. Así que necesitamos un poco de magia increíblemente poderosa. Elegí el solucionador industrial SCIP , que es el único solucionador global QCQP que pude encontrar con una licencia gratuita para uso académico. Afortunadamente, tiene algunos enlaces Python muy bonitos.Entrada y salida
Pase la lista de radios en stdin, como
[5,3,1.5]
. La salida muestraobjective value:
el área de rectángulo,x1
,x2
dimensiones rectángulo,x3
área rectangular de nuevo,x4
,x5
primeras coordenadas del centro del círculo,x6
,x7
segundas coordenadas del centro del círculo, etc.Casos de prueba
[5,3,1.5]
↦157.459666673757
[9,4,8,2]
↦709.061485909243
Esto es mejor que la solución del OP. Las dimensiones exactas son 18 por 29 + 6√3.
[18,3,1]
↦1295.999999999
Casos de bonificación
[1,2,3,4,5]
↦230.244214912998
[3,4,5,6,7]
↦553.918025310597
[3,4,5,6,7,8]
↦777.87455544487
fuente