Tes prima yang pada dasarnya BENAR-BENAR

23

Tulis program yang akan menguji keutamaan angka yang ditentukan, dan berikan output sebagai nilai Boolean (True is prime). Tes utama Anda dapat (tetapi tidak harus) valid untuk nomor 1.

Inilah intinya: program Anda sendiri harus dijumlahkan ke bilangan prima. Konversi setiap karakter (termasuk spasi) ke nilai Unicode / ASCII ( tabel ). Kemudian, tambahkan semua angka itu bersama-sama untuk mendapatkan jumlah program Anda.

Misalnya, ambil program yang tidak terlalu bagus yang saya tulis dengan Python 3.3:

q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
    if y%x==0:
        q=False
if not q:
    q=True
print(q)

Jika Anda mengonversi semua karakter ke nilai Unicode / ASCII yang sesuai, Anda mendapatkan:

113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41 

Anda kemudian dapat menemukan jumlah angka-angka itu secara manual atau dengan program Anda sendiri. Program khusus ini berjumlah 8293, yang merupakan bilangan prima.

Tentu saja, ini Code Golf, jadi semakin kecil Anda dapat membuat program, semakin baik. Seperti yang ditunjukkan oleh pengguna lain, program ini tidak terlalu golf.

Beberapa aturan:

Input yang valid termasuk STDIN dan prompt (tidak ada fungsi, itu hanya cara untuk menambahkan kode tambahan gratis). Spasi diizinkan, tetapi hanya jika itu penting untuk fungsionalitas program Anda. Output harus berupa output, tidak hanya disimpan dalam variabel atau dikembalikan (gunakan cetak, STDOUT, dll.)

Bendera dapat digunakan dan harus dihitung secara harfiah, tidak diperluas. Komentar tidak dibolehkan. Adapun karakter non-ASCII, mereka harus ditugaskan ke nilai di masing-masing pengkodean.

Pastikan untuk mencantumkan ukuran dan jumlah program Anda. Saya akan menguji untuk memastikan program yang valid.

Semoga berhasil!

Berikut ini cuplikan untuk menghitung jumlah program Anda dan memeriksa apakah programnya prima:

Nuh L
sumber
12
Dalam bahasa non-golf, sepertinya Anda hanya bisa mengambil kode penentu prime yang terpendek, dan mengubah nama variabel hingga jumlahnya menjadi prima.
xnor
5
Mengapa pembatasan pada I / O?
Jonathan Allan
2
Apa itu "Nilai Unibyte"?! ???
aditsu
5
Anda berbicara tentang karakter dan halaman kode. Karakter Unicode selalu memiliki titik kode yang sama, tidak peduli pengkodean mana yang digunakan untuk mewakilinya. Adapun karakter non-ASCII, mereka harus ditugaskan ke nilai di masing-masing pengkodean. membuat saya berpikir Anda benar-benar ingin jumlah nilai byte menjadi prima
Dennis

Jawaban:

22

Halo Dunia! , 13 byte,1193

hello, world!
Gurupad Mamadapur
sumber
1
sempurna . Saya pernah mendengar bahasa ini sebelumnya, tetapi untuk berpikir itu juga kebetulan memiliki jumlah byte yang sempurna untuk tantangan ini: D
Value Ink
7

Ruby, jumlah 3373, 37 byte

require'prime'
g=gets.to_i
p g.prime?
Nilai Tinta
sumber
6

Microscript II, 2 byte (jumlah 137)

N;

Microscript II, 4 byte (jumlah 353)

N;ph

Saya sebenarnya cukup terkejut bahwa keduanya memiliki jumlah byte primer.

SuperJedi224
sumber
4

Pyth, 2 byte, 127

/P

Cobalah online

Output 1untuk bilangan prima, 0untuk non-bilangan prima.

/memiliki titik kode 47. Pmemiliki titik kode 80.

Bagaimana itu bekerja:

/P
/PQQ    Implicit variables.
        Q = input
 PQ     Prime factorize Q.
/  Q    Count how many times Q appears. 1 if prime, 0 if not.
isaacg
sumber
4

Haskell, 52 byte, 4421

main=do
 k<-readLn
 print$product[1..k-1]`rem`k==k-1

Teorema Wilson.

fquarp
sumber
2
Mengubahnya menjadi program mandiri penuh.
fquarp
::IO IntBenar - benar tidak perlu kecuali jika itu cara terpendek Anda bisa mendapatkan jumlah prima.
Ørjan Johansen
Panggilan yang bagus. Namun, kami kemudian mendapatkan beberapa kode yang `hashes 'hingga nilai genap. Menambahkan spasi atau baris baru tidak menghasilkan apa-apa (bahkan nilai), juga tidak mengubah nama variabel (muncul empat kali, jadi mengganti kodenya (katakanlah c) sama dengan mengurangi 4 * c dan menambahkan 4 * c ', meninggalkan jumlah rata
rata.Namun
1
47 byte dengan tes primality berbeda: Cobalah online! (perhatikan bahwa ada tab alih-alih spasi untuk menghitung dengan benar).
Laikoni
Juga selamat datang di PPCG!
Laikoni
4

Python 2, 50 byte, 4201

Berfungsi untuk 1. Output positif jika prima, atau nol jika tidak.

p=input();print all(p%m for m in range(2,p))*~-p;p

Cobalah online


Python 2, 44 byte, 3701

Tidak berfungsi untuk 1. Menghasilkan Boolean.

p=input();print all(p%k for k in range(2,p))

Cobalah online

mbomb007
sumber
3

JavaScript (ES6), 47 byte, 3541

Ini sangat didasarkan pada fungsi pengujian primality produk ETH , yang dapat ditemukan di sini .

alert((F=(n,x=n)=>n%--x?F(n,x):!~-x)(prompt()))

Arnauld
sumber
3

05AB1E , 2 byte,173

p=

Penjelasan:

p  # Checks if number is prime - returns 1 if true and 0 if false. Uses implicit input.
 = # Wouldn't usually be required for this sort of program, but I added it to make the sum prime.

Cobalah online!

Okx
sumber
Sesuatu sesuatu "komentar tidak diperbolehkan" tapi saya kira efektif no-ops berfungsi dengan baik: D
Value Ink
2

PHP, 38 byte, jumlah 2791

Fakta menyenangkan: Dengan $halih-alih $c, jumlahnya akan menjadi 2801(juga prima), dan representasi binernya 101011110001dibaca sebagai desimal juga merupakan bilangan prima.

for($b=$c=$argv[1];$c%--$b;);echo$b<2;

mengambil argumen baris perintah, cetakan 1atau string kosong. Jalankan dengan -r.

Kode diambil dari fungsi utama saya sendiri (lihat posting asli jika Anda bisa).

Titus
sumber
@Artyer Sudah diperbaiki.
Titus
2

R, 27 32 byte, jumlah 2243 2609

Menyimpan 5 byte berkat @rturnbull

cat(gmp::isprime(scan(),r=43)>0)

Ini memanfaatkan fungsi isprime pustaka gmp.

> sum(as.integer(charToRaw('cat(!!gmp::isprime(scan()))')))
[1] 2243
> cat(!!gmp::isprime(scan()))
1: 2243
2: 
Read 1 item
TRUE
> 
MickyT
sumber
cat(!!gmp::isprime(scan()))lebih pendek 5 byte, dan jumlah untuk 2243, juga prima.
rturnbull
@ Arturnbull terima kasih untuk itu :)
MickyT
1

Python 2, 44 byte, byte-sum 3109

Ini adalah implementasi 44 byte xnor dengan nama variabel bernilai terendah yang menghasilkan jumlah byte primer.

Mencetak 1jika prima dan 0jika tidak.

C=B=1
exec"B*=C*C;C+=1;"*~-input()
print B%C
Jonathan Allan
sumber
1

Jelly 6 byte , byte-jumlah 691

ƓÆḍ,ṠE

mencetak 1jika prima dan 0jika tidak.

TryItOnline!

Bytes dalam heksadesimal adalah 93 0D D5 2C CD 45(lihat halaman kode ), atau dalam desimal 147 13 213 44 205 69yang berjumlah 691, yang merupakan prime.

Bagaimana?

ƓÆḍ,ṠE - Main Link: no arguments
Ɠ      - read and evaluate a line from STDIN (integer expected)
 Æḍ    - proper divisor count
   ,   - paired with
    Ṡ  - sign
     E - all equal? - returns a boolean (1 or 0)
       - implicit print

The Æḍfungsi adalah seperti yang prima dan negations mereka kembali satu sementara bilangan bulat lain tidak (komposit dan negations mereka kembali jumlah yang lebih besar dari satu, satu dan minus satu kembali nol dan nol kembali, anehnya, minus satu).

The fungsi adalah seperti yang bilangan bulat negatif kembali minus satu, nol kembali nol dan bilangan bulat positif kembali satu.

Dengan demikian kedua fungsi hanya mengembalikan nilai yang sama untuk bilangan prima.

Perhatikan bahwa program 3 byte ƓÆPyang secara langsung menguji apakah input dari STDIN adalah prima sayangnya bukan program prime-sum (240).

Pengujian untuk kesetaraan menggunakan =(sama dengan), e(ada di), atau (sama dengan non-vektor) untuk 5 byte juga tidak menghasilkan program prime-sum.


Alternatif (mungkin tidak dapat diterima) 4 byte, jumlah 571

Jika pembatasan I / O masih memungkinkan program lengkap yang mengambil argumen.

Æḍ⁼Ṡ

... menggunakan prinsip yang sama seperti di atas, di mana kesetaraan non-vektorisasi (aspek non-vektorisasi tidak berpengaruh karena toh tidak ada yang di-vector-kan). Nilai hex 0D D5 8C CDadalah 13 213 140 205dalam desimal yang berjumlah 571, sebuah bilangan prima.

Sekali lagi perhatikan bahwa program 2 byte ÆPtidak memiliki jumlah prima (93).

Jonathan Allan
sumber
ƓÆPG(311) dan ÆPF(163) seharusnya baik-baik saja, saya pikir?
Lynn
Sebagai Unicode, untuk ƓÆḍ,ṠE, nilainya 16183, yang kebetulan adalah yang utama!
Artyer
@ Lynna Ya, sepertinya "pembatasan kode yang tidak perlu" (kecuali untuk karakter spasi) telah diangkat, membuat ƓÆPGOK. Saya juga bertanya apakah program yang mengambil input daripada penggunaan STDIN dapat diterima.
Jonathan Allan
1
... Jika kedua hal tersebut baik-baik saja maka ÆP¥3 byte dan 97.
Jonathan Allan
1

CJam , 4 byte, byte-sum 439

qimp

Menggunakan uji sifat bawaan.

Cobalah online!

Solusi alternatif, 4 byte, jumlah 461

r~mp
Kucing Bisnis
sumber
1

Mathematica, 21 byte, 1997

Print@*PrimeQ@Input[]

Input[]membaca garis input (dari STDIN jika tidak ada ujung depan yang digunakan, melalui kotak dialog jika ujung depan Mathematica digunakan), Print@*PrimeQadalah komposisi ( @*) dari Printdan PrimeQfungsi, dan @merupakan notasi fungsi awalan.

ngenisis
sumber
1

Perl 6 , 24 22 byte,1949

say .is-prime
for +get

Ketiga karakter spasi putih diperlukan.
(Perl 6 tidak peduli apa jenis karakter spasi mereka, meskipun, jadi saya memilih baris baru bukan ruang yang lebih umum digunakan untuk yang kedua ...)

seseorang
sumber
1

Pip , 8 byte,511

0Na%,a=1

Saya menulis pemeriksa prima, dan jumlahnya prima. Mudah. Verifikasi input 1-30: Coba online!

Penjelasan

          a is first command-line argument
    ,a    Numbers from 0 to a-1
  a%      Take a mod each of those numbers (a%0 gives nil)
0N        Count number of times 0 occurs in that list
      =1  If 0 occurs only 1 time (for a%1), then a is prime
DLosc
sumber
1

Pari / GP , 23 byte,2111

print(2>=numdiv(input))

Cobalah online!

alephalpha
sumber
Tantangan ini tampaknya tidak memungkinkan fungsi.
Ørjan Johansen
1

J, 18 Bytes, 1103

echo 1&p:".(1!:1)1

Tidak jauh dari optimal, paling tidak saya bisa golf tes program primality penuh adalah 17 Bytes:, echo(p:[:".1!:1)1yang sayangnya berjumlah 1133 = 11 * 103.

Sayangnya saya tidak tahu bagaimana cara mendapatkan input keyboard bekerja pada TIO, jadi belum ada tautan.

Penjelasan:

echo 1&p:".(1!:1)1  | Full program
           (1!:1)1  | Read a line of input from keyboard
         ".         | Evaluate (converts string to int)
     1&p:           | 1 for prime, 0 for composite
echo                | Print result. The space is required, as 'echo1' would be interpreted as a variable

Memvalidasi program:

   1 p:+/u:inv'echo 1&p:".(1!:1)1'  NB. Convert to ints, sum, and test primality
1
Bolce Bussiere
sumber
1

C (gcc) , 62 60 byte, 4583

Cukup mudah. Output * jika prima, jika tidak output spasi. Tidak berfungsi untuk 1.

-2 Berkat l4m2

p;main(i){for(scanf("%d",&p);++i<p;)p=p%i?p:0;puts("*"+!p);}

Cobalah online!

gastropner
sumber
1
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}mungkin perlu mengubah beberapa nama variabel untuk prime sum
l4m2
@ l4m2 Bagus sekali!
gastropner
1

AWK , 36 byte, byte-jumlah 2239

{for(a=1;$0%++a&&a<$0;);$0=(a==$0)}1

Cobalah online!

Output 0jika tidak prima dan 1untuk prima. Jelas bukan kode yang paling efisien, karena memeriksa setiap bilangan bulat lebih besar daripada 1melihat apakah itu membagi input.

Robert Benson
sumber
1

Excel (57 byte, jumlah kode 3547)

=XOR(0<PRODUCT(MOD(A1,ROW(OFFSET(D2,0,,SQRT(A1))))),3>A1)

Excel tidak benar-benar memiliki "input" seperti itu, tetapi rumus ini mengharapkan angka yang akan diuji berada di A1 dan output ke sel apa pun yang Anda masukkan. Ini adalah rumus array, jadi tekan Ctrl-Shift-Enter untuk memasukkan itu, bukan Enter.

Sophia Lechner
sumber
1

Java 8, 114 byte, Perdana 10037

interface M{static void main(String[]a){long n=new Long(a[0]),x=2;for(;x<n;n=n%x++<1?0:n);System.out.print(n>1);}}

Cobalah online.

Penjelasan:

interface M{                     // Class
  static void main(String[]a){   //  Mandatory main-method
    long n=new Long(a[0]),       //   The first argument as number
    x=2;for(;x<n;n=n%x++<1?0:n); //   Check if `n` is a prime
    System.out.print(n>1);}}     //   Print whether `n` was a prime
                                 //    (if `n` is still the same: it's a prime;
                                 //     if `n` is now 0 or 1: it's not a prime)

Saya telah menggunakan xbukannya imembuat jumlah unicode menjadi prima. Verifikasikan jumlah unicode di sini.

Kevin Cruijssen
sumber
1

Jelly , 4 byte, Σ = 239

ÆPa1

Cobalah online!

Bukti: Coba online! (ambil indeks berbasis 1 dari karakter program dari halaman kode Jelly, turunkan untuk menjadikannya berbasis 0, jumlah lalu periksa apakah hasilnya prima).

Erik the Outgolfer
sumber
0

SmileBASIC, 42 byte, 2687

INPUT N:FOR D=2TO N/2P=P+!(N MOD D)NEXT?!P

Output 1 (benar) jika angkanya prima, sebaliknya 0 (salah).

Nama-nama variabel tidak hanya dipilih untuk membuat program utama. Nadalah n Banyaknya untuk menguji, Dadalah d ivisor, dan Pmelacak apakah N adalah p rime.

12Me21
sumber
0

Rust, 190 byte, skor 15013

fn main(){let A=&mut"".into();std::io::stdin().read_line(A);let(B,mut C)=(A.trim().parse::<u64>().unwrap(),true);for H in 2..((B as f64).sqrt()+1.0) as u64{if B%H==0{C=false}}print!("{}",C)}

Tidak disatukan

fn main() {
    let input = &mut "".into();
    std::io::stdin().read_line(input);
    let (number, mut prime) = (input.trim().parse::<u64>().unwrap(), true);

    for x in 2..((number as f64).sqrt() + 1.0) as u64 {
        if number % x == 0 {
            prime = false;
        }
    }

    print!("{}", prime);
}

Tidak berfungsi untuk 1

dragonite44
sumber
0

Stax , 349

|pq

Jalankan dan debug itu

Weijun Zhou
sumber
|pQ bekerja untuk skor 317. Jika menukar kebenaran / kepalsuan diizinkan, |p! bekerja juga untuk 269.
Khuldraeseth na'Barya
Terima kasih. Saya tidak berpikir tantangan mengharuskan skor dikurangi sehingga saya tidak mengubah bagian itu.
Weijun Zhou
0

Bisikan v2 , 33 byte

>>> ⊤ℙ∘ℕ
> Input
>> 1∘2

Cobalah online!

  1. Skor: 44381
  2. Hanya 6 byte / 2 karakter yang ditambahkan untuk membuatnya valid!
  3. 1 bukan prima

Bagaimana itu bekerja

Ini ditunjukkan dalam urutan yang dijalankan di:

		; Line 3:
>>  ∘		; Compose...
   1            ; Line 1 with
     2          ; The result of line 2

		; Line 2:
> Input		; Retrieve a line of input

		; Line 1:
>>> ⊤		; The input is...
     ℙ		; Prime
      ∘		; And it is...
       ℕ	; Natural
caird coinheringaahing
sumber