Tantangan Anda, jika Anda memilih untuk menerimanya, adalah untuk kode-golf fungsi yang mengembalikan benar atau salah (atau beberapa representasi yang berarti dari ya dan tidak) jika nomor memenuhi kriteria berikut:
- Bilangan bulat itu sendiri adalah bilangan prima ATAU
- Salah satu dari bilangan bulat tetangganya adalah prima
Sebagai contoh:
Sebuah input 7
akan mengembalikan True.
Masukan 8
juga akan mengembalikan True.
Input 15
akan mengembalikan False. (Baik 14, 15, atau 16 adalah prima)
Input harus dapat kembali dengan benar untuk angka antara 2 ^ 0 dan 2 ^ 20 inklusif, jadi tidak perlu khawatir tentang masalah tanda atau bilangan bulat bilangan bulat.
code-golf
number
primes
decision-problem
Tuan Llama
sumber
sumber
Jawaban:
J, 17
Mengembalikan booleans yang dikodekan sebagai kode pengembalian proses: nol untuk true, bukan nol untuk false. Penggunaan sampel:
sumber
*/0 p:<:,],>:
lebih pendek dan fungsi (lambda) yang tepat adalah([:*/0 p:<:,],>:)
Haskell, 47 karakter
sumber
Python
8580Pertama kali di Code Golf jadi mungkin ada beberapa trik yang saya lewatkan.
sumber
[]
. semua akan senang bekerja dengan ekspresi generator. Jika Anda tidak keberatan kode Anda jelek, Anda juga bisa menghapus spasi di antara0
danfor
, dan)
danor
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
Bukan pesaing nyata dalam kekurangan kode dengan cara apa pun, tetapi tetap mengirimkan karena menentukan primeness dengan ekspresi reguler diputar dalam banyak cara!
Python (2.x), 85 karakter
sumber
Ruby (55, atau 50 sebagai lambda)
atau sebagai lambda (biasa
g[23]
menyebutnya)Setrip naskah (53)
sumber
The Mathematica yang membosankan , 35 solusinya!
sumber
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(pemotongan dalam kodenya tidak diperlukan)C,
1128272 karakterMengikuti komentar Ilmari Karonen, menyelamatkan 30 karakter dengan menghapus
main
, sekarangP
mengembalikan true / false. Juga diganti loop dengan rekursi, dan beberapa penyesuaian lagi.Versi asli:
sumber
main(n,m)int**m;
.Mathematica, 24 byte
Tidak tahu mengapa pos lama ini muncul di daftar saya hari ini, tetapi saya menyadari bahwa Mathematica kompetitif di sini.
Fungsi yang tidak disebutkan namanya mengambil argumen integer dan mengembalikan
True
atauFalse
. Implementasi langsung.sumber
PrimeQ
utas di atas daftar, jadiOr@@PrimeQ@{#-1,#,#+1}&
(atauOr@@PrimeQ[#+{-1,0,1}]&
) juga berfungsi, untuk -1 byte. (Meskipun, kurasa aku tidak tahu apakahPrimeQ
memasang daftar di tahun 2012.)Stax , 6 byte
Jalankan dan debug itu
Penjelasan (tidak dikemas):
sumber
JavaScript (71
7380)Demo: http://jsfiddle.net/ydsxJ/3/
Sunting 1: Ubah
for(i=2;i<j;i++)
kefor(i=1;++i<j;)
(terima kasih@minitech
). Ubahif
pernyataan menjadi terner. Dipindahkanr|=p
danp=1
ke luarfor
untuk menghilangkan kawat gigi bagian dalam. 7 karakter disimpan.Sunting 2: Gabungkan
p=1
danj++<=n
untukp=j++<=n
, menyimpan 2 karakter (terima kasih@ugoren
).sumber
for(i=1;++i<j;)
alih-alihfor(i=2;i<j;i++)
menyimpan 1 karakter lagi.!j%i
tidak akan berfungsi karena diutamakan. Alternatif bekerja adalahj%i<1
.p=j++<=n
? Jika Javascript seperti C di sini, itu harus berfungsi.Regex (ECMAScript), 20 byte
^x?x?(?!(x+)(x\1)+$)
Cobalah online!
Versi di atas tidak menangani dengan benar nol, tetapi itu hanya membutuhkan 1 byte tambahan:
^x?x?(?!(x+)(x\1)+$)x
Sebagai bonus tambahan, inilah versi yang memberikan kecocokan pengembalian
1
untuk yang kurang dari perdana,2
untuk perdana, dan3
untuk yang lebih dari perdana:^x?x??(?!(x+)(x\1)+$)x
Cobalah online!
sumber
C #, 96
Mengembalikan -1,0,1 untuk true, yang lainnya salah.
Setiap saran untuk membuatnya lebih singkat akan sangat menyenangkan!
Formulir diperluas:
sumber
if(i==r-1)break;
dan mengubah bagian tengahfor
loop darii<r
menjadii<r-1
. Ini akan membuat Anda turun ke 82.GolfScript: 26
Penjelasan: Blok terdalam
{.:i,{i\%!},,2=@|\(}
menentukan apakah bagian atas tumpukan adalah prima dengan memeriksa apakah ada tepat 2 faktor yang kurang dari bagian atas tumpukan. Kemudian dipisah-pisahkan dengan item kedua di stack, yang menyimpan status apakah prime sudah terlihat. Akhirnya, itu mengurangi angka di bagian atas tumpukan.Mulailah dengan menambah input, menginisialisasi keadaan yang terlihat prima, dan ulangi blok 3 kali. Karena ini akan menurun dua kali, tetapi kami mulai dengan menambahkan, ini akan mencakup
n+1
dann-1
.sumber
C #,
8797 karaktersumber
CJam, 12 byte
CJam jauh lebih muda dari tantangan ini, jadi jawaban ini tidak memenuhi syarat untuk tanda centang hijau (yang tetap harus diperbarui ke jawaban randomra). Namun, bermain golf ini sebenarnya cukup menyenangkan - saya mulai dengan 17 byte dan kemudian mengubah pendekatan saya sepenuhnya tiga kali, menghemat satu atau dua byte setiap kali.
Ini adalah blok, ekuivalen terdekat dengan fungsi dalam CJam, yang mengharapkan input pada stack, dan menyisakan 1 (benar) atau 0 (salah) pada stack.
Uji di sini.
Inilah cara kerjanya:
sumber
F #, 68 byte (tidak bersaing)
Cobalah online!
Inilah sebabnya saya suka golf kode. Saya masih sangat hijau dengan F # tetapi saya belajar banyak tentang bagaimana bahasa bekerja dan apa yang bisa dilakukan dari tantangan semacam ini.
sumber
APL (Dyalog Classic) , 20 byte
Cobalah online!
sumber
Retina , 22 byte
Cobalah online!
Diambil sebagai input
sumber
Java 8, 83 byte
Mengembalikan
true
/false
sebagai nilai truey / falsey.Cobalah online.
Penjelasan: "
Jadi
int p(int n)
akan menghasilkan-1
untukn=0
dan bukan-bilangan prima, dan akan menghasilkann-1
untukn=1
atau bilangan prima. Karenap(0)+p(1)+p(2)
akan menjadi-1+0+1 = 0
dan akan mengembalikan false (meskipun2
prima),n=1
ini adalah kasus tepi menggunakan pendekatan ini.Satu loop tanpa metode yang terpisah akan menjadi 85 byte :
Mengembalikan
1
/0
sebagai nilai truey / falsey.Cobalah online.
Penjelasan:
sumber
Japt , 7 byte
Cobalah online!
sumber
R, 68 karakter
Penggunaan (1 untuk BENAR, 0 untuk SALAH):
sumber
i(n-1)|i(n)|i(n+1)
bukanifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
sumber
Q,
43 karakter36sumber
J, 16 karakter
sumber
Python,
6967 karakter8**7 > 2**20
sementara menjadi sedikit lebih pendek untuk menulissumber
Ruby, 47 karakter tetapi sangat mudah dibaca
sumber
C ++ 97
ugoren tampaknya telah mengalahkan saya dengan solusi yang cerdas. Jadi dia versi singkat pada pendekatan tiga kali loop:
sumber
Keempat (gforth) , 104 byte
Cobalah online!
Penjelasan
Pemeriksaan prima (p)
Fungsi Utama (f)
sumber
Julia 0.4 , 23 byte
Cobalah online!
sumber
Jelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber