원 목록이 주어지면 가장 작은 사각형을 포함하는 영역을 출력하십시오.


28

반지름 목록이 주어지며, 가장 작은 사각형의 영역을 모두 채워야합니다.

예를 들어, 주어진 목록 [5,3,1.5]이 출력 157.460됩니다.

이것은 이미지입니다 :

너비는 15.7460이고 높이는 10이므로 면적은 157.460입니다.

규칙 :

  • stdin 또는 함수 인수를 통해 목록을 가져오고 stdout 또는 함수 리턴을 통해 응답을 출력하십시오.

  • 반지름은 소수점 이하 2 자리입니다.

  • 목록의 길이는 2와 6 사이입니다.

  • 출력은 소수점 이하 3 자리 이상이어야합니다.

  • 필요한 경우 π = 3.1416입니다.

테스트 사례 :

바이트 단위의 최단 코드가 이깁니다.



1
내가 객관적 경력 기준이 표시되지 않습니다
Maltysen

그것은 우리의 가장 중심적인 규칙 중 하나입니다
Maltysen

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

작동 원리

우리는 문제를 다음과 같이 씁니다 : 변수 a , b , c , x 1 , y 1 ,…, x n , y n 에서 c 최소화

  • ABC ;
  • R IX I ≤ - r에 I를 그리고 r에 해제 iY - Y I , 1 ≤ 대한 N ;
  • ( X I - X J ) 2 +를 ( Y I - Y J ) 2 ≥ ( R I + R의 J ) 2 , 1 ≤ 용 J < IN .

분명히, 우리는 이러한 제약 조건에 대해 외부 최적화 라이브러리를 사용하고 있지만, Mathematica조차도 NMinimize이러한 작은 테스트 사례에 대해 로컬 최소값에 걸리 더라도 이전 최적화 프로그램에 공급할 수는 없습니다 . 제약 조건을 자세히 살펴보면 이차 제약 조건 이차 프로그램 을 구성하고 볼록하지 않은 QCQP에 대한 전역 최적을 찾는 것이 NP-hard라는 것을 알 수 있습니다. 따라서 우리는 엄청나게 강력한 마법이 필요합니다. 나는 학업 용 무료 라이센스로 찾을 수있는 유일한 글로벌 QCQP 솔버 인 산업용 강도 솔버 SCIP를 선택했습니다 . 다행히도 아주 좋은 파이썬 바인딩이 있습니다.

입력과 출력

stdin에 반지름 목록을 전달합니다 (예 :) [5,3,1.5]. 출력 도시 objective value:직사각형 영역 x1, x2직사각형 사이즈, x3다시 사각형 영역 x4, x5제 원 중심 좌표 x6,x7 초 원 중심 좌표 등

테스트 사례

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

마지막 수치를 부끄러워하면 약간의 반올림 오류가 발생하지만 좋은 일입니다!
Tim

[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.
Anders Kaseorg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.