Tantangan
Mengingat integer masukan n > 0
, keluaran jumlah bilangan prima ( lainnya selain n
, jika n
itu sendiri adalah perdana) yang dapat diproduksi dengan mengubah satu digit dalam ekspansi desimal n (tanpa mengubah jumlah digit).
Contohnya
Sebagai contoh n = 2
,. Dengan mengubah satu digit dalam ekspansi desimal 2
, kita dapat menghasilkan tiga bilangan prima tambahan 3, 5, 7
,, jadi a(n) = 3
.
Sebagai contoh lain n = 13
,. Dengan mengubah satu digit, Anda bisa mendapatkan bilangan prima 11, 17, 19, 23, 43, 53, 73, 83
, jadi a(13) = 8
.
Sebagai contoh terakhir n = 20
,. Dengan mengubah satu digit, Anda bisa mendapatkan bilangan prima 23, 29
, jadi a(20) = 2
.
Urutan
Berikut adalah 20 istilah pertama untuk membantu Anda memulai. Ini adalah OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Aturan
- Input dan output dapat dianggap sesuai dengan tipe integer asli bahasa Anda.
- Input dan output dapat diberikan dalam format apa pun yang nyaman .
- Abaikan angka nol di depan (misalnya,
03
bukan bilangan prima dalam formulasi ini). - Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online sehingga orang lain dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
sumber
n
untuk outputnya0
. Saya pikir itun = 200
. Saya juga berpikir mereka datang dalam tandan:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
, dllJawaban:
05AB1E ,
17161411 bytePenjelasan:
Cobalah online! atau hingga 100 .
sumber
.L
? Serius?.L
?!?!L
.<
untuk menyimpan byte. Bahkan jika filter tidak menghapus100
/1000
/10000
/ etc., Itu tidak pernah jadi yang utama jadi tidak akan mempengaruhi output.Python 2 ,
146 136 127 121118 byteTerima kasih kepada @ Mr.Xcoder untuk saran
Penjelasan:
Hasilkan angka dengan panjang sama dengan panjang input, lewati dulu (1,10,100,1000, ...)
Periksa bahwa angka yang dihasilkan berbeda dari input dengan hanya satu digit
Periksa prime
Menghitung
Cobalah online!
sumber
r=range
, karena Anda menggunakannya berkali-kali ...?143
? Karena saya melihatrange(1,10)
, itu tidak termasuk0
, dan103
ini utama0
dir(0,10)
.r(10)
cukup.lambda I,r=range:
Javascript (ES6) 148 byte
Mengambil input sebagai string dan kembali sebagai angka
Cuplikan kode contoh:
sumber
Jelly ,
211815 byte3 byte berkat Dennis.
Cobalah online! atau Verifikasi semua testcases .
sumber
æḟ⁵æR×⁵$DnDS€ċ1
menghemat beberapa byte.Mathematica, 105 byte
Cobalah online!
Function
yang mengharapkan bilangan bulat positif#
. Setf
sama dengan fungsiIntegerDigits
yang mengembalikan daftar digit inputnya. Kami mengambilRange
darig
ke10g
(inklusif), di manag=10^Length@f@#/10
adalah kekuatan terbesar10
kurang dari atau sama dengan input#
, kemudianCount
yangn
seperti ituPrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
.PrimeQ@n
memeriksa apakahn
prime,MatchQ[f@n-f@#,{x=0...,_,x}]
memeriksa apakah perbedaan antara daftar digitn
dan#
bentuk{0..., _, 0...}
, dann!=#
memastikan itun
dan#
sedangUnequal
.sumber
JavaScript (ES6),
153142139 byteMenerima input sebagai string. Perilaku tidak terdefinisi untuk input tidak valid, meskipun harus diakhiri tanpa kesalahan pada string apa pun yang dapat saya pikirkan. Belum tentu sebelum kematian-panas alam semesta, terutama untuk string panjang.
Demo
Perbaikan
Disimpan 11 byte dengan refactoring
reduce()
panggilan menjadimap()
panggilan, dan dengan secara implisit menyalin arraya
dalam parameter fungsi, bukan di dalam kontekssplice()
panggilan.Disimpan 3 byte berkat saran @Neil untuk dikonversi
[...Array(10)]
ke[...''+1e9]
.Kode tidak ditambang
Penjelasan
Fungsi ini menggunakan dua tingkat
map()
untuk menjumlahkan jumlah permutasi yang lulus tes primality, yang dipinjam dan dimodifikasi dari jawaban ini .(Jawaban asli)
Jadi misalnya, untuk menghitung jumlah suatu array, Anda akan melewatkan
initialValue
dari0
, dan mengembalikanaggregate
sama denganaccumulator + currentValue
. Dengan sedikit memodifikasi pendekatan ini, kami menghitung jumlah permutasi yang lulus tes primality:Itu pada dasarnya adalah bagian dalam
reduce()
, yang mengulangi semua permutasi daridigitArray
dengan mengubah masingdecimal
- masing ke spesifikpermutatedDigit
. Kita kemudian membutuhkan bagian luarreduce()
untuk mengulangi semua kemungkinanpermutatedDigit
untuk mengganti masing-masingdecimal
, yang adil0-9
.Kelainan dalam implementasi
[...''+1e9].map((u,j)=>...
adalah cara terpendek @Neil bisa memikirkan untuk mengulangi argumen0
melalui9
. Akan lebih baik untuk melakukannya denganu
, tetapiu
tidak berguna untuk setiap elemen dalam array, dalam hal ini.i+j
dalam kondisi terner memeriksa untuk memastikan bahwa0
tidak ada permutasi yang mungkin dari digit terdepan, sesuai spesifikasi tantangan.j!=c
memastikan bahwa dokumen aslin
bukan kandidat untuk menjalani tes primality.(a.splice(i,1,j),a.join``)
agak berantakan.splice()
mengganti digit padadecimal == i
denganpermutatedDigit == j
, tetapi karenasplice()
mengembalikan elemen yang dihapus (dalam hal ini, akan sama dengan[a[i]]
) alih-alih array yang dimodifikasi, kita harus menggunakan operator koma untuk meneruskan array yang dimodifikasia
ke tes primality, tetapi tidak sebelumjoin()
memasukkannya menjadi string angka.Terakhir,
eval()
adalah untuk menyimpan byte karena, dibandingkan dengan pendekatan yang lebih kanonik, lebih pendek:Referensi ke tes utama
p
diinisialisasi dalam argumen yang tidak digunakan untukmap()
panggilan.sumber
[...''+1e9]
lebih pendek.Python 2 , 134 byte
Cobalah online!
Lebih elegan, versi lebih panjang:
Input diambil sebagai String.
Penjelasan (versi lama)
lambda x,r=range,l=len:
- Menentukan lambda dengan parameter Stringx
dan dua parameter konstanr=range
danl=len
.sum(1...)
- Dapatkan panjangnya, yang menghemat 1 byte lebihlen([...])
.for f in r(10**~-l(x),10**l(x))
- Menghasilkan benar-benar semua angka dengan urutan magnitudo yang sama dengan input (yang diharapkan0
). Misalnya, input dari3
, akan menghasilkan[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Memeriksa apakah angka saat ini tepat 1 digit dari input, dan lebih tinggi dari 1.all(f%v for v in r(2,f))
- Memeriksa apakah nomor saat ini prima.sumber
sum(1for..ifBOOL)
untuksum(BOOLfor)
menyimpan beberapa byte</joke>
)JavaScript (ES6), 137 byte
Mengadaptasi jawaban saya yang lain ke dalam pengiriman program lengkap menggunakan metode
prompt()
dan API Webalert()
.sumber
Bean , 126 byte
Cobalah online!
Adaptasi pengajuan program JavaScript lengkap saya .
Setara JavaScript
Penjelasan
a
secara implisit diinisialisasi sebagai baris pertama input sebagai string dan pernyataan terakhirs
adalah output secara implisit, yang berisi jumlah permutasi utama.sumber
Sekam , 32 byte
Cobalah online!
Tidak Terikat / Penjelasan
sumber
Japt ,
2823 byte-5 byte terima kasih kepada @ETHproductions.
Mengambil string sebagai input.
Cobalah online!
sumber
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 byte-6 byte terima kasih kepada @Einacio; -1 byte terima kasih kepada @Titus
Cobalah online!
Diformat, dengan komentar:
Untuk membuatnya sesingkat mungkin, saya sudah:
$f = $t = 1
;++
increment sebagai bagian dari ekspresi lain$f += $i % $t++ == 0
(increment dieksekusi setelah operasi modulus dan karenanya tidak mempengaruhi hasilnya);if
pernyataan untuk kenaikan bersyarat telah memanfaatkan fakta bahwa boolean benar ketika dilemparkan sebagai bilangan bulat menjadi 1, menggunakan$c += $f == 2;
daripadaif ($f == 2) $c++;
.sumber
levenshtein
. Ide bagus!$i%$t++<1
lebih pendek dari$i%$t++==0
.Perl 6 , 83 byte
Cobalah online!
sumber
X~
bukanmap
? 81 bytePHP, 100 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .kerusakan
sumber
Java 8,
201194 bytePenjelasan:
Coba di sini.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
akan menghasilkan bilangan bulat ini:Untuk
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Untuk
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Untuk
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.dll.
sumber
JavaScript (ES7), 118 byte
Mengambil input sebagai string.
Cobalah online!
Berkomentar
sumber
Ruby dengan
-rprime
, 101 byte-rprime
Cobalah online!
sumber