एक मुख्य परीक्षण जो कि LITERALLY Prime है


23

एक प्रोग्राम लिखें जो एक निर्दिष्ट संख्या की शुद्धता का परीक्षण करेगा, और आउटपुट को बूलियन मान (सत्य प्रधान है) के रूप में देगा। आपका प्राइम टेस्ट नंबर 1 के लिए मान्य हो सकता है (लेकिन नहीं है)।

यहां पकड़ है: आपके प्रोग्राम को खुद एक अभाज्य संख्या पर योग करना है। हर पात्र (रिक्त स्थान सहित) को उसके यूनिकोड / ASCII मान ( तालिका ) में बदलें । फिर, अपने प्रोग्राम का योग पाने के लिए उन सभी नंबरों को एक साथ जोड़ें।

उदाहरण के लिए, पायथन 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)

यदि आप सभी पात्रों को उनके संबंधित यूनिकोड / ASCII मान में परिवर्तित करते हैं, तो आपको यह मिलता है:

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 

फिर आप उन नंबरों का योग मैन्युअल रूप से या अपने स्वयं के कार्यक्रम के साथ पा सकते हैं। यह विशिष्ट कार्यक्रम 8293 के लिए है, जो एक प्रमुख संख्या है।

बेशक, यह कोड गोल्फ है, इसलिए जितना छोटा आप अपने कार्यक्रम को बेहतर बना सकते हैं। जैसा कि अन्य उपयोगकर्ताओं द्वारा बताया गया है, यह कार्यक्रम बहुत गोल्फ नहीं है।

कुछ नियम:

मान्य इनपुट में STDIN और संकेत शामिल हैं (कोई फ़ंक्शंस नहीं, यह मुफ़्त अतिरिक्त कोड जोड़ने का एक तरीका है)। रिक्त स्थान की अनुमति है, लेकिन केवल अगर वे आपके कार्यक्रम की कार्यक्षमता के लिए महत्वपूर्ण हैं। आउटपुट एक आउटपुट होना चाहिए, न कि केवल एक चर में संग्रहीत या लौटाया गया (प्रिंट, STDOUT, आदि का उपयोग करें)

झंडे का उपयोग किया जा सकता है और इसे शाब्दिक रूप से गिना जाना चाहिए, विस्तारित नहीं। टिप्पणियों की अनुमति नहीं है। गैर-एएससीआईआई पात्रों के लिए, उन्हें अपने संबंधित एन्कोडिंग में मूल्य को सौंपा जाना चाहिए।

अपने कार्यक्रम के आकार और कार्यक्रम के योग को सूचीबद्ध करना सुनिश्चित करें। मैं यह सुनिश्चित करने के लिए परीक्षण करूंगा कि कार्यक्रम वैध हैं।

सौभाग्य!

अपने कार्यक्रम का योग गिनने और जाँचने के लिए कि क्या यह प्रधान है, यहाँ एक स्निपेट है:


12
गैर-गोल्फिंग भाषाओं में, ऐसा लगता है कि आप केवल सबसे छोटा प्राइम-डिसाइडिंग कोड ले सकते हैं, और जब तक कि प्राइम नहीं है, तब तक वैरिएबल नामों को ट्वीक कर सकते हैं।
xnor

5
I / O पर प्रतिबंध क्यों?
जोनाथन एलन

2
"यूनिबाइट मूल्य" क्या है? ????
aditsu

5
आप पात्रों और कोड पृष्ठों के बारे में बात करते हैं। एक यूनिकोड वर्ण में हमेशा एक ही कोड बिंदु होता है, कोई भी बात नहीं है जिसे एन्कोडिंग का उपयोग किया जाता है। गैर-एएससीआईआई पात्रों के लिए, उन्हें अपने संबंधित एन्कोडिंग में मूल्य को सौंपा जाना चाहिए। मुझे लगता है कि आप वास्तव में बाइट मूल्यों का योग चाहते हैं
डेनिस

जवाबों:




6

माइक्रोस्क्रिप्ट II, 2 बाइट्स (राशि 137)

N;

माइक्रोस्क्रिप्ट II, 4 बाइट्स (राशि 353)

N;ph

मैं वास्तव में काफी आश्चर्यचकित हूं कि इन दोनों में प्राइम बाइट के घाव हैं।



4

पायथ, 2 बाइट्स, 127

/P

इसे ऑनलाइन आज़माएं

गैर- 1primes के लिए primes के लिए आउटपुट 0

/कोड बिंदु है 47Pकोड बिंदु है 80

यह काम किस प्रकार करता है:

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

4

हास्केल, 52 बाइट्स, 4421

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

विल्सन प्रमेय।


2
इसे पूर्ण स्टैंडअलोन कार्यक्रम में बदल दिया।
fquarp

::IO Intवास्तव में जरूरी है, जब तक कि सबसे छोटा रास्ता आप एक प्रमुख राशि प्राप्त कर सकते हैं नहीं होना चाहिए।
अर्जन जोहानसन

अच्छा निर्णय। हालाँकि, हम तब कुछ कोड प्राप्त करते हैं कि `hashes 'एक सममूल्य पर। रिक्त स्थान या नई-रेखाओं को जोड़ने से कुछ भी नहीं (यहां तक ​​कि मान भी) होता है, और न ही चर का नाम बदल जाता है (यह चार बार दिखाई देता है, इसलिए इसके कोड को बदलना (सी) को 4 * c और घटाना 4 * c को जोड़ने के लिए कहते हैं) सम। हालांकि, यह लाइनों को तोड़कर छोटा किया जा सकता है और फिर भी छोटा हो सकता है, जो मैंने किया था।
fquarp

1
एक अलग से परीक्षण के साथ 47 बाइट्स: इसे ऑनलाइन आज़माएं! (ध्यान दें कि गणना को सही करने के लिए रिक्त स्थान के बजाय टैब हैं)।
लकोनी

PPCG में भी आपका स्वागत है!
लैकोनी

4

पायथन 2, 50 बाइट्स, 4201

1 के लिए काम करता है। आउटपुट सकारात्मक है अगर प्रमुख, या शून्य नहीं तो।

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

इसे ऑनलाइन आज़माएं


पायथन 2, 44 बाइट्स, 3701

1 के लिए काम नहीं करता है। एक बूलियन आउटपुट।

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

इसे ऑनलाइन आज़माएं



3

05AB1E , 2 बाइट्स,173

p=

स्पष्टीकरण:

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.

इसे ऑनलाइन आज़माएं!


कुछ कुछ "टिप्पणियों की अनुमति नहीं है" लेकिन मुझे लगता है कि प्रभावी नो-ऑप्स ठीक काम करते हैं: डी
मूल्य इंक

2

PHP, 38 बाइट्स, 2791 रुपये

मजेदार तथ्य: इसके $hबजाय $c, योग 2801(एक अभाज्य भी) होगा, और इसका द्विआधारी प्रतिनिधित्व 101011110001दशमलव के रूप में पढ़ा जाता है, यह भी एक प्रमुख संख्या है।

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

कमांड लाइन तर्क, प्रिंट 1या खाली स्ट्रिंग लेता है । साथ चलाना -r

मेरे स्वयं के मुख्य कार्य से लिया गया कोड (मूल पद पर देखो यदि आप कर सकते हैं)।


@ ऑयरर इट्स तय।
तैतस

2

आर, 27 32 बाइट्स, योग 2243 2609

@Rturnbull की बदौलत 5 बाइट्स बचाए

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

यह gmp लाइब्रेरी के इस्प्रिम फ़ंक्शन का उपयोग करता है।

> sum(as.integer(charToRaw('cat(!!gmp::isprime(scan()))')))
[1] 2243
> cat(!!gmp::isprime(scan()))
1: 2243
2: 
Read 1 item
TRUE
> 

cat(!!gmp::isprime(scan()))5 बाइट्स छोटी है, और 2243यह भी प्रमुख है।
rturnbull

@rturnbull उस के लिए धन्यवाद :)
मिकी

1

पायथन 2, 44 बाइट्स, बाइट-राशि 3109

यह xnor का 44 बाइट का कार्यान्वयन है, जिसमें सबसे कम मूल्य वाले वैरिएबल नाम हैं जो एक प्राइम बाइट का योग देते हैं।

1प्राइम और 0अगर नहीं तो प्रिंट ।

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

1

जेली 6 बाइट्स , बाइट-राशि 691

ƓÆḍ,ṠE

1यदि प्रधान है और 0यदि नहीं तो प्रिंट करता है ।

TryItOnline!

हेक्साडेसिमल में बाइट्स 93 0D D5 2C CD 45( कोड पृष्ठ देखें ), या दशमलव में 147 13 213 44 205 69691 के योग हैं , जो कि प्रमुख है।

कैसे?

ƓÆḍ,Ṡ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

Æḍकार्यक्षमता ऐसी है कि अभाज्य संख्या और उनके negations एक वापसी, जबकि अन्य पूर्णांकों नहीं (कंपोजिट और उनके negations एक, एक और शून्य से एक वापसी शून्य और शून्य रिटर्न, विचित्र रूप से पर्याप्त, शून्य से एक की तुलना में अधिक से अधिक संख्या वापसी) करते हैं।

कार्यक्षमता ऐसी है कि नकारात्मक पूर्णांक लौट ऋण एक, शून्य रिटर्न शून्य और धनात्मक पूर्णांक एक वापसी है।

इस प्रकार दो कार्य केवल primes के लिए समान मान लौटाते हैं।

ध्यान दें कि 3 बाइट प्रोग्राम ƓÆPजो सीधे परीक्षण करता है यदि STDIN से इनपुट अभाज्य है दुर्भाग्य से एक प्राइम-योग प्रोग्राम (240) नहीं है।

5 बाइट्स के लिए समानता =(बराबर), e(मौजूद है), या (गैर-वेक्टरिंग बराबर) का उपयोग करके समानता के लिए परीक्षण भी प्राइम-सम-प्रोग्राम नहीं देता है।


वैकल्पिक (शायद स्वीकार्य नहीं) 4 बाइट्स, योग 571

यदि I / O प्रतिबंध अभी भी पूर्ण कार्यक्रमों को अनुमति देते हैं जो एक तर्क लेते हैं।

Æḍ⁼Ṡ

... ऊपर के समान सिद्धांत का उपयोग करना, जहां गैर-वेक्टरिंग समानता है (गैर-वेक्टरिंग पहलू का कोई प्रभाव नहीं है क्योंकि वैसे भी वेक्टराइज़ करने के लिए कुछ भी नहीं है)। हेक्स मान 0D D5 8C CDजो 13 213 140 205दशमलव में हैं , जो 571, एक अभाज्य है।

फिर से ध्यान दें कि 2 बाइट प्रोग्राम ÆPमें एक प्रमुख योग (93) नहीं है।


ƓÆPG(311) और ÆPF(163) ठीक होना चाहिए, मुझे लगता है?
लिन

यूनिकोड के रूप में, के लिए ƓÆḍ,ṠE, मूल्य है 16183, जो संयोग से प्रमुख है!
२०:१

@ लीन हाँ, ऐसा लगता है कि "अनावश्यक कोड प्रतिबंध" (अंतरिक्ष वर्ण को छोड़कर) को ƓÆPGठीक कर दिया गया है । मैंने यह भी पूछा है कि क्या STDIN के उपयोग के बजाय इनपुट लेने वाला कोई प्रोग्राम स्वीकार्य है।
जोनाथन एलन

1
... अगर ऐसी दोनों चीजें ठीक हैं तो ÆP¥3 बाइट्स और 97 हैं।
जोनाथन एलन


1

गणितज्ञ, 21 बाइट्स, 1997

Print@*PrimeQ@Input[]

Input[] reads a line of input (from STDIN if no front end is used, through a dialog box if the Mathematica front end is used), Print@*PrimeQ is the composition (@*) of the Print and PrimeQ functions, and @ is prefix function notation.


1

Perl 6, 24 22 bytes, 1949

say .is-prime
for +get

All three whitespace characters are required.
(Perl 6 doesn't care what kind of whitespace character they are, though, so I chose a newline instead of the more commonly used space for the second one...)



1

Pip, 8 bytes, 511

0Na%,a=1

I wrote a prime checker, and the sum was prime. Convenient. Verify inputs 1-30: Try it online!

Explanation

          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


1

J, 18 Bytes, 1103

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

Not far from optimal, the least I could golf a full program primality test to was 17 Bytes: echo(p:[:".1!:1)1, which unfortunately sums to 1133 = 11*103.

Unfortunately I can't figure out how to get keyboard input working on TIO, so no link yet.

Explanation:

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

Validating the program:

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

1

C (gcc), 62 60 bytes, 4583

Pretty straight-forward. Outputs * if prime, otherwise it outputs a space. Does not work for 1.

-2 thanks to l4m2

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

Try it online!


1
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);} may need to change some variable name for prime sum
l4m2

@l4m2 Nice one!
gastropner

1

AWK, 36 bytes, byte-sum 2239

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

Try it online!

0प्राइम और 1प्राइम के लिए नहीं तो आउटपुट । निश्चित रूप से सबसे कुशल कोड नहीं है, क्योंकि यह हर पूर्णांक की जांच करता है 1कि यह इनपुट को विभाजित करता है या नहीं।


1

एक्सेल (57 बाइट्स, कोड राशि 3547)

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

एक्सेल के पास वास्तव में "इनपुट" नहीं है, लेकिन यह सूत्र यह अपेक्षा करता है कि संख्या A1 में परीक्षण की जाए और जो भी सेल आप इसे छोड़ते हैं उसमें आउटपुट होता है। यह एक सरणी सूत्र है, इसलिए प्रवेश करने के लिए Ctrl-Shift-Enter दबाएँ। इसके बजाय, दर्ज करें।


1

जावा 8, 114 बाइट्स, प्राइम 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);}}

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

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)

मैंने यूनिकोड योग को प्रधान बनाने के xबजाय उपयोग किया है iयहां यूनिकोड योग की जाँच करें।


1

जेली , 4 बाइट, Σ = 239

ÆPa1

इसे ऑनलाइन आज़माएं!

प्रमाण: इसे ऑनलाइन आज़माएं! (जेली के कोड पेज के कार्यक्रम के चार्ट के 1-आधारित सूचकांकों को लें, उन्हें 0-आधारित, योग बनाने के लिए वेतन वृद्धि और फिर देखें कि परिणाम क्या है)।


0

स्माइलबासिक, 42 बाइट्स, 2687

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

यदि संख्या प्रधान है, तो आउटपुट 1 (सही), अन्यथा 0 (गलत)।

कार्यक्रम को प्रधान बनाने के लिए चर नामों को ही नहीं चुना गया। परीक्षण करने के Nलिए n umber Dहै, d ivisor है, और इस Pबात का ट्रैक रखता है कि N, p rime है या नहीं ।



0

रस्ट, 190 बाइट्स, 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)}

Ungolfed

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);
}

1 के लिए काम नहीं करता है


0

|pQ317 के स्कोर के लिए काम करता है। यदि सत्य / अदला-बदली की अनुमति दी जाती है, तो |p!
269 ​​के

धन्यवाद। मुझे नहीं लगता कि चुनौती के लिए आवश्यक है कि स्कोर को कम से कम किया जाए, इसलिए मैंने उस हिस्से को छोटा नहीं किया।
वीजुन झोउ

0

Vispers v2 , 33 बाइट्स

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

इसे ऑनलाइन आज़माएं!

  1. स्कोर: 44381
  2. इसे मान्य बनाने के लिए केवल 6 बाइट्स / 2 वर्ण जोड़े गए!
  3. 1 प्राइम नहीं है

यह काम किस प्रकार करता है

यह उस क्रम में दिखाया गया है, जिसमें इसे निष्पादित किया गया है:

		; 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.