Masalah A3 dari kompetisi Putnam 2008 mengatakan:
Mulai dengan urutan hingga dari bilangan bulat positif. Jika memungkinkan, pilih dua indeks agar tidak membagi , dan ganti dan dengan dan \ text {lcm} (a_j, a_k) , masing-masing. Buktikan bahwa jika proses ini diulang, akhirnya harus berhenti dan urutan akhir tidak tergantung pada pilihan yang dibuat.
Tujuan Anda dalam tantangan ini adalah untuk mengambil urutan terbatas dari bilangan bulat positif sebagai input, dan output hasil mengulangi proses ini sampai tidak ada kemajuan lebih lanjut. (Yaitu, sampai setiap angka dalam urutan yang dihasilkan membagi semua angka yang datang setelah itu.) Anda tidak perlu menyelesaikan masalah Putnam.
Ini adalah kode-golf : solusi terpendek dalam setiap bahasa pemrograman yang menang.
Uji kasus
[1, 2, 4, 8, 16, 32] => [1, 2, 4, 8, 16, 32]
[120, 24, 6, 2, 1, 1] => [1, 1, 2, 6, 24, 120]
[97, 41, 48, 12, 98, 68] => [1, 1, 2, 4, 12, 159016368]
[225, 36, 30, 1125, 36, 18, 180] => [3, 9, 18, 90, 180, 900, 4500]
[17, 17, 17, 17] => [17, 17, 17, 17]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [1, 1, 1, 1, 1, 2, 2, 6, 60, 2520]
sumber
Jawaban:
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Pari / GP , 33 byte
Hitung pembagi dasar dari matriks diagonal.
Cobalah online!
sumber
J , 17 byte
Cobalah online!
Mungkin jawaban J pertama di PPCG yang digunakan
&.
dua kali. Setelah ini dan itu , saya mulai merasa seperti hacker J yang aneh.Pada dasarnya terjemahan dari jawaban Dennis 'Jelly .
Bagaimana itu bekerja
sumber
Bahasa Wolfram (Mathematica) , 44 byte
The unsur -th hasilnya adalah GCD dari LCM yang adalah dari subset dengan elemen.k k
Cobalah online!
sumber
Python 3 , 103 byte
Cobalah online!
Penjelasan
Masalah ini pada dasarnya adalah semacam paralel pada faktor prima, dan (gcd (a, b), lcm (a, b)) analog dengan (min (a, b), maks (a, b)). Jadi mari kita bicara tentang penyortiran.
Kami akan membuktikan dengan induksi bahwa setelah f (i, j), a [i] menjadi nilai terkecil dalam (nilai lama) L, di mana L adalah kisaran antara [i] dan a [j], termasuk kedua ujungnya . Dan jika j = -1, f (i, j) akan mengurutkan rentang L.
Kasus ketika L mengandung satu elemen sepele. Untuk klaim pertama, perhatikan bahwa L terkecil tidak dapat tetap dalam [j] setelah swap, jadi f (i, j-1) akan memasukkannya ke dalam [i], dan f (i + 1, - 1) tidak akan mempengaruhinya.
Untuk klaim kedua, perhatikan bahwa [i] adalah nilai terkecil, dan f (i + 1, -1) akan mengurutkan nilai yang tersisa, sehingga L menjadi diurutkan setelah f (i, j).
sumber
Retina , 65 byte
Cobalah online! Tautan termasuk kasus uji lebih cepat. Penjelasan:
Konversikan ke unary.
Pencocokan berulang: angka apa pun dengan faktor, maka angka kemudian yang tidak dapat dibagi dengan angka pertama tetapi dapat dibagi oleh faktor.
$1
adalah angka pertama.$2
adalah faktornya. Karena regex serakah ini adalah faktor terbesar yaitu gcd.$4
adalah bagian dari kecocokan antara angka-angka asli.$5
adalah angka kedua.$#3
(dalam desimal daripada unary) adalah yang kurang dari$1
dibagi$2
, karena tidak termasuk yang asli$2
. Ini berarti bahwa untuk menghitung lcm kita perlu mengalikannya$5
dengan satu lebih dari$#3
yang paling berhasil ditulis sebagai jumlah$5
dan produk dari$#3
dan$5
.Konversikan ke desimal.
sumber
05AB1E , 10 byte
Penghargaan untuk pendekatan ini diberikan kepada alephalpha .
Cobalah online!
sumber
Perl 6 , 53 byte
Cobalah online!
Jawaban Port of alephalpha Mathematica.
sumber
JavaScript (SpiderMonkey) , 69 byte
Cobalah online!
l
menetapkanlcm(p,q)
untuka[j]
, dan menetapkangcd(p, q)
untukq
jikaj > i
, jika tidak menjaga semua berubah.lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)
Jawaban lama:
JavaScript (SpiderMonkey) , 73 byte
Cobalah online!
g
menghitunggcd(u, v)
dan menetapkan nilai kembali keu
.sumber
05AB1E ,
151413 bytePort @ Dennis ♦ 'Jelly menjawab , tapi sayangnya 05AB1E tidak memiliki built-in Unexponents, sehingga dibutuhkan lebih dari setengahnya program .. :(
-1 byte terima kasih kepada @ Mr.Xcoder .
-1 byte terima kasih kepada @Enigma .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
¾
dan menghapus0ï
, +1. (Saya sudah mencoba ini sebelumnya karena saya mencoba untuk menjawab jawaban Dennis juga lol)εgÅpymP
akan menghemat satu byte lebih dari satu Mr Xcoder metioned0
dan¾
. Perlu diingat itu! Bahkan, saya akan menambahkannya ke tips 05AB1E kecil saya sekarang. :)