Masalah utama palindromik cukup umum, tapi bukan itu pertanyaannya. Dalam tantangan ini, angkanya tidak harus menjadi palindrom, faktor utamanya adalah.
Tugas
Kode Anda harus mengambil satu bilangan bulat positif sebagai input. Kemudian periksa apakah ada permutasi faktor prima dari bilangan bulat itu palindromik ketika digabungkan. Jika demikian, output salah satunya (daftar faktor, bukan string yang disatukan). Lain, Anda harus output -1
.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
Uji Kasus
11 -> [11]
4 -> [2, 2]
39 -> [3, 13]
6 -> -1
1207 -> [17, 71]
393 -> -1
2352 -> [2, 2, 7, 3, 7, 2, 2]
code-golf
palindrome
factoring
Maltysen
sumber
sumber
-1
dikembalikan? Di Perl 6 yang saya pikirkanNil
,Fail
atau nilai yang tidak terdefinisi lainnya. Juga dapatkah output berupa nilai Posisi?1
, atau-1
?Jawaban:
05AB1E , 7 byte
Cobalah online!
Penjelasan:
(
.Δ
mudahnya default ke -1, jadi tidak perlu kerja ekstra)sumber
Pyth, 14 byte
-2 byte oleh @FryAmTheEggman
Penjelasan:
Terima kasih @FryAmTheEggman untuk mengingatkan saya tentang
I
. Saya tidak berpikir saya pernah menggunakannya sebelumnya.Suite uji
sumber
jk
sama dengans`M
CJam - 17 byte
Terima kasih kepada Martin Büttner karena telah menyelamatkan saya 10 byte!
Saya pertama kali menulis di CJam! Penjelasan:
sumber
W%
. Anda juga dapat menggunakan=
dengan blok untuk mendapatkan factorisation prima palindromik pertama. Itu membuat 18 byte:Wrimfe!{s_W%=}=p];
... Anda dapat menyimpan satu lagi dengan mengakhiri dengan kesalahan (karena output kesalahan pergi ke STDERR):Wrimfe!{s_W%=}=p;
Ruby, 89 + 7 = 96
102 + 7 = 109+7 untuk
-rprime
bendera.Huh , beberapa Ruby bawaan memiliki nama yang panjang ... setidaknya itu membuat kodenya cukup jelas.
The
flat_map
bit karenaprime_division
return ex.[[2, 2], [3, 1]]
untuk input12
(yang mewakili ).2231
Terima kasih kepada @ histokrat selama 13 byte!
sumber
Julia,
132122 byteIni adalah fungsi lambda yang menerima integer dan mengembalikan array atau -1. Untuk menyebutnya, tetapkan ke variabel.
Tidak Disatukan:
Disimpan 10 byte berkat Glen O!
sumber
foldl
daripadareduce
(mereka melakukan hal yang sama, tetapifoldl
telah menetapkan urutan dan satu byte lebih pendek). Gunakan perbandingan langsung dengan struktur kosong alih-alihisempty
(Saya tidak 100% yakin apa jenisnyax
, tetapi jika itu adalah set, misalnya, gunakanx==[]
). Dan gunakan(q=join(p))
laluq
filter saja untuk menyimpan dua byte lagi.x
array, maka daripadafirst(x)
, gunakan sajax[]
.==[]
dan itu memberi saya kesalahan tetapi saya mencoba lagi sekarang dan itu berhasil. Saya pasti telah mengacaukan sesuatu sebelumnya. ¯ \ _ (ツ) _ / ¯ Satu-satunya saran yang tidak bisa saya gunakan adalah menyingkirkanfirst
; dalam hal ini saya harus menggunakanfirst
karenax
merupakan iterator / koleksi / sesuatu yang tidakgetindex
didefinisikan.Brachylog , 10 byte
Cobalah online!
Pada awalnya, saya berharap bahwa harus mengeluarkan
-1
daripada diizinkan untuk gagal akan menjadi biaya byte yang cukup besar, tetapi karena output dalam kasus keberhasilan tidak dapat digabungkan, hanya biaya dua byte yang diperlukan untuk menulis_1
(jika kami menghapusnya, itu akan membuat output tidak dibatasi menjadi default0
, dan jika kita juga mengubah∨
ke∧
, predikat akan gagal sebagai gantinya), karena kita perlu memutus penyatuan dengan output implisit dengan cara apa pun. (Jika rangkaian adalah output untuk sukses tetapi-1
masih output untuk kegagalan, kita akan memilikiḋpc.↔|∧_1
atauḋpc.↔.∨_1
. Dalam kasus terpendek, di mana output disatukan dan predikat dapat gagal, semuanya hanya lima byte:ḋpc.↔
. Meskipun tidak mengeluarkan faktor-faktor yang sebenarnya memberikan lebih banyak perasaan keputusan-masalah ...)sumber
Haskell, 122 byte
Contoh penggunaan:
f 39
->[3,13]
.Pendekatan brute force yang jelas. Iterasi semua permutasi faktor prima dan periksa palindrom. Pilih yang pertama. Jika tidak ada, daftar kosong dan ditambahkan terlampir
[-1]
.sumber
Perl 6 , 100 byte
Pemakaian:
Sekitar setengahnya (53 byte) diambil dengan kode faktorisasi utama.
Jika ada
prime-factorize
metode semuanya bisa jauh lebih pendek.sumber
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Jelly , 16 byte
Lebih lama dari yang saya harapkan, baik dalam hitungan byte dan waktu yang dibutuhkan untuk menulis.
Cobalah online!
Penjelasan:
sumber
Japt
-F-1
, 9 byteCobalah
sumber
Japt, 18 byte
Hampir sesingkat CJam ...
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6),
256244208187 byteDisimpan 36 byte berkat @Neil
Menentukan fungsi anonim; misalnya tambahkan
F=
untuk menggunakannya. Ini sebenarnya cukup cepat pada input 2352, hanya butuh ~ 150 milidetik untuk menyelesaikannya di komputer saya.sumber
x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=[],f=(z,t=[])=>z.length?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&p.push(t),f(a),p[0]||-1")
APL (NARS), 169 karakter, 338 byte
G akan menjadi fungsi menemukan permutasi dan f adalah fungsi dari latihan ini; uji:
sumber