Diberikan bilangan bulat positif sebagai input menentukan apakah itu bilangan murah hati.
Bilangan murah hati adalah angka sedemikian rupa sehingga setiap penyisipan +
tanda antara dua digit pada basis 10 menghasilkan ekspresi bilangan bulat utama.
Misalnya 40427 adalah murah hati karena
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Keluaran
Anda harus menampilkan dua nilai yang berbeda, satu ketika input murah hati dan satu ketika input tidak.
Mencetak gol
Tujuan dari kontes ini adalah untuk membuat ukuran kode sumber yang ditulis untuk menyelesaikan tugas ini, diberikan dalam byte, sekecil mungkin.
Uji Kasus
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
dengan tanda tambah disisipkan di antara dua karakter (tanpa menyisipkan) hanya dapat menghasilkan1
, yang dengan sendirinya tidak prima.1
dan2
tidak memiliki dua digit, rangkaian ekspresi kosong. Semua anggota set kosong adalah prima. Selain itu tidak ada dari mereka, tapi itu intinya. Agak membingungkan, saya akan memberi Anda tapi saya pikir itu lebih masuk akal daripada alternatif.Jawaban:
05AB1E , 10 byte
Kode
Menggunakan penyandian 05AB1E . Cobalah online! atau Verifikasi semua kasus uji!
Penjelasan
sumber
1 - 9
. Produk dari set kosong adalah 1? Mengapa?1
dan mengalikannya dengan setiap item dalam set, jadi ...sum
pada bagaimana[]
setara dengan0
, menggunakan properti induksi saat implementasi cukup cerdas.C (gcc) , 83
848583848675111byteSemua optimasi dimatikan dan hanya pada GCC 32-bit.
-1 byte terima kasih kepada @ceilingcat
+ beberapa byte untuk
1
case.+ beberapa byte untuk fungsi yang dapat digunakan kembali.
Mengambil input sebagai integer. Kembalikan 1 untuk kasus palsu, 0 untuk kasus nyata.
Cobalah online!
Lihat jawaban saya yang lain untuk kode Mathematica (55 byte).
sumber
1
,98
, dan4063
.Retina , 38 byte
Cobalah online!
Mencetak
1
untuk angka murah hati dan0
sebaliknya.Penjelasan
Kami mulai dengan mencocokkan setiap posisi antara dua digit (posisi yang bukan batas kata) dan memasukkan awalan dan akhiran yang cocok dengan unary, menggunakan
_
sebagai digit unary. Jadi alih-alih memasukkan+
s, kami langsung memasukkan hasil unary dari jumlah di sana.Sekarang kita membagi string di sekitar digit, sehingga setiap jumlah berjalan pada barisnya sendiri dan kita menyingkirkan digit-digit itu (akan ada juga baris awal dan akhir yang kosong, tetapi itu tidak penting).
Ini adalah regex standar untuk mencocokkan nomor non-prime di unary. Menggunakan
G
tahap rep di sini berarti kita hanya menyimpan semua baris yang berisi non-bilangan prima positif (membuang baris kosong).Akhirnya kami memeriksa apakah string kosong. Jika input murah hati, tahap sebelumnya akan membuang semua baris (karena semuanya adalah bilangan prima), dan ini memberi kita
1
. Kalau tidak, jika ada baris yang bukan bilangan prima, itu akan tetap di string dan regex gagal, memberi0
.sumber
Python 2 ,
827978 byteIni adalah lambat dan hanya bisa mengatasi kasus uji dengan memoisasi.
Cobalah online!
Versi alternatif, 79 byte
Mempercepat dengan biaya satu byte.
Cobalah online!
sumber
Jelly , 12 byte
Cobalah online!
Verifikasi semua kasus uji.
sumber
d
!Java 8,
1751719488 byte-77 terima kasih kepada @PeterTaylor dengan menggunakan aritmatika (bukan String dengan
.substring
) dan menyingkirkan metode terpisah untuk memeriksa apakah integer adalah bilangan prima.-6 byte menggunakan metode pengecekan utama @SaraJ , jadi pastikan untuk meningkatkannya!
Coba di sini.
Penjelasan:
sumber
p
dengan rekursi; kedua, mengakumulasi hasil sedemikian rupa sehingga fungsi utama hanya memerlukan satureturn
pernyataan dengan membuat nilai sentinel darip
be-1
dan menggunakan&
untuk memeriksa bahwa semua nilai yang dikembalikan adalah-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
untuk menangani10
. Stack overflow bukan masalah (spec tidak memberikan kisaran input yang harus ditangani), tetapi dapat diperbaiki dan lebih banyak penghematan diperoleh dengan kembali ke loop dan inlining .Pyth , 14 byte
Cobalah online! Akan ditampilkan
True
jika nomornya murah hati,False
jika tidak. Mengambil nomor sebagai string.Penjelasan
sumber
Python 2 ,
104 102 98 96103 bytei
sepenuhnya anonim karena hanya dipanggil sekali.x-1
hanyax
untuk pengecekan prime rarnge.x=10
, dengan demikian menambahkan 7 Bytes, terima kasih kepada @Dennis dan @Wheat Wizard untuk melihatnya: versi saya sebelumnya mempertimbangkan 1 sebagai primeCobalah online!
sumber
x-1
di akhir rentang; Kisaran eksklusif di sebelah kanan.Japt ,
2416 byteIni adalah kolaborasi antara @Shaggy, @ETHproduction, dan saya sendiri.
Cobalah online!
Mengambil input sebagai string.
sumber
x
secara otomatis mengkonversi item dalam array ke angka ;-)XîU
jenius. Saya pikirU¯X
bekerja untuk panjang yang sama, tetapi masihPip ,
2524 byteCobalah online!
Penjelasan
a
adalah argumen baris perintah pertama.1,#a
menghasilkan Rentang yang berisi angka1
melaluilen(a)-1
. Untuk ini, kami memetakan fungsi lambda:Selanjutnya, kami memetakan fungsi lambda lain
0N_%,_=1
,, yang menguji primality. Saya mengambilnya dari jawaban ini ; Anda bisa membaca penjelasannya di sana. Akhirnya, kita lipat daftar pada logika AND ($&
). Hasilnya adalah1
jika semua jumlahnya prima,0
jika ada yang tidak.Contoh, dengan input dari
4063
:sumber
CJam , 22 byte
Cobalah online!
Mencetak bilangan bulat positif untuk kebenaran, nol untuk falsy.
-1 berkat trik pintar oleh Peter Taylor .
-3 Berkat tip lain oleh Peter Taylor.
sumber
0&!
lebih pendek dari1+:*
!
mengembalikan boolean dan menggunakan set-persimpangan dengan nilai falsy0
sehingga Anda dapat melakukannya0&!
dalam 3 bukannya1&!!
...,
operator filter sebagai gantinyaf
.!
untuk mengkonversi ke Boolean: itu standar dalam GolfScript dan standar di CJam. Dan1&!!
akan salah:0&!
adalah ujian yang jelas karena persyaratan forall, tidak ada.Japt , 23 byte
Mengambil input sebagai string.
Gantung itu; dipukuli dengan pukulan pada alternatif yang jauh lebih pendek yang saya kerjakan.
Menguji
sumber
¬£i+YÄÃe@OxX j
4063
(harus benar, salah). Kuncinya di sini adalah bahwa JS berpikir terkemuka0
berarti Anda ingin oktal ...40043
, misalnya) Cukup tambahkan+
setelah0
untuk memperbaikinya.Mathematica, 75 byte
Function
yang mengharapkan aString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
mengembalikan apakah memasukkan+
setelahn
digit th memberikan angka prima.Table[...,{n,2,StringLength@#}]
memberikan daftar nilai-nilai ini sebagain
rentang dari2
panjang string. Kami kemudian mengambilAnd
masing-masing elemen dari daftar itu. Mudah, jikaStringLength@#<2
, makaTable[...]
adalah daftar kosong, untuk ituAnd@@{}==True
sumber
Mathematica, 55
504549505462byteSepertinya saya harus mempostingnya secara terpisah.
+6 byte untuk panjang kode yang diukur ulang.
+5 byte berkat ngenisis.
Mengambil input sebagai integer dan mengembalikan reguler
True
danFalse
. Di
antara keduanya adalah unicode 0xF4A1, kependekan dariFunction[,]
. Panjang kode diukur pada ukuran file (UTF-8 tanpa BOM), beri komentar jika tidak benar.PowerRange[x]
mengembalikan 1, 10, 100 ... tidak lebih besar darix
, yang diperkenalkan di Mathematica 10.sumber
Bahasa Inggris Biasa
4.204341315251241240 byte(Re-) memasukkan pengujian awal ke perpustakaan Plain English, dengan memindahkan 3.863 byte ke perpustakaan Plain English. Menghapus ruang putih 26 byte. Disimpan 64 byte dengan menyingkat variabel lokal. Disimpan 10 byte dengan menyingkat antarmuka. Sesuai saran RosLuP , disimpan 1 byte dengan mengubah cara m diinisialisasi dan bertambah.
Versi final kode akhir:
Catatan: Plain English IDE tersedia di github.com/Folds/english . IDE berjalan pada Windows. Ini mengkompilasi ke kode x86 32-bit.
The Osmosian Orde 's dinamis garpu dari Plain English sudah primality menguji dalam versi 4700, tetapi menggunakan algoritma yang sangat tidak efisien (seperti dari Januari sampai Juni 2017). Versi 4001-4011 dari garpu dinamis dinamis situs GitHub dihilangkan dari pengujian keaslian. Versi 4013 dari garpu dinamis situs GitHub mencakup pengujian awal. Kode untuk melakukan pengujian awal dikembangkan sebagai bagian dari revisi sebelumnya atas jawaban ini.
sumber
Perl 6 , 58 byte
Cobalah online!
10, 10 * * ...^ * > $_
adalah urutan geometri kelipatan sepuluh, diambil hingga satu sebelum elemen yang melebihi parameter input$_
. Kemudian kita hanya memeriksa bahwa untuk setiap kekuatan sepuluh, jumlah parameter input yang diambil div dan mod daya yang utama.sumber
Haskell,
114110 byteTidak digabungkan dengan penjelasan:
sumber
p x=[x]==[i|i<-[2..x],x`mod`i<1]
sebagai pemeriksaan utama, Anda dapat menyimpan 2 byte.divMod x$10^i
sebagai gantinyax`divMod`(10^i)
Aksioma, 88 byte
tes dan hasil
sumber
Brachylog , 11 byte
Cobalah online!
sumber
Perl 6 , 35 byte
Cobalah online!
Penjelasan:
sumber
Ditumpuk , 51 byte
Cobalah online!
Ini sebuah fungsi. Ia bekerja dengan mengonversi argumennya menjadi string (
tostr
), menduplikasinya dan mendapatkan panjangnya (:#'
), mengurangi 1 (1-
), membuat rentang dari 1 ke angka itu (~>
). Tumpukan terlihat seperti ini, untuk input40427
:Kami melakukan vektorisasi
splitat
, menghasilkan array berikut berada di bagian atas tumpukan:Dengan memindahkan ini
tr
, kita mendapatkan:Kemudian, kami memetakan fungsi
['+',' '#
# ~ prime](with
map`). Fungsi ini tidak:Kemudian, setelah peta, kami bergabung
1
. Ini karenaall
pengembalianundef
untuk daftar kosong.sumber
JavaScript (ES6), 70 byte
Gagal pada kasus terakhir di browser saya karena kesalahan "terlalu banyak rekursi" saat menghitung
P(200023)
. Semoga ini tidak membatalkannya.sumber
QBIC , 38 byte
Penjelasan
sumber
CJam (21 byte)
Demo online , online test suite online
Pembedahan
sumber
Pyth,
1514 byteSuite uji
Menyimpan byte menggunakan perubahan terbaru Pyth.
sumber
APL (NARS), karakter 35, byte 70
uji:
Ini akan menjadi terjemahan dalam APL dari Aksioma posting di sini ...
sumber
PHP, 100 byte
mencetak
1
jika input murah hati, mengosongkan output jika tidak. Jalankan sebagai pipa dengan-nR
atau coba online .sumber
Perl 5
-p
, 42 byteCobalah online!
sumber