Çevrelerin bir listesi göz önüne alındığında, en küçük içeren dikdörtgenin alanını çıktılayın


28

Size bir yarıçap listesi verilecektir, hepsinin sığabileceği en küçük dikdörtgenin alanını çıkarmalısınız.

Örneğin, liste verildi [5,3,1.5]çıkış olur 157.460.

Bu görüntü:

Genişlik 15.7460 ve yükseklik 10, yani alan 157.460

Kurallar:

  • Listeyi stdin veya function argümanı ile alırsınız, cevabı stdout veya function return ile çıkarırsınız.

  • Yarıçaplar en fazla 2 ondalık basamağa sahip olacak.

  • Listenin uzunluğu 2 ile 6 arasında olacaktır.

  • Çıktı, 3 ondalık basamağa veya daha fazla kesinliğe sahip olmalıdır.

  • Gerekirse, π = 3.1416.

Test durumları:

Bayt cinsinden en kısa kod kazanır.



1
Amaç kazanma ölçütünü göremiyorum
Maltysen

bu bizim en temel kurallarımızdan biri
Maltysen

2
@Tim Most, birkaç baytta kodlama amacı ile kod golf'dür. Bence bu kesin bir özelliğe sahip olduğundan iyi bir kod golf mücadelesi yapar.
xnor

"Yuvarlanmamış kesilmemiş" durumundan kurtulmanızı öneriyorum, çünkü bu görev için çevresel bir öneme sahip ve bazı diller bunu başarabilirken, bazıları bunun gerçekleşmesi için ekstra kodlamaya ihtiyaç duyuyor. 3 ondalık basamağın üzerinde çıktı almak için uygun olup olmadığından emin değilim, ancak buna da izin vermenizi öneririm.
xnor

Yanıtlar:


16

Python 2 + PySCIPOpt , 267 bayt

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()

Nasıl çalışır

Şöyle bir sorun geç minimize c değişkenleri üzerinde bir , b , c , x 1 , y 1 , ..., x , n , Y , n , burada

  • abc ;
  • r ix ia - r i ve r iy ıb - y i , 1 ≤ için in ;
  • ( X i - x j ) 2 + ( y i - y j ) 2 ≥ ( r i + r j ) 2 , 1 ≤ için j < in .

Açıkçası, bu kısıtlamalar üzerinde harici bir optimizasyon kitaplığı kullanıyoruz, ancak onları eski herhangi bir optimize NMinimizeediciye besleyemezsiniz - Mathematica bile bu minik test durumları için yerel minimumda sıkışıp kalıyor. Kısıtlamalara yakından bakarsanız, onların ikinci dereceden kısıtlı bir ikinci dereceden program oluşturduğunu ve dışbükey olmayan bir QCQP için global optimum bulmanın NP zordur olduğunu göreceksiniz. Bu yüzden inanılmaz derecede güçlü bir sihire ihtiyacımız var. Ben çözücü endüstriyel güç seçti Yüksek Okulun ben çok akademik kullanım için ücretsiz bir lisans olarak bulabildiğim çözücü yalnızca genel QCQP olduğunu. Neyse ki, çok güzel Python bağları var.

Giriş ve çıkış

Stdin'deki yarıçap listesini geçir [5,3,1.5]. Çıktıda objective value:dikdörtgen alanı x1, x2dikdörtgen boyutları, x3tekrar dikdörtgen alanı x4, x5birinci daire merkez koordinatları, x6, x7ikinci daire merkez koordinatları, vs.

Test durumları

[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

Bu OP'nin çözümünden daha iyidir. Kesin ölçüler 18 x 29 + 6√3'tür.

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)

Bonus kılıfları

[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)

Son utanç ufak bir yuvarlama hatası veriyor ama güzel iş çıkardın!
Tim

Yarıçap 3 ve yarıçap 5 dairelerin de dokunmasını sağlayarak [1,2,3,4,5] gelişmiş gibi görünüyor, sonra yarıçapı 4 / yarıçap 5 saat yönünde hafifçe saat yönünde döndürerek (yarıçapı 1 dairenin yoldan çekilin ama bunun için çok fazla ölü alan var: Hem içgüdüm hem de hesaplamalarım uzun ve ince bir dikdörtgenin yarıçapı 4 / yarıçapı 5 dairelerini bir kareye göre daha verimli içerebileceğini gösteriyor.
Level River St

@ SevevRiverSt Katılmıyorum. 3'ü 5'e dokunmak, 4'ü sağa doğru itecektir (saat 5 yönünün tersine 5), sola hareket etmesine izin vermeyecektir (saat yönünde 5'ten). Programımın yapılandırması (7 + 4√3) × (9 + √ (29 + 16√3)) ≈ 13.9282 × 16.5308 ≈ 230.244, önerilen yapılandırmanız (30 + 15√3) / 4 × (36 + 3 √5 + 6√15) / 4 ≈ 13.9952 x 16.4865 ≈ 230.732.
Anders Kaseorg,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.