Pada tahun 1946, Erdos dan Copeland membuktikan bahwa angka tertentu adalah angka normal , yaitu digit dalam ekspansi desimalnya terdistribusi secara merata.
Pengguna akan memasukkan urutan digit dan Anda akan menemukan perdana terkecil yang berisi string itu di basis 10.
Contoh:
input -> output
"10" -> 101
"03" -> 103
"222" -> 2221
"98765" -> 987659
Kode terpendek dalam byte menang. Saya tahu bahwa beberapa bahasa (Mathematica, sage, pari-gp ...) hadir dengan fungsi bawaan yang terkait dengan bilangan prima. -50 byte jika program Anda tidak bergantung pada fungsi seperti itu. Jangan mencoba untuk menyontek hal ini, jika bahasa Anda sudah memiliki keuntungan besar, jangan mengklaim bonus.
Edit
Menurut beberapa komentar di bawah, prime terkecil yang mengandung "03" adalah 3. Apakah ini benar-benar membuat perbedaan? Satu-satunya hal yang dapat saya pikirkan adalah mungkin angka lebih mudah ditangani daripada string.
Dalam kasus seperti "03", output yang disukai adalah 103. Namun, saya tidak menganggapnya sebagai bagian mendasar dari program Anda, jadi Anda bebas untuk mengabaikan nol awal jika itu memberi Anda jumlah byte yang lebih rendah.
Jawaban:
Golfcipt,
3332 byte = -18 skorPenjelasan:
2{...}{)}/
- Dimulai dengan2
, sementara ada sesuatu yang benar, naikkan bagian atas tumpukan;;x
- buang nilai antara yang dikumpulkan oleh{}{}/
dan input, lalu masukkan nilai terakhir yang diuji di sana:x,2>
- simpan nilainya sebagaix
, lalu buat daftar dari2
hinggax-1
{x\%!},!!
- pertahankan yangx
habis dibagi, lalu paksakan ke boolean (tidak kosong)x`3?)!
- mencari input dalam bentuk teksx
(-1
jika tidak ditemukan), increment, negate.|
- atausumber
Program Haskell, 97 karakter = 47 skor
Fungsi Haskell, 75 karakter = 25 skor
jenis
p
yaitu(Integral a, Show a) => [Char] -> a
. Jika Anda menyediakan tipe integral Anda sendiri, Anda dapat mencari dengan infix di representasi Anda sendiri dari nilai-nilai itu. StandarInteger
menggunakan notasi desimal yang diharapkan untuk bilangan bulat.Tidak terlalu cepat. Kuadratik dalam nilai (bukan ukuran) dari output.
versi tanpa ungolfed:
contoh:
sumber
Java - 175 karakter.
sumber
indexOf(a[0])>=0)
dan{System.out.println(n)
.boolean p=true
dengan sesuatu sepertiint p=1
dan sebagainya.Mathematica 58
Waktu Relatif pada Mac saya (2,6 GHz i7 dengan memori 8 GB).
Temukan prime terkecil yang mengandung "01".
Temukan prime terkecil yang mengandung "012345".
Temukan prime terkecil yang mengandung "0123456".
sumber
StringFreeQ
untuk membuatnya lebih pendek.Sage , 72
Berjalan di prompt interaktif
Primes().unrank(i)
memberikani
bilangan prima th, dengan bilangan prima 0 adalah 2.sumber
R, 56chars -50 = 6
Ambil input sebagai stdin. Penambahan k hingga k adalah bilangan prima (diuji dengan menjumlahkan instance yang k mod 2 menjadi k nol, maka FALSE sejak 0 berubah menjadi logical FALSE) dan berisi string yang diberikan sebagai input (diuji dengan grep sederhana, di sini grepl karena kita menginginkan hasil yang logis).
Pemakaian:
sumber
shell oneliner (coreutils): 45chars
Tidak mendefinisikan fungsi di sini ... hanya oneliner yang mengambil satu argumen
$n
dan memindai rentang integer (sebenarnya sedikit lebih banyak untuk membuat kode lebih pendek). Versi 55 karakter:Bahkan tidak terlalu lambat. Untuk
n=0123456
itu kembali201234563
di81.715s
. Itu sangat cepat untuk pipa panjang dengan dua prosesor string.Menghapus dua karakter (hingga 53) dan satu pipa, kita bisa membuatnya berjalan lebih cepat:
Dan akhirnya, beberapa
sed
sihir membuatnya hingga 45 karakter , meskipun hasil cetakannya jelek:sumber
J - 38 char -50 = -12 poin
Biasanya di J, Anda akan menggunakan builtin yang sangat optimal yang didedikasikan untuk bilangan prima, jadi saya tidak akan meminta maaf atas keterlambatan dalam eksekusi.
Dijelaskan:
>:@]^:(...)^:_&2
- Mulai dengan 2, increment hingga(...)
return false.(+.i.)@]
- Ambil GCD penghitung dengan setiap bilangan bulat lebih kecil dari itu. (Kami menggunakan konvensi GCD (X, 0) = X.)]=*/@
- Ambil produk dari semua angka ini, dan uji kesetaraan ke konter. Jika penghitungnya prima, daftar adalah semua 1s, kecuali untuk GCD dengan 0; selain itu akan ada setidaknya satu GCD yang lebih besar dari 1, sehingga produk akan lebih besar dari penghitung.>./@(E.":)
- Uji apakah representasi string dari penghitung (":
) berisi string (E.
) di titik mana pun.>./
adalah fungsi max, dan kami menggunakannya karenaE.
mengembalikan vektor boolean dengan 1 di mana substring dimulai pada string utama.*:
- NAND logis hasil bersama. Ini akan menjadi salah hanya jika kedua input benar, yaitu jika penghitung keduanya prima dan berisi substring.Pemakaian:
Untuk anak cucu, inilah versi menggunakan prime builtin (panjang 30 char, tapi tidak ada bonus):
1 p:]
menguji penghitung untuk keunggulan, bukan trik GCD.sumber
Brachylog (v2), 3 byte dalam penyandian Brachylog
Cobalah online!
Pengajuan fungsi, mengambil input dari argumen sebelah kanan, memberikan output dengan memutasi argumen sebelah kiri. (Ini kebalikan dari konvensi Brachylog normal; lihat meta post ini untuk diskusi lebih lanjut. Menukar argumen ke dalam urutan yang lebih biasa akan menelan biaya tiga byte.) TIO link memiliki pembungkus yang memanggil fungsi dengan konvensi dan cetakan yang sesuai panggilan. hasil.
Penjelasan
Sayangnya, Brachylog sangat tepat untuk masalah ini sehingga menurut aturan dalam masalah, saya bahkan tidak bisa mencoba untuk mendapatkan bonus (yang ironisnya berarti itu tidak mampu menang).
Salah satu alasan saya sangat menyukai Brachylog adalah bahwa pemrograman adalah komunikasi antara manusia dan komputer, dan dengan demikian bahasa "sempurna" akan membiarkan Anda menerjemahkan spesifikasi masalah ke dalam bahasa Inggris secara langsung; ide-ide yang melaluinya masalah dinyatakan, dan melalui mana program ditulis, akan sama. Brachylog dapat mencapai ideal ini secara mengejutkan; pertanyaannya di sini adalah "menemukan prime terkecil yang mengandung substring yang diberikan", dan saya benar-benar dapat merangkai konsep "terkecil, prime, mengandung substring" dalam urutan yang benar dan memiliki program kerja. Dengan demikian, Brachylog mengatakan lebih banyak tentang sifat komunikasi daripada bahasa di mana Anda harus secara eksplisit menentukan algoritma untuk memecahkan masalah; terkadang ketika berbicara dengan manusia lain, kami mencoba menjelaskan masalah dengan menjelaskan langkah-langkah yang akan Anda ambil untuk menyelesaikannya, tetapi itu jarang terjadi. Jadi mengapa bahasa kita harus berbeda?
sumber
JavaScript 83 byte = 33 skor
Golf:
Tidak disatukan (sedikit):
sumber
Javascript (Node.JS) - 93 byte = 43 poin
Dalam bentuk yang diekstraksi dengan nama variabel yang masuk akal:
sumber
Karat 0,9 136 byte = 86 poin
Sangat eksplisit meski untuk kekompakan. Terlalu banyak ruang yang dihabiskan untuk mencari string. :(
Di sini versi tanpa spasi (136 karakter)
sumber
Japt, 10 byte
Cobalah
sumber
Tidy , 37 byte
Cobalah online!
sumber
Perl 6 , 36 - 50 = -14 poin
Cobalah online!
Mengingat
$_%%one ^$_
hanya 2 bytelebih kecildari.is-prime
, saya pikir itu layak untuk bonus. Ini habis untuk test case terakhir.Penjelasan:
sumber
:$
Python 3 ,
8079 byte - 50 =30skor 29-1 byte berkat penggunaan kreatif @ ASCII-only
%s
alih-alihstr
Test case "98765" belum dikonfirmasi karena berapa lama waktu yang dibutuhkan untuk mengujiConfirmed for test case "98765" setelah beberapa jam, tetapi dengan pendekatan yang serupa yang menggunakan evaluasi hubung singkat untuk menghindari beberapa pengujian purba bekerja. lebih cepat. Atau, ini bisa ~ 2x lebih cepat jika kita tahu bahwa "2" bukan input (kita dapat menghindari memeriksa angka genap untuk primality) dengan menetapkani=3
awalnya dani+=2
dalam loop, tanpa biaya byte tambahan.Cobalah online!
Penjelasan
while
kondisi ((x in"%s"%i)*all(i%j for j in range(2,i))-1
):(x in"%s"%i)
:True
/1
jika penghitung saat ini berisi urutan angka yang diinginkan di dalamnya;False
/0
sebaliknya.all(i%j for j in range(2,i))
:True
/1
jika penghitung saat ini selalu memiliki sisa ketika dibagi oleh sembarang bilangan bulat dari 2 (inklusif) ke dirinya sendiri (eksklusif), yaitu perdana;False
/0
sebaliknya.The
*
mengalikan dua kondisi bersama-sama, dan bertindak sebagaiand
operator yang - produk tersebutTrue
/1
jika dan hanya jika kedua kondisiTrue
/1
.The
-1
bertindak sebagainot
Operator:False
/0
- 1 hasil dalam-1
, yang dianggap benar, sedangkanTrue
/1
- 1 hasil dalam0
, yang dianggap palsu. Dengan demikian, loop berlanjut sementara nomor tidak mengandung urutan angka yang diinginkan atau tidak prima.Ganti
*
denganand
dan tambahkan tanda kurung di sekitar segala sesuatu selain-1
untuk solusi yang jauh lebih cepat, setara (yang sedikit lebih lama).Sebuah 76 byte - 50 = 26 skor solusi dengan Python 2 diberikan oleh @ ASCII-satunya (menggunakan
``
bukanstr()
,Cobalah online!
sumber
return I
JavaScript, 65 - 50 = 15 poin
Cobalah online!
sumber