Tantangan:
Diberi nomor, ambil bilangan prima terbesar benar-benar kurang dari itu, kurangi dari bilangan ini, lakukan ini lagi ke bilangan baru ini dengan bilangan prima terbesar lebih sedikit daripada itu, dan terus lakukan ini sampai kurang dari 3. Jika mencapai 1, Anda program harus menampilkan nilai yang benar, jika tidak, program harus menampilkan nilai yang salah.
Contoh:
Semua ini harus memberikan nilai kebenaran:
3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50
Semua ini harus memberikan nilai falsey:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Aturan:
- Anda dapat menulis suatu program atau fungsi.
- Anda dapat mengasumsikan bahwa input lebih besar dari 2.
- Celah standar berlaku
- Ini adalah kode-golf sehingga jawaban terpendek menang!
code-golf
number
primes
decision-problem
Loovjo
sumber
sumber
9/10
apa2^(-1) 3^2 5^(-1)
yang dipikirkan dalam istilah yang terakhir)Jawaban:
Jelly ,
98 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Retina , 31 byte
Cetakan
0
(falsy) atau1
(kebenaran).Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Konversi input ke unary dengan mengubah input
N
menjadiN
salinan1
.Secara berulang menghapus prime terbesar kurang dari input. Ini didasarkan pada uji primality standar dengan regex .
Periksa apakah hasilnya tunggal
1
.sumber
Pyth,
181514 byteTerima kasih kepada @Maltysen untuk -1 byte
Suatu program yang mengambil input pada STDIN dan mencetak
True
atauFalse
jika perlu.Cobalah online
Bagaimana itu bekerja
Versi lama dengan pengurangan, 18 byte
Cobalah online
Bagaimana itu bekerja
sumber
St
isU
15 charsJavaScript (ES6),
6463 byteDisimpan 1 byte berkat @Neil
Saya menulis ini dalam 2 menit ... dan itu bekerja sempurna pertama kali. Pengguna pertama yang menemukan bug yang tidak terhindarkan akan menang ....
Cobalah
Tampilkan cuplikan kode
Bagaimana itu bekerja
Pertama kita mendefinisikan g (x) sebagai fungsi yang menemukan bilangan prima pertama p <= x . Ini dilakukan dengan menggunakan proses berikut:
Solusi untuk tantangan ini, f (x) , sekarang cukup mudah:
sumber
too much recursion
ke konsol browser di Firefox 48, jadi saya kira rekursi melewati batas rekursi FF.x%2
akan menghemat lebih dari satu bytex==1
.Pyke,
1511 byteCoba di sini!
Mengembalikan
1
jika benar dan memunculkan pengecualian jika salahsumber
Julia, 32 byte
Meskipun tidak akan menjadi solusi terpendek di antara bahasa, ini mungkin yang terpendek dari yang dapat dibaca manusia ...
Atau, dengan kata-kata yang sedikit lebih jelas
Dipanggil dengan, misalnya
!37
,.sumber
Mathematica, 32 byte
Ini adalah fungsi tanpa nama yang mengambil integer dan mengembalikan boolean.
Penjelasan
Ada banyak sintaks dan urutan bacaan lucu di sini, jadi ...
sumber
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 byte). Penggunaan yang bagus//.
!<2
di akhir.Python3,
102 92 90 8988 byteSelamat datang saran bermain golf! Saya melihat bahwa itu
gmpy
mengandung fungsinext_prime
, tetapi saya belum bisa mengujinya :(-2 byte, terima kasih kepada @JonathanAllan !
-1 byte, terima kasih kepada @Aaron !
Testcases
Outputnya adalah 13 nilai kebenaran dan 13 nilai palsu.
s
berisi kasush
kebenaran dan kesalahan.sumber
if all(x%y for...
bekerjan<3 else
->n<3else
untuk mendapatkan panjang yang sama dengan milikku;)Python, dengan sympy, 60 byte
Metode saya sebelumnya adalah 83 byte tanpa sympy menggunakan rekursi, tetapi saya menganggap kebenaran / falsey berarti dapat dibedakan dan konsisten, tetapi saya telah diberitahu bahwa itu adalah interpretasi yang salah. Saya tidak bisa menyelamatkannya karena ekornya, tapi saya akan meninggalkannya di sini kalau-kalau ada yang tahu bagaimana melakukannya:
sumber
2
bukan nilai falsey.Vitsy,
2826 byteIni pasti bisa dipersingkat.
Cobalah online!
sumber
MATL , 13 byte
Cobalah online! Atau verifikasi semua kasus uji sekaligus .
Penjelasan
sumber
CJam ,
2116 byteTerima kasih kepada Dennis karena telah menghemat 4 byte.
Cobalah online!
Penjelasan
sumber
ri_{_1|{mp},W=-}*
harus bekerja.1|
ini sangat pintar. :) (Dan saya selalu lupa bahwa{...},
ada rentang implisit ...)Perl, 42 byte
Termasuk +1 untuk
-p
Jalankan dengan input pada STDIN
reach1.pl
:Menggunakan regex primality klasik
sumber
.NET Regex, 38 byte
Hanya untuk menunjukkan bahwa itu dapat diperiksa dalam satu regex.
Input diasumsikan unary.
Penjelasan
Ini hanya mengimplementasikan persyaratan pada kata, berulang kali menghilangkan prime terbesar dan memeriksa apakah ada yang tersisa 1.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
: Grup non-mundur memastikan prime terbesar yang kami temukan tidak diganti, dan+
cukup ulangi proses pencocokan prime terbesar.(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Cocokkan prime terbesar kurang dari jumlah yang tersisa(?<=(.*))
: Catat berapa banyak yang telah kita kurangi untuk menetapkan titik "jangkar" untuk penegasan...+
: Cari jumlah terbesar ...(?<!^\1\2+(.+.)|$)
: ... yang utama dan kurang dari jumlah yang tersisa.(?<!^\1\2+(.+.))
: Rutin tes prima biasa, dengan^\1
ditempel di depan untuk memastikan kami memeriksa jumlah yang cocok..+
(?!<$)
: Menyatakan kurang dari jumlah yang tersisasumber
(?<=(.*))
ini agak canggung. Tidak yakin apakah ada cara yang lebih baik. Saya juga ingin tahu apakah ada solusi di PCRE.Perl 6 ,
54 53 5251 bytePenjelasan:
Contoh:
sumber
Tidak teratur , 63 byte
Saya membuat bahasa ini dua hari yang lalu, dan premis dasarnya adalah bahwa tidak ada loop bawaan, satu-satunya fitur adalah aritmatika dasar dan pengambilan keputusan, dan evaluasi program didasarkan pada ekspresi reguler.
Penjelasan
Bagian ini mengubah input menjadi unary. Itu berulang kali mengurangi 1 dari input sampai sama dengan 0, prapengganti
1_
setiap waktu. Itu kemudian menghapus semua_
s. Jika saya tidak lupa abreak
dalam kode saya itu bisa ditulis sebagai:Bagian berikutnya berulang kali menghapus perdana terbesar dari input sampai sama dengan
1
atau11
, dengan11
diganti0
.Saya menggunakan regex dari jawaban Martin Ender .
sumber
Haskell, 79 byte
Tidak terlalu pendek tapi pointfree :)
sumber
PowerShell v2 +, 81 byte
Mengambil input
$n
. Memasukiwhile
loop selama$n
masih3
atau lebih besar. Setiap iterasi, kurangi satu angka dari$n
. Angka tersebut adalah hasil uji primality regex yang diterapkan terhadap suatu rentang($n-1)..2
melalui operatorWhere-Object
(?
), kemudian yang pertama[0]
dari hasil (karena kisarannya menurun, ini menghasilkan yang terbesar yang dipilih). Setelah menyimpulkan loop,$n
apakah akan menjadi1
atau2
, dengan definisi, jadi kita pra-pengurangan$n
(mengubahnya menjadi salah satu0
atau1
), dan mengambil Boolean-bukan!
darinya. Yang tersisa pada pipa dan output tersirat.Contohnya
sumber
Matlab, 51 byte
Ini SANGAT mirip dengan solusi JS6 oleh ETHProductions , tetapi perlu variabel berada di ruang kerja.
sumber
Python 2.7:
8887 BytesThx @TuukkaX untuk -1 byte lebih banyak!
sumber
n<2
alih-alihn==1
.Floroid ,
45 3029 bytesumber
Clojure, 125 byte
Astaga, itu adalah sepotong kode. Bahasa yang paling verbal menyerang lagi!
Tidak Disatukan:
sumber