पाई में Primes खोजें


30

हर जगह अपराध हैं ...

वे पाई के अंदर छिप गए

3.141592653 58979 3238 462643 3832 795028841 971693993751

चलो उन primes हो जाओ!

चुनौती

इनपुट को पूर्णांक के रूप में देखते हुए n>0, पता करें कि पहले nअंकों के अंदर कितने प्राइम छिपे हुए हैंPi

उदाहरण

के लिए n=3हम में अभाज्य संख्या के लिए खोज करना चाहिए [3,1,4]। 2 primes के हैं (3,31), इसलिए आपका कोड उत्पादन करना चाहिए, 2
के लिए n=10, पहले 10 अंक हैं [3,1,4,1,5,9,2,6,5,3]और अपने कोड होना चाहिए उत्पादन 12क्योंकि [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]छिपे हुए थे (और मिल गया!)

परीक्षण के मामलों

इनपुट -> आउटपुट

1->1  
3->2  
13->14  
22->28  
42->60  
50->93

150->197  
250->363  
500->895

नियम

आपका कोड कम से कमn=50
हां के लिए सभी प्राइम ढूंढने में सक्षम होना चाहिए , यदि आप जवाब को अमान्य मानते हैं तो एंट्री हार्डकोरोडिंग पसंद करते हैं, तो आप पहले 50 अंकों को हार्डकोड कर सकते हैं।Pi

यह । बाइट्स जीत में सबसे शानदार जवाब!


6
"यदि आप चाहें तो आप पहले 50 अंकों के पाई को हार्डकोड कर सकते हैं" । पहली समस्या हल! अब 50 अंकों के पूर्णांक तक गोल्फ की प्रायोगिक परीक्षा के लिए ... O_o (यह एक अच्छी चुनौती है, लेकिन ठोस गणित निर्मित-इन्स या पुस्तकालयों की आवश्यकता है।)
अर्नुलड

3
@totallyhuman वह क्रम अभी तक OEIS में भी नहीं है! प्रसिद्धि के लिए अपने दावे के लिए समय?
Sanchises

3
पहले 50 मानों के हार्डकोडिंग की अनुमति देने वाला आईएमओ इस चुनौती के लिए हानिकारक है। यह चुनौती मूल रूप से दो भागों की है, 1) पहले 50 मानों को संपीड़ित करने का प्रयास करें, या 2) वास्तव में चुनौती देते हैं।
JAD

2
आमतौर पर इस तरह की चुनौतियों में, जहां गणना कठिन / धीमी / स्मृति गहन हो जाती है, यह कार्यक्रम के लिए सैद्धांतिक रूप से काम करने के लिए पर्याप्त है, बजाय एक मनमाना कटऑफ सेट करने और हार्डकोडिंग की अनुमति देने के लिए।
JAD

3
@BillSteihn इस वेबसाइट की भावना के खिलाफ कई जवाब देने के बाद नियम अपडेट करना। क्या आपने इस प्रश्न को सैंडबॉक्स में पोस्ट किया है ? आपके पास वास्तव में जल्दी प्रतिक्रिया होगी कि हार्डकॉस्ट किए गए उत्तर आएंगे।
ओलिवियर ग्राएगेयर

जवाबों:


20

05AB1E ,  10  8 बाइट्स

अदनान ( pवेक्टरिज़) के लिए -2 बाइट्स धन्यवाद

<žsþŒÙpO

इसे ऑनलाइन आज़माएं! (n = 98413 तक काम करेगा, लेकिन n = 50 के लिए बहुत धीमी गति से भी होगा, जो कि इतनी बड़ी संख्या के लिए परीक्षण करने की आवश्यकता के कारण है - TIO बार 60 सेकंड के लिए n = 50 से बाहर।

कैसे?

<žsþŒÙpO - implicitly push input, n
<        - decrement = n-1
 žs      - pi to that many decimal places (i.e. to n digits)
   þ     - only the digits (get rid of the decimal point)
    Œ    - all sublists
     Ù   - unique values
      p  - is prime? (vectorises) 1 if so, 0 otherwise
       O - sum
         - implicitly print the top of the stack

<žsþŒÙpO8 बाइट्स के लिए काम करना चाहिए
अदनान

आह हाँ pसदिश धन्यवाद!
जोनाथन एलन

2
हाँ! अंत में एक बहुत ही संक्षिप्त कोड गोल्फ उत्तर जिसे मैं वास्तव में समझता हूं! : डी
फेबियन रोइंग 9

11

मैथमेटिका, 76 बाइट्स

Tr[1^Union@Select[FromDigits/@Subsequences@#&@@RealDigits[Pi,10,#],PrimeQ]]&

ओह, कोई निष्पक्ष नहीं, मैं गणितज्ञ गोल्फ से परिचित नहीं हूं। : पी (+1)
पूरी तरह से

@totallyhuman हमने उसी समय यह पोस्ट किया था। यह बहुत अजीब है!
J42161217

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

Tr[1^...]यह सूची की लंबाई खोजने का एक चतुर तरीका है, अच्छा है!
नंबरमान

6

गणितज्ञ, 104 97 90 बाइट्स

Length@DeleteDuplicates@Select[FromDigits/@Subsequences@First@RealDigits[Pi,10,#],PrimeQ]&

हाहाहाहा, मैं यह काम करने में कामयाब रहा। मुझे नहीं पता कि मैथमेटिका का उपयोग कैसे किया जाए। एक्सडी

इनपुट:

[50]

1
आपने मुझसे कुछ सेकंड आगे पोस्ट किया। और हमारे उत्तर बहुत अधिक समान हैं! +1
J42161217

क्या आप अपने द्वारा पोस्ट किए गए नंबरों के बारे में सुनिश्चित हैं (मैं अंकों की गोलाई को दोहराता
जोनाथन एलन

@JonathanAllan 50 96ओपी का कहना है कि 50 अंकों में 93 प्राइम होते हैं, इसलिए सिम्पी की सटीकता बंद हो सकती है ..?
अक्टूबर को पूरी तरह से अमानवीय

@JonathanAllan क्या सिम्पी एक प्रायिकतावादी या एक नियतात्मक व्यावहारिकता परीक्षण का उपयोग कर रहा है? (मेथेमेटिका के PrimeQ के लिए एक ही सवाल है।)
Arnauld

@ अर्नुलद अच्छा बिंदु, निश्चित नहीं।
जोनाथन एलन

3

पायथन 3 , 274 237 207 194 189 बाइट्स

गेहूं के जादूगर को -37 बाइट्स धन्यवाद! -14 बाइट्स Mr.Xcoder को धन्यवाद।

हार्डकोड पी के पहले 50 अंक लेकिन मैन्युअल रूप से सब कुछ गणना करता है।

x=int(input());l="31415926535897932384626433832795028841971693993751"[:x]
print(sum(all(i%m for m in range(2,i))for i in{int(i)for w in range(x)for i in[l[j:j-~w]for j in range(x-w)]}-{1}))

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



l=list("31415...)~ 40 वर्णों को बचाना चाहिए। और यह परिवर्तन आपको map(str,i)बस के साथ बदलने देता है i
एशेल्ली


कुछ अजीब कोड हटाकर 195 बाइट्स
श्री Xcoder


1

आर, 156 123 बाइट्स

cat(cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))[scan()])

सुपर दिलचस्प समाधान। उचित कार्य करना।

@Giuseppe की बदौलत 33 बाइट्स बचाए।

आर (+ संख्या और जीएमपी), 198 बाइट्स

function(n,x=unique(gmp::as.bigz(unlist(sapply(1:n,function(x)substring(gsub("[.]","",numbers::dropletPi(50)),x,x:n))))))min(length(x),sum(sapply(sapply(x[x>0&!is.na(x)],gmp::factorize),length)==1))

उचित समाधान। nइनपुट के रूप में लेता है ।

numbers::dropletPi(50)पाई के पहले 50 दशमलव स्थानों को उत्पन्न करने के लिए उपयोग करता है। gsubदशमलव बिंदु निकालता है। substringपी के लिए हर संभव विकल्प (आश्चर्य आश्चर्य) लेता है n

लौटे सूची चपटा और में बदल जाती है gmpके bigzप्रारूप। यह प्रारूप 50 की लंबाई के पूर्णांक को संग्रहीत करने के लिए आवश्यक है unique। उस वेक्टर के अद्वितीय मूल्यों को लेता है। यह परिणाम में संग्रहीत हो जाता है x

तब हम प्राणशक्ति की जाँच करते हैं। यह मुश्किल है, क्योंकि किनारे-मामलों और झुंझलाहट का एक गुच्छा है:

  • उच्च के लिए n, 0पी में एक है। यह एक प्रमुख शून्य के साथ सबस्ट्रिंग की ओर जाता है। as.bigzइसके NAसाथ उत्पादन होता है, जिसे निकालना होता है।

  • एक समान नोट पर, सबस्ट्रिंग "0"क्रैश हो जाएगा gmp::factorize, इसलिए इसे भी हटाना होगा।

  • के लिए n=1, x = 3। जो अपने आप में ठीक है, लेकिन यह bigzप्रतिनिधित्व करने योग्य 3है, इसलिए sapplyभ्रमित हो जाएगा और 16 अपराधों की रिपोर्ट करेगा। इसके लिए हम वेक्टर की लंबाई x, और उसमें मौजूद प्राइम्स की न्यूनतम मात्रा लेते हैं ।

  • gmp::isprimeमज़बूती से बड़ी संख्या को मज़बूती से संभालने के लिए प्रतीत नहीं हो सकता है। इसलिए इसके बजाय हम gmp::factorizeआउटपुट की लंबाई का उपयोग और जांच करते हैं 1।

तो सभी में, हम 0और NAसे दूर करते हैं x। हम xलंबाई के लिए सभी की जाँच करते हैं। हम घटनाओं की संख्या की गणना करते हैं 1और वापस लौटते हैं min(occurences, length(x))


तुम यहां हो! अब देखते हैं कि कोई और अधिक दिलचस्प समाधान के साथ इसे आउटगोल्फ कर सकता है या नहीं। आप हो सकते हैं!

cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))123 बाइट्स के लिए अपने वेक्टर के बजाय का उपयोग करें :)
Giuseppe

@Giuseppe अच्छा लगा। वह 'कम्प्रेशन' निश्चित रूप से किसी भी कानूनी समाधान को हरा देगा।
JAD

मुझे लगता है कि आर में हार्डकॉडिंग के बिना आर में यह असंभव है या किसी अन्य पैकेज को शुरू करने के बाद से आर में केवल 32-बिट इनट्स हैं, जो निश्चित रूप से 50-अंकीय पूर्णांक का प्रतिनिधित्व नहीं करेगा।
Giuseppe

1
हाँ, मैं इस बारे में कुछ और भी सोच सकता हूँ। 82 हार्डकोड बाइट्स
Giuseppe

0

जेली , 59 32 बाइट्स

-27 बाइट्स एग्री टू द आउटगर्फ़र।

“!⁶⁷¬,6½ạEC.wʠ€Ẉ!+Ẉfṭ¡’Ṿḣ³ẆVQÆPS

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

व्याख्या

“...’Ṿḣ³ẆVQÆPS

“...’           compressed string that evaluates to first 50 digits of pi (314159...)
     Ṿ          uneval; stringify
      ḣ³        first n characters of the string where n is the first command-line argument
        Ẇ       all sublists
         V      convert all elements to integers
          Q     deduplicate
           ÆP   convert all prime elements to 1 and others to 0
             S  sum

आपने उत्तरों के साथ यह स्पैम क्यों किया?
ज़ाचारि

क्योंकि कोई और जवाब नहीं दे रहा था, और मैंने रीप कैप को वैसे भी मारा। : पी
बिलकुल अमानवीय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.