পাই এর অঙ্কগুলি গণনা করুন


15

এটি কিছুটা আলাদা কাজ। 1024 তম হেক্সাডেসিমাল স্থান থেকে শুরু করে 24 এর 1024 হেক্সাডেসিমাল অঙ্কগুলি গণনা করুন।

আনুষ্ঠানিকভাবে: আপনার প্রোগ্রামটি কম 1 মিনিটের মধ্যে শেষ হতে হবে এবং নিম্নলিখিত আউটপুট উত্পাদন করতে হবে:

25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202e5b9c5832603766295cfa911c819684e734a41b3472dca7b14a94a

সংক্ষিপ্ত দৈর্ঘ্যের সাথে প্রোগ্রামটি জয়ী। রানটাইমে আপনাকে সমস্ত অঙ্ক গণনা করতে হবে। আপনাকে যে অ্যালগরিদমটি গণনা করে তা প্রয়োগ করতে হবে না π; যদি আপনার ভাষা ইতিমধ্যে সেই কার্যকারিতা সরবরাহ করে তবে আপনি এটি ব্যবহার করতে পারেন।


হাহ, সহজ হওয়া উচিত। (+1, স্থির) আমি বাজি ধরছি আমি কয়েক সেকেন্ডেরও কম সময়ে এটি সম্পাদন করতে পারি।
মতিন উলহাক

@ মন্টু: এবং? আপনার সমাধান কোথায়?
FUZxxl

আমি এটা করতে ভুলে গেছি। :) বিটিডাব্লু, গতি! = কোড-গল্ফ।
মতিন উলহাক

@ মন্টু: আমি জানি। তবে আমি আরও মনে করি, এই জাতীয় কাজটি এত সহজ কাজের জন্য 5 দিন একটি ভাল সময়।
FUZxxl

উত্তর:


13

সেজ, 29 চর

এটি প্রযুক্তিগতভাবে প্রতারণামূলক নয়, যেহেতু রানটাইমে অঙ্কগুলি গণনা করা হয়। বলেছিল, এটি এখনও নরকের মতো সস্তা।

hex(floor(pi*2^8192))[1025:]

1
অবশ্যই প্রতারণা নয়।
FUZxxl

11
এমএমএমএম, ফ্লোর পাই
ব্রেডবক্স

13

শেল ইউটিলিটিস: 48

curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'

  • রানটাইমের সময় সমস্ত আউটপুট "গণনা করা" হয়। (সমাধান পোস্ট করার জন্য ওপিকে ধন্যবাদ)
  • এক মিনিটের নিচে চলে। (আপনার ইন্টারনেট সংযোগ গতির উপর নির্ভরশীল হতে পারে)

সাধারণত আমি এই ধরণের সমাধানগুলিকে হ্রাস করি, কারণ এগুলি নিয়মগুলির একটি সাধারণ অপব্যবহার এবং আর মজার নয়। তবে কেবলমাত্র আপনি সরবরাহিত রেফারেন্স সমাধানটি নিতে এবং ছদ্মবেশী লেখার জন্য সমস্ত আউটপুট রানটাইমের সময় "গণনা করা" হয়। (সমাধান পোস্ট করার জন্য ওপিকে ধন্যবাদ) , আমি আপনাকে একটি
উত্সাহ দিচ্ছি

গল্ফ সংস্করণ: curl -sL ow.ly/shKGY|grep -Po \\w{99,}(37) ড্যাশ কাজ করে। বাশের অতিরিক্ত বাইট লাগবে।
ডেনিস

6

জে, 156, 140, 137 127

d=:3 :'1|+/4 _2 _1 _1*+/(y&(16^-)%1 4 5 6+8*])"0 i.y+9'
,1([:}.'0123456789abcdef'{~[:|.[:<.[:(],~16*1|{.)^:8 d)"0\1024x+8*i.128

বিবিপি সূত্র ব্যবহার করে।

না না এক মিনিটেরও কম সময়ে চালানো (কিন্তু আমরা জে উত্তর আছে: P)

Π এর প্রথম 104 সংখ্যার উদাহরণ (এটি দ্রুত চলে):

,1([:}.'0123456789abcdef'{~[:|.[:<.[:(],~16*1|{.)^:8 d)"0\8*i.13x

243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89
452821e638d01377be5466cf34e90c6cc0ac29b7

সংখ্যাগুলি হেক্সাডেসিমাল রূপান্তর করতে আপনি কেন #: ব্যবহার করবেন না?
FUZxxl

আপনি কি বোঝাতে চাচ্ছেন তা আমি নিশ্চিত নই. #:হেক্স ডিজিট আউটপুট হবে না।
এলেভেক্স

আইএমএইচও এটি আপনার বর্তমান পদ্ধতির চেয়ে হেক্স-ডিজিট উত্পন্ন করার জন্য #: এবং পুনরায় আকারটি ব্যবহার করা সহজ।
FUZxxl

আপনি কিছু মানে (... 16 #:) Pi? আমি মনে করি আমাদের কাছে পর্যাপ্ত অঙ্ক নেই তাই আমাদের সেগুলি যেভাবেই করতে হবে।
এলেভেক্স

1
বিটিডাব্লু, আমি খুঁজে পেয়েছি যে hfdসংখ্যাগুলি হেক্সাডেসিমালে রূপান্তর করার ক্রিয়া আছে।
FUZxxl

5

জাভাস্ক্রিপ্ট, 536

(কেবলমাত্র যোগ্যতার জন্য লাইন ব্রেক এবং ইন্ডেন্টেশন)

var d='0123456789abcdef',p='',o='',l=3e3,c=0,e='length';d=d+d;
function $(n,r){return n[e]<=r?0:d.indexOf(n[r])}
function g(a,b){for(i=0,t='',s=16;i<l;i++,t+=d[~~(s/b)],s=(s%b)*16);
for(;a--;t=_(t,t,1));return t}
function _(a,b,s){for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i>=0;r=(s?
  function(k){c=k>15;return d[k]}($(a,i)+$(b,i)+c):
  function(k){c=k<0;return d[k+16]}($(a,i)-$(b,i)-c))+r,i--);return r}
for(i=0;i<l;i++,p+='2');
for(j=1;j<l;p=_(p,(o+='0')+_(_(_(g(2,8*j+1),g(1,8*j+4)),g(0,8*j+5)),g(0,8*j+6)),1),j++);
console.log(p.slice(1024,2048))

এটি প্রায় 25 সেকেন্ড সময় নেয়, গুগল ক্রোম 14 এ আমার ল্যাপ-শীর্ষে ইন্টেল আই 5 কোর ব্যবহার করে। অন্য কেউ এই কোড গল্ফ করতে পারেন? আমি ভাল গল্ফ করতে পারি না .. :(

নীচে গল্ফবিহীন রয়েছে। আমি কেবল সমস্ত মন্তব্য সরিয়েছি এবং লুপের জন্য গল্ফের জন্য পরিবর্তন করেছি।

সম্পর্কে উল্লেখ করবেন না for(;s>=b;s-=b);s*=16;। আমি এটা পরিবর্তন s=(s%b)*16। : P: P

/**
Calculate PI-3 to 3000 (3e3) digits.
a : a
b : b
c : carry
d : digits
e : length
f : get from d
g : calculate (2^a)/b.
i,j, : for looping
l : length to calculate
p : pi
r,t : return value
*/
var d='0123456789abcdef',p='',o='',l=3e3,c=0,e='length';
d=d+d;//for carring

function $(n,r){return n[e]<=r?0:d.indexOf(n[r])}
/*
Calculate (2^a)/b. Assume that 2^a < b.
*/
function g(a,b){
    for(i=0,t='',s=16;i<l;i++){t+=d[~~(s/b)];for(;s>=b;s-=b);s*=16;}
    for(;a--;t=_(t,t,1));return t}
/*
Calculate a±b. (+ when s=1, - when s=0) When calculating minus, assume that 1>b>a>0.
*/
function _(a,b,s){
    for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i>=0;
        r=(s?function(k){c=k>15;return d[k]}($(a,i)+$(b,i)+c):
            function(k){c=k<0;return d[k+16]}($(a,i)-$(b,i)-c))+r,i--);return r;
}
/*
Using BBP formula. Calc when j=0...
4/1 - 2/4 - 1/5 - 1/6 = 3.22222222.... (b16)
*/
for(i=0;i<l;i++,p+='2');
//Calc when j>0
for(j=1;j<l;p=_(p,(o+='0')+_(_(_(g(2,8*j+1),g(1,8*j+4)),g(0,8*j+5)),g(0,8*j+6)),1),j++);
console.log(p.slice(1024,2048));

সম্পাদনা: সম্পূর্ণ অব্যবহৃত ফাংশন সরানো হয়েছে। (আমি কেন এটি রেখেছি?: /)

পুনশ্চ. পিআই এর প্রথম 100 টি সংখ্যা

243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab


@FUZxxl: নন-গল্ফ কোডটি কি যথেষ্ট ছিল না? .. :(
জিমিনপি

এটা আসলে ছিল। আপনি যদি ব্যাকটিক সিনট্যাক্স ব্যবহার না করে কোড ফরম্যাটিং ব্যবহার করেন তবে IMHO এটি আরও ভাল দেখাচ্ছে। আমি যেমন লিখেছি, আপনি যদি পছন্দ না করেন তবে ফিরে যেতে নির্দ্বিধায়।
FUZxxl

d='0123456789abcdef',l=3e3,p=Array(l+1).join(2),o='',c=0,e='length';d+=d;function _(a,b,s){for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i+1;r=d[Z=F(b,i,1)+c,k=F(a,i,1)+(s?Z:16-Z),c=s?k>15:k<16,k]+r,i--);return r}function F(a,b,f){if(f)f=a[e]>b?d.indexOf(a[b]):0;else{for(i=0,f='',s=16;i++<l;f+=d[~~(s/b)],s=(s%b)*16);while(a--)f=_(f,f,1)}return f}for(j=0;++j<l;p=_(p,(o+='0')+_(_(_(F(2,z=8*j+1),F(1,z+3)),F(0,z+4)),F(0,z+5)),1));console.log(p.slice(1024,2048))
পিটার টেলর

এগুলি সত্যই সমস্ত অণু-অপ্টিমাইজেশান, যদিও তাদের মধ্যে কিছু বেশ বড় দেখায়। অপারেটরের _পক্ষে দুটি অনামী ফাংশন মুছে ফেলার মাধ্যমে সবচেয়ে বড় সঞ্চয়টি আসে saving ,সবচেয়ে জটিলতমটি হ'ল তাদের মধ্যে নির্বাচন করার জন্য একটি into চ্ছিক যুক্তি সহ একত্রিতকরণ $এবং gএকটি ফাংশনে। functionএবং returnউভয়ই বেশ ব্যয়বহুল, সুতরাং এক if(f)...elseএবং ,1দু'টো হ'ল যুক্তিসঙ্গত ট্রেড অফ ।
পিটার টেলর

4

পিএইচপি 116 114 বাইট

<?for(;$g?$d=0|($$g=$g--/2*$d+($$g?:2)%$g*$f)/$g--:4613^printf($i++>257?'%04x':'',$e+$d/$f=4*$g=16384)^$e=$d%$f;);

এই দ্রবণটি একবারে 2048 হেক্স ডিজিট, চারটি হেক্স অঙ্ক, এবং এর শেষার্ধে আউটপুট পর্যন্ত সমস্ত পাই গণনা করে। কার্যকর করার সময়টি 5 সেকেন্ডেরও কম হয়। গণনার জন্য ব্যবহৃত সূত্রটি নিম্নলিখিত:

pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + 5/11*(2 + 6/13*(2 + 7/15*(2 + ... )))))))

যথার্থতা একটি অ্যারে বাকী অংশগুলি সংরক্ষণ করে এবং ক্রমবর্ধমান 2 ^ 14 বিভাগের প্রতিটি চালিয়ে নেওয়া হয়।

পাইথন 64 বাইট

x=p=16385
while~-p:x=p/2*x/p+2*2**8192;p-=2
print('%x'%x)[1025:]

উপরের মত একই পদ্ধতি। প্রায় 0.2 সেকেন্ডে চলে।

বা 73 বাইটে ওয়ান-লাইনার হিসাবে :

print('%x'%reduce(lambda x,p:p/2*x/p+2*2**8192,range(16387,1,-2)))[1025:]

3

পারি / জিপি -২.৪, ১৪১

forstep(d=1024,2047,8,y=frac(apply(x->sum(k=0,d+30,16^(d-k)/(8*k+x)),[1,4,5,6])*[4,-2,-1,-1]~);for(i=0,7,y=16*frac(y);printf("%X",floor(y))))

বেইলি-বোরওইন – প্লুফ ফর্মুলা (অবশ্যই) ব্যবহার করা।

এক মিনিটের মধ্যে ভালভাবে চলে।


3

সি কোড:

long ki,k,e,d=1024;
int  dig,tD=0,c,Co=0,j,js[4]  ={1,4,5,6};
double res=0.0,tres=0.0,gT,ans[4] ={0.0};
while(tD < 1024)
{while(Co<4){ j= js[Co],gT=0.0,ki= 0;
 for(; ki < d+1;ki++){ k = 8*ki+j,e= d-ki,c=1; while(e--) c = 16*c % k; gT+=((double)(c)/(double)k);}
 ans[Co] = (gT - (int)gT),++Co;}
 double gA = 4*ans[0]-2*ans[1]-ans[2]-ans[3];
 gA = (gA<0) ? gA + -1*(int)gA +1 : gA -(int)gA;
 dig=0;while(dig++ < 6 && tD++ < 1024) gA *=16, printf("%X",gA),gA -= (int)gA;
 d+=6,Co = 0;}

একটি ইন্টেল কোয়াড কোর এ রানটাইম = 8.06 সেকেন্ড


এটি কোড গল্ফ। সংক্ষিপ্ত ভেরিয়েবলের নাম ব্যবহার করে এবং হোয়াইটস্পেস এড়িয়ে আপনার কোডটি যতটা সম্ভব সংকুচিত করার চেষ্টা করুন। উদাহরণস্বরূপ, আপনি printf("%X",(int)gA)দীর্ঘ তালিকাটির পরিবর্তে প্রচুর অক্ষর ব্যবহার করে সঞ্চয় করতে পারেন ।
FUZxxl

1

প্যারি / জিপি - 40 বাইট

এই সংস্করণটি \xফলাফলের হেক্সাডেসিমাল অঙ্কগুলি প্রদর্শন করে 'চিটস' করে ।

\p8197
x=Pi<<4^6;x-=x\1;x=(x<<4^6)\1
\xx

এই সংস্করণটি সাধারণ উপায়ে হেক্সাডেসিমাল রূপান্তর করতে 87 বাইট নেয়।

\p8197
x=Pi<<4^6;x-=x\1;concat([Vec("0123456789abcdef")[n+1]|n<-digits((x<<4^6)\1,16)])

উভয় সংস্করণ সেকেন্ডের একটি ছোট ভগ্নাংশে চলে run


1

পার্ল - 59

use ntheory"Pi";say substr int(Pi(3000)<<8192)->as_hex,1027

0.1 এর চেয়ে কম।


0

শেল 68

সরঞ্জাম: বিসি-এল, টিআর, কাটা

echo "scale=2468;obase=16;4*a(1)"|bc -l|tr -d '\\\n'|cut -c1027-2051

শেল 64, সরঞ্জামগুলি: বিসি-এল, টিআর, লেজ, শেষ স্থানের বৃত্তাকারে পৃথক

echo "scale=2466;obase=16;4*a(1)"|bc -l|tr -d '\\\n'|tail -c1024

প্রতারণামূলক হিসাবে বিবেচনা করা যেতে পারে, যেহেতু পিআই গণনা করতে হবে তা জ্ঞান 4 * এ (1) এ রয়েছে এবং সেই 1 টি স্কেল = 2466 ব্যবহার করতে হবে তা পুনরুদ্ধারত তদন্ত করা হয়েছিল।

কাটা ব্যবহার করার ধারণার জন্য ব্রেডবক্সকে ধন্যবাদ।


আমি কীভাবে এটি প্রতারণার হিসাবে বিবেচিত হতে পারি তা দেখছি না; অঙ্কগুলি রানটাইমে গণনা করা হয়। যদিও আমার নোট করা উচিত যে আমি যখন এটি চালাব, এটি আউটপুটটি শেষ অঙ্কের সাথে পৃথক হবে (এ এর পরিবর্তে 7)। বিটিডাব্লু, আমি মনে করি আপনি কয়েকটি অক্ষর সংরক্ষণ করতে ddকমান্ডটি প্রতিস্থাপন করতে পারেন tail -c1024
ব্রেডবক্স

হ্যাঁ, আমিও পার্থক্যটি পর্যবেক্ষণ করেছি (এবং এটিতে আধ ঘন্টা ব্যয় করি :))। আমি যদি বিসিকে স্কেল এক্স ডিজিটের স্কেল ব্যবহার করতে বলি, এটি দশমিক মোডে that অঙ্কের সাথে গোল করে, এবং পরে হেক্স রূপান্তর করে। সুতরাং আমি যদি আরও একটি অঙ্ক নিয়ে থাকি তবে এটি একটি 69 তৈরি করে, একটি 7. নয় 7. তবে - গোলাকার শৈলী বা কাটা প্রশ্নটিতে নির্দিষ্ট করা হয়নি। এবং লেজ ধারণা জন্য ধন্যবাদ। :)
ব্যবহারকারীর অজানা

প্রশ্নটি সুনির্দিষ্ট করে: নির্দিষ্ট করে দেওয়া অনুসারে সমাপ্তি এবং আউটপুট উত্পাদন করে।
FUZxxl

@FUZxxl: "উচিত ...", "আবশ্যক ..." নয় - আমি ভেবেছিলাম যে হেক্স রূপান্তরটি ভালভাবে চলছে কিনা তা যাচাই করার জন্য সাহায্য করা উচিত, এবং বর্ণনার সংখ্যা বাদ দেওয়া উচিত, নির্দিষ্টকরণের অংশ হিসাবে নয় , 1024 এর শেষ অঙ্কের সাথে সামঞ্জস্য করার জন্য But তবে আমি দিয়েছিলাম এবং একটি প্রতিস্থাপন করতে 16 টি অক্ষর যুক্ত করেছি।
ব্যবহারকারী অজানা

1
এই বাক্যটি "আনুষ্ঠানিকভাবে" শব্দের সাথে শুরু হওয়ার সাথে সাথে আমি সম্মত হব যে ওপি সম্ভবত শব্দের আরএফসি অর্থে এটি বোঝায় । এছাড়াও, আপনি কি এখনও ব্যবহার প্রতিস্থাপন করে আপনার নতুন সমাধান উন্নত করতে পারেন ddসঙ্গে cut -c1027-2051। (শেলটিতে টেক্সট স্ট্রিমগুলি পরিচালনা করার জন্য অনেকগুলি সরঞ্জাম রয়েছে))
ব্রেডবক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.