পিরেশনাল সংখ্যা


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 ইত্যাদি)।

সুতরাং প্রথম পাইরেশনাল সংখ্যার প্রথম অঙ্কটি পাইয়ের 3 য় অঙ্ক,
দ্বিতীয় অঙ্ক পাইয়ের 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 হয়
যখন আউটপুট হওয়া উচিতD 1 1 হয় দশমিক বিন্দু উপস্থিত থাকে কি না তা বিবেচ্য নয়।

ইনপুটটি স্টিডিন বা কমান্ড লাইন থেকে আসা উচিত এবং আউটপুট স্টাডআউটে (বা আপনার ভাষার নিকটতম বিকল্পগুলি) যেতে হবে।

আপনার প্রোগ্রামটি 2 16 এর নীচে Nএবং Dনীচের সমস্ত ইনপুট মানগুলির জন্য কাজ করা উচিত তবে এটি সময়োপযোগী বা দক্ষ হওয়ার দরকার নেই।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

(নোট করুন যে পাইরেশনাল সংখ্যাগুলি অন্যান্য ঘাঁটিতে প্রস্থান করে তবে এই চ্যালেঞ্জের সমস্ত কিছুই 10 বেসে করা হয়েছে)


আমরা বিল্ট ইন ব্যবহার করতে পারেন Pi এর অবাধ-স্পষ্টতা উপস্থাপনা পেতে তার সংখ্যা?
মার্টিন এন্ডার

1
@ মার্টিনব্যাটনার শিওর আপনি চাইলেই অনলাইনে পাই এর অঙ্কগুলি পেতে পারেন যতক্ষণ আপনি কেবল পাই এর অঙ্কগুলি পাচ্ছেন could
ক্যালভিন এর সখ

@ ক্যালভিনের শখগুলি: আহা খুব ভাল তাই আমি কোনও ফাইলের মধ্যে পাই এর প্রথম প্রথম 64ki সংখ্যা পাই? ফাইল নামের জন্য আমাকে +1 যুক্ত করা উচিত?
ক্লদিউ

এটা কি ইনপুট পরিসরটি সঠিক? জন্য N=1, D=13393উদাহরণস্বরূপ, যদি আপনি পাই এর 31 দশলক্ষ ভাগের ভাগ অঙ্ক প্রয়োজন চাই
Claudiu

পাই এর প্রথম 1 বিলিয়ন ডিজিটের কেবলমাত্র আপনি 1 ম pirrational সংখ্যা 42.598 ডিজিটের পায়
Claudiu

উত্তর:


3

পাইথন 292 বাইট

বেশ অদক্ষ, আমি কেবলমাত্র এন = 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
7'50 এ isacac

@ আইসাকগ তাদের জন্য ধন্যবাদ, যখন আমি কিছু স্পষ্ট জিনিস পোস্ট করেছি এবং মিস করেছি তখন আমি কিছুটা ভিড় করেছিলাম। আমি সম্ভবত বুঝতে পারি না যে আপনি স্ট্রিং তুলনা করতে পারবেন যদিও এবং if(l in h)<1এটিও বেশ চালাক।
কেএসব

আরও কিছু: ( ) এর sপ্যারামিটার হিসাবে শুরু করুন । সম্ভবত ব্যাকটিক্স দিয়ে লেখা যেতে পারে। স্থান বাঁচায় করুন একটি সেট সঙ্গে আরম্ভ , তারপর লিখতে যেমন । Pdef P(N,D,s=''):str(...)while'1'>...hh=l,={''}l in h{l}<h
ফ্লোরনারকোপ

@ ফ্লার্নকোয়েক এটি বেশ চালাক, বিশেষত আপনি যেভাবে এটি সূচনা করেছিলেন তাই অজগরটিকে এটি একটি ডিক মনে করে না। যদিও আমি এটি রাখছিলাম, আমি বুঝতে পেরেছিলাম একটি মোটামুটি বড় অপ্টিমাইজেশন যা দুর্ভাগ্যক্রমে hআদেশ করার প্রয়োজন ছিল। তবুও, এটি একটি ঝরঝরে কৌশল আমি চেষ্টা করে মনে রাখব।
কেএসব

@ কেস্যাব এটি আরও ভাল। :) while j+1:ছোট করা যেতে পারে while-~j, বিটিডাব্লু।
ফ্লোরনারকোপ

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 ব্যবহার করে পাইয়ের অঙ্কগুলি তৈরি করছি (স্ট্যানলে রবিনোভিটস নামে একটি লোকের সাথে নির্লজ্জভাবে চুরি হয়েছি), অঙ্কগুলি গোষ্ঠী করে / ব্যবহার করে ক্রম তৈরি করছি এবং এগুলি ব্যবহার করে একটি পাইরেশনাল নম্বর তৈরি করছিvm

এখানে এটি কার্যকর হয়:

λ> 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
আমি ভেবেছিলাম "হাস্কেল!" যখন আমি প্রশ্নটি দেখলাম, স্ক্রোল করে নামলাম এবং হাসলেন।
সোহম চৌধুরী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.