Anda akan diberikan daftar jari-jari, Anda harus menampilkan area persegi panjang terkecil yang semuanya cocok.
Misalnya, mengingat daftar [5,3,1.5]
yang akan Anda keluarkan 157.460
.
Ini gambarnya:
Lebarnya 15,7460 dan tingginya 10, jadi luasnya 157,460
Aturan:
Anda mendapatkan daftar melalui stdin atau argumen fungsi, mengeluarkan jawaban melalui stdout atau fungsi kembali.
Jari-jari akan memiliki paling banyak 2 tempat desimal.
Daftar ini akan memiliki panjang antara 2 dan 6.
Outputnya harus akurat hingga 3 tempat desimal atau lebih.
Jika Anda perlu, π = 3.1416.
Kasus uji:
[5,3,1.5] = 157.460
[9,4,8,2] = 733.431
- bekerja di sini .[18,3,1] = 1296.000
Kode terpendek dalam byte menang.
Jawaban:
Python 2 + PySCIPOpt , 267 byte
Bagaimana itu bekerja
Kami menulis masalah sebagai berikut: meminimalkan c lebih dari variabel a , b , c , x 1 , y 1 , ..., x n , y n , di mana
Jelas, kami menggunakan pustaka pengoptimalan eksternal pada kendala ini, tetapi Anda tidak bisa hanya memberi mereka ke pengoptimal lama — bahkan Mathematica
NMinimize
akan terjebak di minimum lokal untuk kasus kecil ini. Jika Anda mengamati dengan seksama kendala, Anda akan melihat bahwa mereka merupakan program kuadratik yang dibatasi secara kuadratik , dan menemukan bahwa optimum global untuk QCQP non-cembung adalah NP-hard. Jadi kita membutuhkan sihir bertenaga luar biasa. Saya memilih pemecah kekuatan industri SCIP , yang merupakan satu-satunya pemecah QCQP global yang dapat saya temukan dengan sebanyak lisensi gratis untuk penggunaan akademis. Untungnya, ia memiliki beberapa ikatan Python yang sangat bagus.Masukan dan keluaran
Lulus daftar jari-jari pada stdin, seperti
[5,3,1.5]
. Output menunjukkanobjective value:
daerah persegi panjang,x1
,x2
dimensi persegi panjang,x3
rectangle lagi,x4
,x5
koordinat pusat lingkaran pertama,x6
,x7
lingkaran koordinat pusat kedua, dllUji kasus
[5,3,1.5]
↦157.459666673757
[9,4,8,2]
↦709.061485909243
Ini lebih baik daripada solusi OP. Dimensi yang tepat adalah 18 kali 29 + 6√3.
[18,3,1]
↦1295.999999999
Kasus bonus
[1,2,3,4,5]
↦230.244214912998
[3,4,5,6,7]
↦553.918025310597
[3,4,5,6,7,8]
↦777.87455544487
sumber