Anda diberi satu set bilangan bulat positif. Anda harus mengaturnya menjadi berpasangan sehingga:
- Setiap pasangan berisi 2 angka, salah satunya adalah kelipatan dari yang lain. Misalnya, 8 adalah kelipatan dari 4, dan 9 adalah kelipatan dari 9.
- Jika nomor yang sama terjadi berkali-kali pada set awal, itu dapat digunakan berkali-kali dalam pasangan; suatu nomor bahkan dapat dipasangkan dengan kejadian lain dari nomor yang sama
- Jumlah pasangan maksimum yang mungkin diperoleh.
Output harus berupa jumlah pasangan. Kode terpendek menang.
Contoh data
2,3,4,8,9,18
-> 3
7,14,28,42,56
-> 2
7,1,9,9,4,9,9,1,3,9,8,5
-> 6
8,88,888,8888,88888,888888
-> 3
2,6,7,17,16,35,15,9,83,7
-> 2
code-golf
math
number
number-theory
permutations
ghosts_in_the_code
sumber
sumber
2,3,4,8,9,18
. (Setiap angka dalam daftar itu adalah faktor dan / atau kelipatan dari setidaknya dua angka lain dalam daftar, tetapi hanya memiliki satu solusi.)Jawaban:
Haskell,
1091077670 byteTerima kasih kepada nimi karena telah menghemat 33 byte dan mengajari saya lebih banyak Haskell. :)
Terima kasih kepada xnor karena telah menyimpan 6 byte lagi.
Yay, golf Haskell pertamaku. Ini bekerja sama dengan semua jawaban sejauh ini (yah, tidak cukup: hanya menghitung panjang awalan terpanjang dari pasangan yang valid dalam setiap permutasi, tapi itu setara dan sebenarnya apa kode CJam asli saya lakukan).
Untuk golfitude ekstra, ini juga sangat tidak efisien dengan secara rekursif menghasilkan semua permutasi dari suffix setiap kali dua elemen permutasi pertama adalah pasangan yang valid.
sumber
f=
perlu?chunksOf
itu menyakitkan. Saya tidak benar-benar tahu perpustakaan standar Haskell untuk dapat mengetahui apakah ada fungsi setara yang lebih pendek. Saya mencoba menerapkannya sendiri, tetapi keluar dua atau tiga byte lebih lama daripada impor.[]
dan[_]
sekaligus dengan menempatkang x=[]
kedua benar-benar pintar. Saya akan mencobanya. Terima kasih :)f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
.CJam,
2218 byteCobalah online.
Diharapkan input dalam bentuk daftar gaya-CJam.
Ini agak tidak efisien untuk daftar yang lebih besar (dan Java mungkin akan kehabisan memori kecuali Anda memberi lebih banyak).
Penjelasan
sumber
[1 2 3 4 5 6 7 8 9 10]
Namun[7 1 9 9 4 9 9 1 3 9 8 1]
yang merupakan daftar yang lebih panjang, berfungsi dengan baik. Mengapa demikian?10! = 3628800
, Tapi12! / 5! / 3! = 665280
. Jadi kehabisan memori untuk kasus pertama. Jika Anda menjalankannya dari konsol dengan Java interpreter, Anda bisa memberi tahu Java untuk menggunakan lebih banyak memori dan case pertama akan bekerja dengan baik (walaupun mungkin butuh beberapa saat, tidak tahu).Pyth, 13 byte
Kompleksitas waktu dan penyimpanan sangat mengerikan. Hal pertama yang saya lakukan adalah membuat daftar dengan semua permutasi dari daftar awalnya. Ini membutuhkan
n*n!
penyimpanan. Input list dengan panjang 9 sudah memakan waktu yang cukup lama.Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
sumber
Mathematica,
95938783796058 byteButuh beberapa detik untuk contoh yang lebih besar.
sumber
Matlab (120 + 114 = 234)
utama:
fungsi puncak disebut oleh bagian utama.
inputnya ada di form
[. . .]
sumber
Matlab (365)
Ini rupanya lebih lama, tetapi hanya di bawah standar dan eksekutif, dan saya berhasil melarikan diri dari
perms
fungsi karena butuh selamanya.Fungsi ini membutuhkan banyak reprises untuk berjalan dengan tenang karena fungsi anonim, saya terbuka untuk saran di sini :)
sumber