পাই থেকে 5 দশমিক। গণনা করুন


15

এটি http://programmers.blogoverflow.com/2012/08/20- বিতর্কিত- প্রোগ্রামিং-opinions/ থেকে আসে

"পাই যে আরও 4 টি (1 - 1/3 + 1/5 - 1/7 +…) ফাংশনটি আরও বেশি নির্ভুলতার সাথে ব্যবহার করে অনুমান করা যেতে পারে, এমন একটি ফাংশন লিখুন যা পাই দশমিক স্থানের নির্ভুলতায় পাই গণনা করে। "

  • দ্রষ্টব্য, উপরে বর্ণিত ক্রম গণনা করে অনুমানটি করা আবশ্যক।

8
আপনার সম্ভবত আরও কিছু বিধি যুক্ত করা উচিত, অন্যথায় আপনি (অজগর) এর মতো উত্তরগুলি পাবেনp=lambda:3.14159
ম্যাট

1
আপনি কি কোডগলফ.স্ট্যাকেক্সেঞ্জার.কম / সেকশনস / 506/ … দেখেছেন , যা খুব মিল? খুব কমপক্ষে, এই সমস্যার জন্য ট্রিগ ফাংশনগুলি নিষিদ্ধ করা উচিত কারণ তারা এই কিউবিএসআইসি প্রোগ্রামের মতো তুচ্ছ সমাধানের জন্য অনুমতি দেয়: INT (4E5 * এটিএন (1)) / 1E5
প্লিজ স্ট্যান্ড

আমি মনে করি আপনার অ্যালগরিদম ক্রমাগত আনুমানিক এক হতে হবে: আপনি যত বেশি সময় গণনা করবেন ততই আপনি পাইয়ের কাছাকাছি চলে যাবেন।
ডেভিডসি

@ ডেভিডক্যারাহার যদিও এই সিরিজটি ব্যবহার করে তা গাণিতিকভাবে অনিবার্য, সংখ্যার বিশ্লেষণের দিক থেকে এটি অত্যন্ত সন্দেহজনক। একটি ধীরে ধীরে রূপান্তরকারী বিকল্প সিরিজ তাত্পর্য হারাতে পোস্টার শিশু।
পিটার টেলর

2
ডুপে, তবে এটি এত পুরনো এটি এখানে নেই: stackoverflow.com/q/407518/12274
জেবি

উত্তর:


10

জাভাস্ক্রিপ্ট, 46 58 56 45 বাইট

ES6 আপডেট : দেখা যাচ্ছে যে এখন আমাদের কাছে আরও পাঁচটি বৈশিষ্ট্য উপলব্ধ রয়েছে যে পাঁচ বছর কেটে গেছে।

let f=(i=0,a=0)=>i>1e6?a:f(i+4,a+8/-~i/(i+3))

এই সংস্করণ ( 45 বাইট; হ্যাঁ, letপ্রয়োজনীয়) তত্ত্বের ES6 কঠোর মোডে কাজ করে । অনুশীলনে, আপনি এটি ভি 8 (যেমন নোড সহ) দিয়ে চালাতে পারেন --use-strict --harmony-tailcalls; প্রাইজ টেইলকোলস বৈশিষ্ট্যটি এখনও ব্যাপকভাবে প্রয়োগ করা হয়নি, হায়! যাইহোক, এটি নির্দিষ্ট আচরণ, তাই এটি ঠিক হওয়া উচিত।

যদি আমরা বহুলভাবে প্রয়োগ করা হয় তার সাথে লেগে থাকতে চাই এবং কঠোর মোডের প্রয়োজন না হয় তবে আমরা সহজেই ফাংশনগুলির জন্য ES6 ফ্যাট-অ্যারো সিনট্যাক্স ব্যবহার করতে পারি তবে অন্যথায় 48 বাইট ব্যয়ে আগের মতো (ব্রায়ান এইচ প্রস্তাবিত) একই প্রয়োগটি ধরে রাখতে পারি ।

a=>{for(a=i=0;i<1e6;a+=8/++i/~-(i+=3));return a}

একক পরামিতি জন্য নাম পছন্দমত না সত্যিই ব্যাপার, কিন্তু আমরা পাশাপাশি নাম আমরা তাই হিসাবে ব্যবহার বিশ্বব্যাপী সুযোগ দূষণ কমানোর জন্য এক বাছাই করতে পারে।


function(){for(a=i=0;i<1e6;a+=8/++i/~-(i+=3));return a}

এই সংস্করণটি একটি ফাংশন এক্সপ্রেশন; fযদি আপনি এটির নাম রাখতে চান তবে দুটি অক্ষর যুক্ত করুন (যেমন " ")। এই সংস্করণ গ্লোবাল ক্লোবার aএবং i; যদি আমরা a,iপ্যারামিটার তালিকায় " " যোগ করি তবে এটি প্রতিরোধ করা যেতে পারে ।

বিয়োগের প্রয়োজনীয়তা রোধ করতে অ্যালগরিদমের একটি সংশোধিত সংস্করণ ব্যবহার করে।

 1/1 - 1/3  +   1/5 - 1/7   +    1/9 - 1/11  + ...
(3/3 - 1/3) + (7/35 - 5/35) + (11/99 - 9/99) + ...
    2/3     +      2/35     +       2/99     + ...
  2/(1*3)   +    2/(5*7)    +     2/(9*11)   + ...

এই সমন্বয় ছাড়াই এখানে একটি "সরল" সংস্করণ রয়েছে:

function(){for(a=0,i=1;i<1e6;i+=2)a+=[,4,,-4][i%4]/i;return a}

যা এ ঘড়ি 64 62 অক্ষর।

এর 4*আগে এই পরামর্শটি থেকে মুক্তি পাওয়ার জন্য @ নার্নিউকে ধন্যবাদ return


ইতিহাস

function(){for(a=i=0;i<1e6;a+=8/++i/~-(i+=3));return a}     // got rid of `i+=4`; restructured
// Old versions below.
function(){for(a=0,i=1;i<1e6;i+=4)a+=8/i/-~-~i;return a}    // got rid of `4*`
function(){for(a=0,i=1;i<1e6;i+=4)a+=2/i/-~-~i;return 4*a}

ওও খুব সুন্দর কাজ, বিয়োগফল ফ্যাক্টরিং।
অ্যাকলিট

1
দুর্দান্ত কাজ, তবে একটি যথাযথ ফাংশন হিসাবে রচনা করা দরকার

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

1
@ a+=2/i/-~-~i;return 4*aa+=8/i/-~-~i;return a
ফায়ারফ্লাই

@ অর্ডনিউ: ওহ, দুর্দান্ত; এটা ভাবিনি। : ডি
ফায়ারফ্লাই

8

পাইথন 59 বাইট

print reduce(lambda x,p:p/2*x/p+2*10**999,range(6637,1,-2))

এটি 1000 অঙ্ক মুদ্রণ করে; প্রয়োজনীয় তুলনায় সামান্য বেশি 5. নির্ধারিত পুনরাবৃত্তিটি ব্যবহার না করে এটি এটি ব্যবহার করে:

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

6637(অন্তরতম হর) হিসেবে প্রণয়ন করা যেতে পারে:

অঙ্কগুলি * 2 * লগ 2 (10)

এটি একটি রৈখিক একত্রিতকরণকে বোঝায়। প্রতিটি গভীর পুনরাবৃত্তি পাই এর আরও একটি বাইনারি বিট উত্পাদন করবে ।

তবে, আপনি যদি ট্যান -১ পরিচয়টিব্যবহার করার জন্য জোর দিয়ে থাকেন , তবেসমস্যাটি কিছুটা ভিন্নভাবে চালাতে যদি আপনি কিছু মনে করেন না, তবে অনুরূপ রূপান্তরটি অর্জন করা যেতে পারে। আংশিক পরিমাণগুলি একবার দেখে:

4.0, 2.66667, 3.46667, 2.89524, 3.33968, 2.97605, 3.28374, ...

এটি স্পষ্ট যে প্রতিটি শব্দটি অভিব্যক্তি বিন্দুর উভয় দিকে পিছনে পিছনে লাফিয়ে যায়; সিরিজের বিকল্প রূপান্তর আছে। অতিরিক্তভাবে, প্রতিটি শব্দ পূর্ববর্তী শব্দটির তুলনায় রূপান্তর বিন্দুর কাছাকাছি; এটি একেবারে একঘেয়েমি এর অভিমুখে বিন্দু সম্মান সঙ্গে। এই দুটি বৈশিষ্ট্যের সংমিশ্রণটি বোঝায় যে দুটি প্রতিবেশী শর্তের গাণিতিক গড়টি তাদের নিজেদের উভয় শর্তের চেয়ে রূপান্তর বিন্দুর কাছাকাছি। আমার অর্থ কী সম্পর্কে আপনাকে আরও ভাল ধারণা দিতে, নীচের চিত্রটি বিবেচনা করুন:

আংশিক যোগফল

বাহ্যিক সিরিজটি মূল এবং অভ্যন্তরীণ সিরিজটি প্রতিবেশী প্রতিটি শর্তের গড় গ্রহণ করে পাওয়া যায়। একটি উল্লেখযোগ্য পার্থক্য। তবে যা সত্যিই লক্ষণীয় তা হল, এই নতুন সিরিজের বিকল্প অভিমুখেও রয়েছে, এবং এর কনভার্জেন্স পয়েন্টের ক্ষেত্রে একেবারে একঘেয়ে রয়েছে। তার মানে এই প্রক্রিয়াটি বার বার প্রয়োগ করা যেতে পারে, বিজ্ঞাপনের বমিভাব।

ঠিক আছে. কিন্তু কিভাবে?

কিছু আনুষ্ঠানিক সংজ্ঞা। যাক পি 1 (ঢ) হতে এন প্রথম ক্রম শব্দ, পি 2 (ঢ) হতে এন দ্বিতীয় ক্রম মেয়াদের, এবং একইভাবে পি (ঢ) এন মেয়াদের উপরের হিসাবে সংজ্ঞায়িত ক্রম ।

পি 1 = [পি 1 (1), পি 1 (2), পি 1 (3), পি 1 (4), পি 1 (5), ...]

পি 2 = [(পি 1 (1) + পি 1 (2)) / 2, (পি 1 (2) + পি 1 (3)) / 2, (পি 1 (3) + পি 1 (4)) / 2, (পি 1 (4) + পি 1 (5)) / 2, ...]

পি 3 = [(পি 1 (1) + 2 পি 1 (2) + পি 1 (3)) / 4, (পি 1 (2) + 2 পি 1 (3) + পি 1 (4)) / 4, (পি 1 (3) + 2 পি 1 (4) + পি 1 (5)) / 4, ...]

পি 4 = [(পি 1 (1) + 3 পি 1 (2) + 3 পি 1 (3) + পি 1 (4)) / 8, (পি 1 (2) + 3 পি 1 (3) + 3 পি 1 (4) + পি 1 (5)) / 8, ...]

অবাক হওয়ার মতো বিষয় নয়, এই সহগগুলি ঠিক দ্বিপদী সহগগুলি অনুসরণ করে এবং পাসকালের ত্রিভুজের একক সারি হিসাবে প্রকাশ করতে পারে। যেহেতু পাস্কালের ত্রিভুজের একটি স্বেচ্ছাসেবী সারি গণনা করার জন্য তুচ্ছ, তাই নির্বিচারে একটি 'গভীর' সিরিজ পাওয়া যায়, কেবল প্রথম এন আংশিক অঙ্কগুলি গ্রহণ করে , পাস্কালের ত্রিভুজের K সারিতে সংশ্লিষ্ট শব্দ দ্বারা প্রতিটিকে গুণ করে এবং 2 দ্বারা বিভাজক করে k-1

এইভাবে, পুরো ৩২-বিট ফ্লোটিং পয়েন্ট যথার্থতা (~ 14 দশমিক স্থান) কেবলমাত্র 36 টি পুনরাবৃত্তির সাহায্যে অর্জন করা যেতে পারে, যেখানে আংশিক অঙ্কগুলি দ্বিতীয় দশমিক স্থানে রূপান্তরিত হয় না। এটি অবশ্যই গল্ফ হয় না:

# used for pascal's triangle
t = 36; v = 1.0/(1<<t-1); e = 1
# used for the partial sums of pi
p = 4; d = 3; s = -4.0

x = 0
while t:
  t -= 1
  p += s/d; d += 2; s *= -1
  x += p*v
  v = v*t/e; e += 1

print "%.14f"%x

আপনি যদি নির্বিচারে নির্ভুলতা চান, এটি একটি সামান্য পরিবর্তন দিয়ে অর্জন করা যেতে পারে। এখানে আবার 1000 অঙ্ক গণনা করা হচ্ছে:

# used for pascal's triangle
f = t = 3318; v = 1; e = 1
# used for the partial sums of pi
p = 4096*10**999; d = 3; s = -p

x = 0
while t:
  t -= 1
  p += s/d; d += 2; s *= -1
  x += p*v
  v = v*t/e; e += 1

print x>>f+9

প্রাথমিক মান পি শুরু 2 10 , বড় পূর্ণসংখ্যা বিভাজন প্রভাব নিবারণ করতে গুলি / ডি যেমন বৃহত্তর হয়ে, এর মিলিত না গত কয়েক সংখ্যা সৃষ্টি হয়। এখানে আবার লক্ষ্য করুন যে 3318এটি:

অঙ্কগুলি * লগ 2 (10)

প্রথম অ্যালগরিদম হিসাবে একই পুনরাবৃত্তির সংখ্যা (অর্ধেক কারণ টি প্রতিটি পুনরাবৃত্তির 2 এর পরিবর্তে 1 দ্বারা 1 হ্রাস করে )। আবার, এটি একটি রৈখিক রূপান্তরকে নির্দেশ করে: পুনরাবৃত্তির জন্য পাইয়ের এক বাইনারি বিট । উভয় ক্ষেত্রেই ৩৩১৮ পুনরাবৃত্তির জন্য পাই এর ১০০ সংখ্যা গণনা করতে হবে , 5 গণনা করার জন্য 1 মিলিয়ন পুনরাবৃত্তির চেয়ে কিছুটা ভাল কোটা।


এটি আমার সমাধানের চেয়ে অনেক ভাল:4 * sum(1/(1+i*2) if not i%2 else -1/(1+i*2) for i in xrange(places*10**(places)))
অ্যারন হল

1
এটি আমার পদ্ধতির সাথে খুব মিল , যা আপনার অন্যরকম রূপে ঘটে। খনি সালে, যেমন k → ∞, f(-1,k)আপনার অয়লার-সমষ্টি পন্থা।
কেবল সুন্দর আর্ট

1
খুব ঠান্ডা; দুর্দান্ত বিশ্লেষণ এবং ব্যাখ্যা, আপনাকে ধন্যবাদ।
জেরেমি র‌্যাডক্লিফ

শুধু একটি ছোট জিনিস। P_1 = ..., P_2 = ..., P_3 = ..., P_4 = ...", ... এর পরে আপনার অর্থ কি এই নয় যে kthপাস্কালের ত্রিভুজের সারিতে সংশ্লিষ্ট শব্দটি দিয়ে প্রতিটিকে গুণান এবং সারি এবং ? এর 2^{k-1}পরিবর্তে ভাগ করে " । nth2^{n-1}
জেরেমি র‌্যাডক্লিফ 11'18

@ জেরেমিরাদ ক্লিফ আমি করেছি, হ্যাঁ। সংশোধনীর জন্য ধন্যবাদ.
প্রিমো

5

গণিত 42 39 34 33 31 26 32

আর্কিমিডিজের দৃষ্টিভঙ্গি 26 টি অক্ষর

N@#*Sin[180 Degree/#]&

ইনপুট 822 হয়ে গেলে এটি মানদণ্ডে পৌঁছে যায়।

প্রশ্ন: কেউ কি জানেন যে তিনি কীভাবে 180 ডিগ্রির সিন গণনা করেছিলেন? আমি না।


লাইবনিজের অ্যাপ্রোচ (গ্রেগরির সিরিজ) 32 টি অক্ষর

সমস্যা পোজার উদাহরণ হিসাবে এটি একই ফাংশন। এটি প্রায় দেড় মিলিয়ন পুনরাবৃত্তিতে মানদণ্ডে পৌঁছে যায়।

N@4Sum[(-1)^k/(2k+1),{k,0,10^6}]

মাধব-লেবনিজ 37 টি অক্ষর গ্রহণ করুন

এই প্রকরণটি আরও কয়েকটি অক্ষর ব্যবহার করে তবে কেবল 9 টি পুনরাবৃত্তিতে মানদণ্ডে রূপান্তর করে!

N@Sqrt@12 Sum[(-1/3)^k/(2k+1),{k,0,9}]

যারা সমস্ত এটি সংজ্ঞা সংজ্ঞা দেওয়া অ্যালগরিদম দ্বারা গণনা?
অ্যাকলিট

@ অলিওয়েট লাইবনিজ এর পদ্ধতির (এখন প্রথম তালিকাভুক্ত) সমস্যাটির বর্ণনায় উল্লিখিত একটি। এটি রূপান্তর করতে খুব ধীর। এটির উপর একটি সামান্য প্রকরণ (মাধব-লেবনিজ) খুব দ্রুত রূপান্তরিত হয়।
ডেভিডসি

180 ine সাইন বেশ সহজ। এটি 180 ° / এন যা সাধারণ সন্দেহভাজনদের বাইরে এন এর পক্ষে জটিল হয়ে উঠতে পারে
জেবি

দয়া করে ব্যাখ্যা করুন, @ জেবি কৌশলটি পরিমাপ করতে?
ডেভিডসি

এই এন্ট্রিটিতে "32" উল্লেখ করা উচিত কারণ কেবল লাইবনিজের দৃষ্টিভঙ্গি প্রয়োজনীয়তা পূরণ করে (প্রদত্ত কোড অনুসারে অক্ষরগুলি গণনা করা হচ্ছে, আমি 34 পেয়েছি, তবে উভয় স্থানই নিরাপদে অপসারণ করা যেতে পারে, সত্যই 32 এর দৈর্ঘ্য দেয়)।
celtschk


4

জাভা (67 টি অক্ষর)

float r(){float p=0,s=4,i=1E6f;while(--i>0)p+=(s=-s)/i--;return p;}

নোট করুন যে এটি সঠিক ক্রমে সংখ্যাগুলি যোগ করে তাত্পর্য হ্রাস এড়াতে পারে।


এটি সম্পূর্ণরূপে সি কোডও। সি হিসাবে পোস্ট করা হলে, আপনি পরিবর্তন while(--i>0)করতে while(i--)এবং 2 টি অক্ষর সংরক্ষণ করতে পারেন

1
@ আর্নডিউ, সত্য, তবে সি এর সাথে খেলতে আরও অনেক আকর্ষণীয় কৌশল রয়েছে ...
পিটার টেলর

4

হাস্কেল, 32

foldr(\k->(4/(2*k+1)-))0[0..8^7]

জিএইচসিআই> ফোল্ডার (\ কে -> (4 / (2 * কে + 1) -)) 0 [0..8 ^ 7]
3.141593130426724

এটি একটি ফাংশন নাম গণনা করা

34

π=foldr(\k->(4/(2*k+1)-))0[0..8^7]


3

সি (জিসিসি) (৪৪ টি চর)

float p(i){return i<1E6?4./++i-p(++i):0;}

এটি ৪১ টি অক্ষর, তবে -O2লেজ পুনরাবৃত্তি দূর করার জন্য এটি অপটিমাইজারের সাথে সংকলন করতে হবে has এটি যে আদেশে ++মৃত্যুদন্ড কার্যকর করা হয় তার সাথে সম্মতিযুক্ত অপরিজ্ঞিত আচরণের উপরও নির্ভর করে ; এটি নির্দেশ করার জন্য উগোরেনকে ধন্যবাদ। আমি জিসিসি ৪.৪.৩ দিয়ে 64৪-বিট লিনাক্সের অধীনে পরীক্ষা করেছি।

মনে রাখবেন যে অপটিমাইজারটিও যোগফলটিকে পুনরায় সাজিয়ে না দেয়, এটি ক্ষুদ্রতম সংখ্যা থেকে যুক্ত হবে, সুতরাং এটি তাত্পর্য হ্রাস এড়াতে পারে।

যেমন কল p()


আপনার পুনরাবৃত্তি কল q(), না p()। এবং আমি -O2গণনা করা উচিত বলে মনে করি না (তবে আপনি এটি গণনা করলে এটি প্রয়োজনীয় স্থানের কারণে এটি 4 টি অক্ষর)।
ugoren

এছাড়াও: 1.জিসি 4.1.1 পুনরাবৃত্তি অনুকূলিত করে না (এবং এটি কীভাবে পারে তা আমি দেখতে পাই না), তাই স্ট্যাকটি উপচে পড়ে। 2. এটি হিসাবে বলা উচিত p(0)। 3. দ্বারা একটি চর সংরক্ষণ করুন return++i...। ৪. দু'জন ++iঅনির্ধারিত আচরণ করে।
ugoren

@ ইউগ্রেন, আপনার মন্তব্যের জন্য ধন্যবাদ। ক্রমে: q- এটি আমাকে নামকরণের পরে ডাবল-চেক করতে শিখিয়ে দেবে। আমি মনে করি আমি -O23 টি চর হিসাবে গণনায় সাধারণ অনুশীলন অনুসরণ করছি , তবে আপনি যদি চান তবে আমরা এটি মেটাতে খুলতে পারি; meta.codegolf.stackexchange.com/questions/19 কেবলমাত্র প্রাসঙ্গিক আলোচনা আমি খুঁজে পাই। আমি জিসিসির সংস্করণ যুক্ত করেছি যা আমি ব্যবহার করছি এবং যা আমাকে এটিকে কল করার অনুমতি দেয় p()। চর সংরক্ষণ করা অপটিমাইজারকে থামায় এবং সেগফল্ট দেয়। আমি স্পষ্ট করে বলব যে আমি মেটা কোডেগল্ফ.স্ট্যাকেক্সেক্সঞ্জ
পিটার টেলর

আমি পতাকা সম্পর্কিত মেটা প্রশ্নের উত্তর যুক্ত করেছি। সম্পর্কে p()- আপনি কি নিশ্চিত যে p()কোনও প্রসঙ্গে কল করা কাজ করবে? বা আপনার পরীক্ষার স্ট্যাকের মধ্যে যা ঘটেছিল ঠিক তাই কি?
ugoren

@ ইউগ্রেন, সম্ভবত আমি নিয়মিত ভাগ্যবান হয়েছি। এমনকি যদি আমি এটি পর পর দুবার কল করি তবে দ্বিতীয়টি এখনও সঠিক মান দেয়। জিসিসি জন্য কিছুটা ভিন্ন কোড উৎপন্ন বলে মনে হচ্ছে না p()বনাম p(0), কিন্তু আমি কি আচরণ এটাকে নথি জানি না এবং আমি সত্যিই একটি সি প্রোগ্রামার নই।
পিটার টেলর

3

জে, 26 অক্ষর

+ / + / _ 2 ((4 _4) &%)>: +: i.100

ক্রমের 100 আইটেম থেকে 1e6 আইটেমে সরানো হয়েছে। এছাড়াও এখন এটি একটি ট্যাগযুক্ত কোড এবং ত্রুটি ছাড়াই ব্রাউজার থেকে কনসোলে কপিপাস্ট করা যেতে পারে।

+/+/_2((4 _4)&%)\>:+:i.1e6

3
-/4%>:2*i.1e6- 13 টি অক্ষর। (আমি তৈরীর জন্য #jsoftware মধ্যে b_jonas ধন্যবাদ বুঝতে পারছি -/পর্যায়ক্রমে চিহ্ন দিয়ে একটি সমষ্টি গনা কাজ [এই, যেহেতু জে সমস্ত অপারেটার সমান প্রাধান্য এবং ডান-মিশুক হয়, তাই। -/ 1 2 3 4<=> 1 - (2 - (3 - 4))<=> 1 - 2 + 3 - 4।])
জোনাকি না

এটা পরিষ্কার এবং দ্বিগুণ হিসাবে দুর্দান্ত। বা এমনকি 2 ^ 10 আরও দুর্দান্ত!
fftw

পছন্দ করুন
জোনা

2

জাভাস্ক্রিপ্ট - 33 অক্ষর

p=x=>4*(1-(x&2))/x+(x>1?p(x-2):0)

pএকটি ইতিবাচক বিজোড় নম্বর পাস করার জন্য কল করুন xএবং এটি (x-1)/2পদগুলি সহ পাই গণনা করবে ।


2

রুবি - 82 অক্ষর rs

def f(n,k=n)k>0?(f(n,k-1)+f(n+1,k-1))/2:n<0?0:f(n-1,0)+(-1)**n/(2*n+1.0)end;4*f(9)

এটি ব্যবহার করে দেখুন: https://repl.it/LQ8w

পদ্ধতির একটি সংখ্যার ত্বরণ পদ্ধতির ব্যবহার করে প্রদত্ত সিরিজকে পরোক্ষভাবে ব্যবহার করা হয়। ফলাফল আউটপুট হয়

pi ≈ 3.14159265161

বনাম

pi = 3.14159265359

এটি দিয়ে শুরু হয়

f(n,0) = 1/1 - 1/3 + 1/5 - ... + ((-1)**n)/(2*n+1)

এবং তারপরে, যেহেতু এটি বিকল্প হয়, আমরা ব্যবহার করে রূপান্তরটি ত্বরান্বিত করতে পারি

f(n,1) = (f(n,0) + f(n+1,0))/2

এবং এটি বারবার এটি প্রয়োগ করে:

f(n,k) = (f(n,k-1) + f(n+1,k-1))/2

এবং সরলতার জন্য f(n) = f(n,n),।


রুবি - 50 অক্ষর

যদি আপনি যদি খুব দীর্ঘ সময়ের জন্য দৌড়াতে আপত্তি না করেন তবে আপনি সহজভাবে এটি ব্যবহার করতে পারেন

def f(n)n<0?0:f(n-1)+(-1)**n/(2*n+1.0)end;4*f(1e7)

অথবা

a=0;for k in 0..1e7 do a+=(-1)**k/(2*k+1.0)end;4*a

1

সি, 69 অক্ষর

float p,b;void main(a){b++<9e6?p+=a/b++,main(-a):printf("%f\n",4*p);}
  • কোনও কমান্ড লাইনের প্যারামিটার ছাড়াই চলুন (সুতরাং aএটি 1 এ শুরু করা হয়)।
  • অপ্টিমাইজেশন সহ সংকলন করতে হবে।
  • void mainঅদ্ভুত এবং মানহীন, তবে জিনিসগুলিকে কাজ করে তোলে। এটি ছাড়া, পুনরাবৃত্তিটি একটি আসল কল হিসাবে প্রয়োগ করা হয়, যার ফলে স্ট্যাকের ওভারফ্লো হয়। একটি বিকল্প যুক্ত করা হয়return
  • 4*তিনটি কমান্ড লাইন প্যারামিটার দিয়ে চললে দুটি অক্ষর সংরক্ষণ করা যায়।

আপনি এটি সংক্ষিপ্ত করতে int main(a)বা এমনকি করতে পারেন main(a), জিসি কেবল একটি সতর্কতা দেয়। এবং এটি void mainযাইহোক জন্য একটি সতর্কতা দেবে , এবং এমনকি সম্ভবত আপনার একটাই যুক্তি রয়েছে main
nyuszika7h

1

Clojure - 79 অক্ষর

(fn [](* 4(apply +(map #(*(Math/pow -1 %1)(/ 1.0(+ 1 %1 %1)))(range 377000)))))

এটি কোনও আর্গুমেন্টের একটি ক্রিয়াকলাপ তৈরি করে যা কোনও ফ্লোট গণনা করবে যা পাইকে দশমিক পাঁচটি জায়গায় সঠিকভাবে সংযুক্ত করে। মনে রাখবেন যে এটি কোনও নামের সাথে ফাংশনকে আবদ্ধ করে না pi, সুতরাং এই কোডটি হয় evalহিসাবে স্থান সহ মূল্যায়ন করতে হবে(<code>) অথবা একটি নাম যে ক্ষেত্রে সমাধান করতে বাধ্য

(defn p[](* 4(apply +(map #(*(Math/pow -1 %1)(/ 1.0(+ 1 %1 %1)))(range 377000)))))

৮২ টি চর জন্য

সম্পর্কিত

(defn nth-term-of-pi [n] (* (Math/pow -1 n) (/ 1.0 (+ 1 n n))))
(defn pi [c] (* 4 (apply + (map nth-term-of-pi (range c)))))
(def  pi-accuracy-constant (loop [c 1000] (if (< (pi c) 3.14159) (recur (inc c)) c)))
; (pi pi-accuracy-constant) is then the value of pi to the accuracy of five decimal places

1

পিএইচপি - 56 টি চর

<?for($j=$i=-1;1e6>$j;){$p+=($i=-$i)/($j+=2);}echo$p*4;

আমি জানি না যে আমি অ্যালগোরিদম নিয়ম ভঙ্গ না করে এটিকে আরও ছোট করে তুলতে পারি।


1
45 এর জন্য এটি কেমন? <?for(;1e6>$j;)$p+=($i=-$i|4)/~-$j+=2;echo$p;
প্রিমো

আমি এটি নিয়ে আসার চেষ্টা করছিলাম, কিন্তু বিটওয়াইপস কাজ করতে পারিনি। পরামর্শের জন্য ধন্যবাদ!
twoScoopsofPig

আপনি 1 টি অক্ষর সংরক্ষণ করতে শেষ সেমিকোলনটি সরিয়ে ফেলতে পারেন।
nyuszika7h

1

পার্ল - 43 39 টি চর

বেনামে সাবরুটাইনগুলির নিয়মগুলি নিশ্চিত না, তবে @ ফায়ারফ্লাইয়ের সিরিজ নির্মাণ ব্যবহার করে এখানে আরও একটি প্রয়োগ করা হয়েছে

sub{$s+=8/((4*$_+2)**2-1)for 0..1e6;$s}

sub p{$s+=(-1)**$_*4/(2*$_+1)for 0..1e6;$s}


0

জাভা - 92 84 অক্ষর

পিটার টেলরের ফলাফল আমি এখন পর্যন্ত পরাজিত করতে পারি না, তবে এটি আমার:

double d(){float n=0,k=0,x;while(n<9E5){x=1/(1+2*n++);k+=(n%2==0)?-x:x;}return 4*k;}

অবরুদ্ধ সংস্করণ:

double d() {
    float n = 0, k = 0, x;
    while (n < 9E5) {
        x = 1 / (1 + 2 * n++);
        k += (n % 2 == 0) ? -x : x;
    }
    return 4 * k;
}

সম্পাদনা করুন: টার্নারি অপারেটর ব্যবহার করে কয়েকটি অক্ষর সংরক্ষণ করা হয়েছে।


0

পাইথন - 56 টি অক্ষর

মেহ, আমার পাইথন-ফু যথেষ্ট শক্তিশালী নয়। আমি আর শর্টকাট দেখতে পেলাম না তবে আরও অভিজ্ঞ গল্ফার এখানে ট্রিম করার জন্য কিছু খুঁজে পেতে পারে?

t=s=0
k=i=1
while t<1e6:t,s,i,k=t+1,k*4./i+s,i+2,-k

ফ্লাইট বিভাগের জন্য একটি বাইট সংরক্ষণ করতে আপনি পাইথন 3 ব্যবহার করতে পারেন ( 4.-> 4)। অন্যান্য খবরে, আমি সবেমাত্র একটি কেস পেয়েছি যেখানে পাইথন 3 আসলে কোড গল্ফে পাইথন 2 কে পরাজিত করে!
nyuszika7h

0

রুবি - 54 অক্ষর

def a()p=0;1000000.times{|i|p+=8/(4*i*(4*i+2))};p;end;

কনসোলে আমার প্রথম চেষ্টা

def a()i=1;p=0;while i<2**100 do p+=8/(i*(i+2));i+=4;end;p;end;

63 অক্ষর।


def a;পরিবর্তে ব্যবহার করে আপনি একটি বাইট সংরক্ষণ করতে পারেন def a()
nyuszika7h

শেষ সেমিকোলন সরিয়ে আরেকটি Another
nyuszika7h

0

পার্ল (76 টি চর)

$y=1e4;for$x(0..1e4-1){$y--while sqrt($x**2+$y**2)>1e4;$a+=$y}print 4*$a/1e8

(ফলাফল: 3.14159052)

সংক্ষিপ্ততম সমাধান নয়, তবে আকর্ষণীয় হতে পারে। এটি জ্যামিতিক এক। আমি বৃত্তের অধীনে অঞ্চলটি গণনা করি।

আমি আর একটি মজার পন্থা পেয়েছি, তবে এটি সত্যিই ধীর। এটি একটি বর্গক্ষেত্রে বিচ্ছিন্ন পয়েন্টগুলির সংখ্যা গণনা করে যা একটি চতুর্থাংশের বৃত্তের নীচে থাকে এবং এটি থেকে পাই গণনা করে:

$i=shift;for$x(0..$i){for$y(0..$i){$h++if sqrt($x**2+$y**2)<$i}}print$h*4/$i**2

এটি কমান্ড লাইন আর্গুমেন্ট হিসাবে পুনরাবৃত্তির সংখ্যা আশা করে। এখানে আপনি দেখতে পারেন যে রান সময় কীভাবে নির্ভুলতার সাথে সম্পর্কিত। ;)

$ time perl -e '$i=shift;for$x(0..$i){for$y(0..$i){$h++if sqrt($x**2+$y**2)<$i}}print$h*4/$i**2' 100
3.1796
real    0m0.011s
user    0m0.005s
sys 0m0.003s

$ time perl -e '$i=shift;for$x(0..$i){for$y(0..$i){$h++if sqrt($x**2+$y**2)<$i}}print$h*4/$i**2' 1000
3.14552
real    0m0.354s
user    0m0.340s
sys 0m0.004s

$ time perl -e '$i=shift;for$x(0..$i){for$y(0..$i){$h++if sqrt($x**2+$y**2)<$i}}print$h*4/$i**2' 10000
3.14199016
real    0m34.941s
user    0m33.757s
sys 0m0.097s

0

কে (২৫ টি চর)

4 * + /% (আমি # 1 -1) '1 + 2 ! I: 1000000

সামান্য খাটো:

+/(i#4 -4)%1+2*!i:1000000




0

এসকিউএল, 253 বাইট

DECLARE @B int=3, @A varchar(max), @C varchar(max)='1'
WHILE @B<100000
BEGIN
SELECT @C=@C+(select case when (@B-1)%4=0 then'+'else'-'end)+
(SELECT cast(cast(1.0/@B as decimal(9,8)) as varchar(max)))
SELECT @B=@B+2
END
EXECUTE('SELECT 4*('+@C+')')

আমি একটি এসকিউএল ফিডল সরবরাহ করব, তবে এটি 1/3 1/5 1/7 ইত্যাদি ভগ্নাংশগুলি খুঁজে অনেক বেশি লুপগুলিতে যায় এবং ত্রুটিগুলিকে লোল দেয়। তবে, আপনি যদি পরিবর্তন @B<100000করেন 1000তবে এটি চলে (স্পষ্টতই একই সংখ্যার অঙ্কের নির্ভুলতার সাথে নয়)।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.