円のリストが与えられたら、最小の包含長方形の面積を出力します


28

半径のリストが表示されます。すべてが収まる最小の長方形の領域を出力する必要があります。

たとえば、リスト[5,3,1.5]を指定すると、が出力されます157.460

これは画像です:

幅は15.7460、高さは10なので、面積は157.460です

ルール:

  • stdinまたは関数の引数を使用してリストを取得し、stdoutまたは関数の戻りを使用して回答を出力します。

  • 半径は、最大で小数点以下2桁です。

  • リストの長さは2〜6です。

  • 出力は、小数点以下3桁以上の精度である必要があります。

  • 必要な場合、π= 3.1416。

テストケース:

バイト単位の最短コードが優先されます。



1
客観的な勝利基準が表示されない
-Maltysen

それが私たちの最も中心的なルールの1つです。
マルティセン

2
@Timのほとんどはコードゴルフであり、目標は最小限のバイトでコーディングすることです。正確なスペックを持っているので、これは良いコードゴルフの挑戦になると思います。
xnor

「丸められていない切り捨てられた」状態を取り除くことをお勧めします。なぜなら、それはタスクの周辺にあるからです。小数点以下3桁以上を出力しても構わないかどうかはわかりませんが、それも許可することをお勧めします。
xnor

回答:


16

Python 2 + PySCIPOpt、267バイト

from pyscipopt import*
R=input()
m=Model()
V,C=m.addVar,m.addCons
a,b,c=V(),V(),V()
m.setObjective(c)
C(a*b<=c)
P=[]
for r in R:
 x,y=V(),V();C(r<=x);C(x<=a-r);C(r<=y);C(y<=b-r)
 for u,v,s in P:C((x-u)**2+(y-v)**2>=(r+s)**2)
 P+=(x,y,r),
m.optimize()
m.printBestSol()

使い方

次のように問題を記述します。変数abcx 1y 1、…、x ny nに対して cを最小化します。

  • ABC ;
  • R IX IA - R I及びrはIY IB - Y I、1≤ iがN
  • X I - のx J2 +(Y I - Y J2 ≥(R I + のR J2、1≤用J < IN

明らかに、これらの制約に外部最適化ライブラリを使用していますが、古いオプティマイザーにそれらを供給することはできませんNMinimize。これらの小さなテストケースでは、Mathematicaでも局所的な最小値で動けなくなります。制約をじっと見つめると、それらが2次制約のある2次プログラムを構成していることがわかります。非凸QCQPのグローバルな最適化はNP困難です。したがって、信じられないほど強力な魔法が必要です。私は産業用ソルバーSCIPを選択しました。これは、アカデミックな使用のための無料ライセンスと同等のグローバルQCQPソルバーです。幸いなことに、非常に優れたPythonバインディングがいくつかあります。

入出力

のように、stdinの半径リストを渡し[5,3,1.5]ます。出力が示すobjective value:矩形領域x1x2長方形の寸法、x3再度矩形領域x4x5第一円の中心座標、x6x7第二円の中心座標、等

テストケース

[5,3,1.5]157.459666673757

5,3,1.5

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 0.04
Solving Nodes      : 187
Primal Bound       : +1.57459666673757e+02 (9 solutions)
Dual Bound         : +1.57459666673757e+02
Gap                : 0.00 %
objective value:                     157.459666673757
x1                                                 10   (obj:0)
x2                                   15.7459666673757   (obj:0)
x3                                   157.459666673757   (obj:1)
x4                                                  5   (obj:0)
x5                                                  5   (obj:0)
x6                                                  7   (obj:0)
x7                                   12.7459666673757   (obj:0)
x8                                                1.5   (obj:0)
x9                                   10.4972522849871   (obj:0)

[9,4,8,2]709.061485909243

これは、OPのソリューションよりも優れています。正確な寸法は18 x 29 +6√3です。

9,4,8​​,2

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 1.07
Solving Nodes      : 4650
Primal Bound       : +7.09061485909243e+02 (6 solutions)
Dual Bound         : +7.09061485909243e+02
Gap                : 0.00 %
objective value:                     709.061485909243
x1                                                 18   (obj:0)
x2                                   39.3923047727357   (obj:0)
x3                                   709.061485909243   (obj:1)
x4                                                  9   (obj:0)
x5                                   30.3923047727357   (obj:0)
x6                                                 14   (obj:0)
x7                                   18.3923048064677   (obj:0)
x8                                                  8   (obj:0)
x9                                                  8   (obj:0)
x10                                                 2   (obj:0)
x11                                  19.6154311552252   (obj:0)

[18,3,1]1295.999999999

18,3,1

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 0.00
Solving Nodes      : 13
Primal Bound       : +1.29599999999900e+03 (4 solutions)
Dual Bound         : +1.29599999999900e+03
Gap                : 0.00 %
objective value:                       1295.999999999
x1                                   35.9999999999722   (obj:0)
x2                                                 36   (obj:0)
x3                                     1295.999999999   (obj:1)
x4                                   17.9999999999722   (obj:0)
x5                                                 18   (obj:0)
x6                                   32.8552571627738   (obj:0)
x7                                                  3   (obj:0)
x8                                                  1   (obj:0)
x9                                                  1   (obj:0)

ボーナスケース

[1,2,3,4,5]230.244214912998

1,2,3,4,5

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 401.31
Solving Nodes      : 1400341
Primal Bound       : +2.30244214912998e+02 (16 solutions)
Dual Bound         : +2.30244214912998e+02
Gap                : 0.00 %
objective value:                     230.244214912998
x1                                   13.9282031800476   (obj:0)
x2                                    16.530790960676   (obj:0)
x3                                   230.244214912998   (obj:1)
x4                                                  1   (obj:0)
x5                                   9.60188492354373   (obj:0)
x6                                    11.757778088743   (obj:0)
x7                                   3.17450418828415   (obj:0)
x8                                                  3   (obj:0)
x9                                    13.530790960676   (obj:0)
x10                                  9.92820318004764   (obj:0)
x11                                   12.530790960676   (obj:0)
x12                                                 5   (obj:0)
x13                                                 5   (obj:0)

[3,4,5,6,7]553.918025310597

3,4,5,6,7

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 90.28
Solving Nodes      : 248281
Primal Bound       : +5.53918025310597e+02 (18 solutions)
Dual Bound         : +5.53918025310597e+02
Gap                : 0.00 %
objective value:                     553.918025310597
x1                                   21.9544511351279   (obj:0)
x2                                   25.2303290086403   (obj:0)
x3                                   553.918025310597   (obj:1)
x4                                                  3   (obj:0)
x5                                   14.4852813557912   (obj:0)
x6                                   4.87198593295855   (obj:0)
x7                                   21.2303290086403   (obj:0)
x8                                   16.9544511351279   (obj:0)
x9                                                  5   (obj:0)
x10                                                 6   (obj:0)
x11                                                 6   (obj:0)
x12                                  14.9544511351279   (obj:0)
x13                                  16.8321595389753   (obj:0)

[3,4,5,6,7,8]777.87455544487

3,4,5,6,7,8

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 218.29
Solving Nodes      : 551316
Primal Bound       : +7.77874555444870e+02 (29 solutions)
Dual Bound         : +7.77874555444870e+02
Gap                : 0.00 %
objective value:                      777.87455544487
x1                                   29.9626413867546   (obj:0)
x2                                   25.9614813640722   (obj:0)
x3                                    777.87455544487   (obj:1)
x4                                   13.7325948669477   (obj:0)
x5                                   15.3563780595534   (obj:0)
x6                                   16.0504838821134   (obj:0)
x7                                   21.9614813640722   (obj:0)
x8                                   24.9626413867546   (obj:0)
x9                                   20.7071098175984   (obj:0)
x10                                                 6   (obj:0)
x11                                  19.9614813640722   (obj:0)
x12                                                 7   (obj:0)
x13                                                 7   (obj:0)
x14                                  21.9626413867546   (obj:0)
x15                                  8.05799919177801   (obj:0)

最後の1つを恥じると、わずかな丸め誤差が生じますが、うまくいきます!
ティム

[1,2,3,4,5]は半径3と半径5の円も接触させ、半径4 /半径5を右回りにわずかに回転させることで改善できるようです(半径1の円は私の本能と計算の両方は、長くて細い長方形は、正方形よりも効率的に半径4 /半径5の円を含むことができることを示しています
Level River St

@LevelRiverSt同意しません。3を上に移動して5にタッチすると、4が右(5から反時計回り)に押し出され、左(5から時計回り)に移動しません。私のプログラムの構成は(7 +4√3)×(9 +√(29 +16√3))≈13.9282×16.5308≈230.244ですが、推奨される構成は(30 +15√3)/ 4×(36 + 3 √5+6√15)/ 4≈13.9952×16.4865≈230.732
アンデルスカセオルグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.