Anda diberikan satu set koordinat Cartesian arbiter, unik, 2d, integer: misalnya [(0,0), (0,1), (1,0)]
Temukan jalur terpanjang yang mungkin dari set koordinat ini, dengan batasan bahwa koordinat dapat "dikunjungi" hanya sekali. (Dan Anda tidak "kembali" ke koordinat tempat Anda mulai).
Penting:
Anda tidak dapat "melewati" koordinat atau sekitarnya. Misalnya, dalam contoh catatan terakhir (Persegi Panjang), Anda tidak dapat berpindah dari D ke A tanpa mengunjungi C (yang mungkin merupakan kunjungan ulang, mematahkan panjang yang ditemukan). Ini ditunjukkan oleh @FryAmTheEggman.
Input Fungsi: Array of 2d Cartesian Coordinates
Function Output: Hanya panjang maksimal
Pemenang: Kode terpendek menang, tidak ada penahan yang dilarang (Bukan yang paling efisien waktu-ruang)
Contohnya
1 : Dalam kasus yang ditunjukkan di atas, jalur terpanjang tanpa koordinat "dikunjungi" dua kali adalah A -> B -> O (atau OBA, atau BAO), dan panjang jalurnya adalah sqrt (2) + 1 = 2.414
2 : Dalam kasus yang ditunjukkan di atas, jalur terpanjang tanpa koordinat "dikunjungi" dua kali adalah ABOC (dan jelas COBA, OCAB, dll.), Dan untuk satuan persegi yang diperlihatkan, ia menghitung ke sqrt (2) + sqrt (2) + 1 = 3,828.
Catatan: Ini adalah test case tambahan yang tidak sepele seperti dua contoh sebelumnya. Ini adalah persegi panjang yang terbentuk dari 6 koordinat:
Di sini, jalur terpanjang adalah: A -> E -> C -> O -> D -> B, yaitu 8,7147
(kemungkinan diagonal berjalan maksimum dan tidak ada tepi yang dilintasi)
sumber
Jawaban:
Pyth,
1051031009286 byteCoba di sini!
sumber
Mathematica, 139 byte
Kasus cobaan
sumber
Perl,
341322318 byteKode ini mendukung hingga 100 poin. Karena menghasilkan semua kemungkinan permutasi titik, 100 poin akan membutuhkan setidaknya 3,7 × 10 134 yottabytes memori (12 poin akan menggunakan 1,8Gb).
Berkomentar:
TestCases:
$"
, dan beberapa inliningsumber