पीरियेशनल नंबर


14

पाई एक अपरिमेय संख्या है , जिसका अर्थ है कि इसका दशमलव प्रतिनिधित्व कभी भी समाप्त या दोहराता नहीं है।

पाई को 41 दशमलव अंकों (40 स्थानों) पर काट दिया गया है 3.1415926535897932384626433832795028841971

यदि हम दशमलव बिंदु को अनदेखा करते हैं और अंकों को सकारात्मक पूर्णांक के अनुक्रम के रूप में सूचीबद्ध करते हैं, तो डुप्लिकेट से बचने के लिए , हम प्राप्त करते हैं 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971( OEIS A064809 )।
(ध्यान दें कि 15अनुक्रम में ऐसा प्रतीत होता है 1 5क्योंकि 1पहले से ही घटित हुआ था।
यह भी ध्यान रखें कि 0ऐसा नहीं होता है क्योंकि यह सकारात्मक नहीं है; 950इसमें पहला शून्य है।)

पहली क्रमिक संख्या के निर्माण के लिए हम इस अनुक्रम का उपयोग पाई के अंकों में अनुक्रमित करने के लिए करते हैं (पहला अंक 3, दूसरा 1, आदि)।

तो पहला पीरियेशनल नंबर का पहला डिजिट पाई का तीसरा डिजिट है,
दूसरा डिजिट पाई का 1 डिजिट का है,
तीसरा डिजिट पाई का चौथा डिजिट है,
चौथा पाइ का चौथा डिजिट है, चौथा पाइ का 15 वां डिजिट है,
और इसी तरह का दूसरा डिजिट है ।
पाई को नकल करने के लिए पहले अंक के बाद एक दशमलव बिंदु जोड़ा जाता है।

इस प्रकार 41 अंकों के लिए पहला क्रमिक संख्या है 4.3195195867462520687356193644029372991880
(ध्यान दें कि 30 वें अंक के लिए मुझे पीआई के 974 वें अंक तक जाना था।)

दूसरे पीरेशनल नंबर के निर्माण के लिए प्रक्रिया को पीआई के बजाय पहले पीरेशनल नंबर का उपयोग करके दोहराया जाता है। (पाई खुद को ज़ीरोथ पीरेशनल नंबर कहा जा सकता है।) इसलिए नया अनुक्रम है 4 3 1 9 5 19 58 ...और पहला पीरियेशनल नंबर दूसरे को बनाने के लिए अनुक्रमित किया जाता है, जो शुरू होता है 9.14858...

इसके अलावा एक ही तरह से पीरेशनल नंबर बनाए जाते हैं, जिनमें से प्रत्येक को पहले एक से उत्पन्न किया जाता है।

चुनौती

आपका काम कम से कम कार्यक्रम संभव है कि दो पूर्णांकों में लेता है लिखना है, Nऔर D, और आउटपुट Nवें pirrational संख्या छोटा करने के लिए Dदशमलव अंक।

Dहमेशा सकारात्मक है, लेकिन Nगैर नकारात्मक है, और Dजब ऑफ़ पाई अंक उत्पादन होना चाहिए N0. है
जब D1 है यह नहीं बात दशमलव बिंदु वर्तमान या नहीं है अगर है।

इनपुट को स्टडिन या कमांड लाइन से आना चाहिए और आउटपुट को stdout (या आपकी भाषा के निकटतम विकल्पों) पर जाना चाहिए।

आपका प्रोग्राम 2 Nऔर 16 केD नीचे के सभी इनपुट मूल्यों के लिए काम करना चाहिए , लेकिन यह समय पर या कुशल होने की आवश्यकता नहीं है।

बाइट्स में सबसे छोटा कोड जीतता है।

(ध्यान दें कि अन्य आधारों में प्रायोगिक संख्याएँ बाहर निकलती हैं लेकिन इस चुनौती में सब कुछ आधार १० में किया गया है)


हम निर्मित में उपयोग कर सकते ऑफ़ पाई मनमाना परिशुद्धता अभ्यावेदन प्राप्त करने के लिए अपने अंक?
मार्टिन एंडर

1
@ मार्टिनबटनर ज़रूर। जब तक आप केवल पाई के अंक प्राप्त कर रहे हैं, तब तक आप ऑनलाइन भी पाई के अंक प्राप्त कर सकते हैं ।
केल्विन के शौक

@ केल्विन के शौक: आह अच्छा तो मैं सिर्फ एक फ़ाइल में पाई के पहले 64ki अंक हो सकता है? क्या मुझे फ़ाइल नाम के लिए +1 जोड़ना चाहिए?
क्लाउडी सिप

क्या वह इनपुट रेंज सही है? के लिए N=1, D=13393उदाहरण के लिए, आप पीआई के 31 दस लाखवाँ अंकों आवश्यकता होगी
Claudiu

पाई का पहला 1 अरब अंक केवल आप 1 pirrational संख्या के 42,598 अंक हो जाता है
Claudiu

जवाबों:


3

पायथन 292 बाइट्स

काफी अक्षम, मैं केवल N = 3 के कुछ अंक और N = 4 में से कोई भी प्राप्त करने में सक्षम रहा हूं।

import sympy
def P(N,D,s=''):
 if N<1:return'3'+`sympy.pi.evalf(D+9)`[2:-9]
 for i in range(D):
    h=[];l='';j=i;x=0
    while-~j:
     x+=1;d=P(N-1,x)[-1];l+=d
     while'1'>P(N-1,x+1)[-1]:x+=1;l+='0'
     if(l in h)<1:h+=[l];l='';j-=1
    s+=P(N-1,int(h[i]))[-1]
 return s
s=P(*input())
print s[0]+'.'+s[1:]

नमूना इनपुट:

0,20
3.1415926535897932384

1,20
4.3195195867462520687

2,10
9.148583196

3,5
9.9815

Golfs: बदलें =="0"करने के लिए <"1"। लूप को एक लाइन बनाते हुए इनर बनाएं। चारों ओर रिक्त स्थान निकालें x += 1if l not in h-> if(l in h)<1: N==0->N<1
isaacg

@isaacg उन लोगों के लिए धन्यवाद, जब मैं पोस्ट किया और कुछ स्पष्ट चीजें याद की तो मैं थोड़ा हड़बड़ी में था। मुझे शायद एहसास नहीं था कि आप स्ट्रिंग तुलना कर सकते हैं और if(l in h)<1यह भी बहुत चालाक है।
9

कुछ और: ( ) के sपैरामीटर के रूप में प्रारंभ करें । शायद बैकटिक्स के साथ लिखा जा सकता है। अंतरिक्ष बचाता है। बनाओ एक सेट और के साथ प्रारंभ करें, फिर लिखने के रूप में । Pdef P(N,D,s=''):str(...)while'1'>...hh=l,={''}l in h{l}<h
flornquake

@flornquake यह बहुत चालाक है, विशेष रूप से जिस तरह से आप इसे शुरू करते हैं तो अजगर इसे एक तानाशाही नहीं समझता। जैसा कि मैं इस में डाल रहा था, मुझे एक काफी बड़ा अनुकूलन महसूस हुआ, जिसे दुर्भाग्य hसे आदेश देने की आवश्यकता थी। फिर भी, यह एक साफ-सुथरी चाल है जिसे मैं याद रखूंगा।
केसाब

@ शक यह और भी अच्छा है। :) while j+1:को छोटा किया जा सकता है while-~j, btw।
कांटा

4

हास्केल, 431 400 369

import Data.List
g(q,r,t,k,n,l)|4*q+r-t<n*t=n:g(q#0,(r-n*t)#0,t,k,div(r#(30*q))t-n#0,l)|1<2=g(q*k,(2*q+r)*l,t*l,k+1,div(q*(7*k+2)+r*l)(t*l),l+2)
u w@(x:y:xs)=x:v y xs 0 w
v a(r:s)n w|a`elem`take n(u w)||r==0=v(a#r)s n w|1<2=a:v r s(n+1)w
m p=map(genericIndex p.pred)$u p
a#b=a*10+b
(x:s)%n=show x++'.':show(foldl1(#)$n`take`s)
f n d=print$iterate m(g(1,0,1,1,3,3))!!n%d

होगा अनंत सूची प्यार! पर्याप्त समय और स्मृति को देखते हुए, यह कार्यक्रम अंततः किसी भी एन और डी (मुझे लगता है) के लिए सही उत्तर की गणना करेगा।

मैं gएक स्पिगुट एल्गोरिथ्म का उपयोग करके पाई के अंकों को उत्पन्न कर रहा हूं (बेशर्मी से स्टेनली vरैबिनोविट नामक एक व्यक्ति से चुराया गया है), अंकों को समूहीकृत करना / उपयोग करके अनुक्रम बनाना और इनका उपयोग करके एक कृतिम संख्या उत्पन्न करना m

यहाँ यह कार्रवाई में है:

λ> f 0 10
"3.1415926535"
λ> f 1 10
"4.3195195867"
λ> f 2 10
"9.Interrupted. --didn't have the time to wait for this to finish
λ> f 2 4
"9.1485"

1
मैंने सोचा "हास्केल!" जब मैंने प्रश्न देखा, नीचे स्क्रॉल किया, और मुस्कुराया।
सोहम चौधरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.