এজিএম সিরিজ হোল 1: পাটিগণিত – জ্যামিতিক গড় গণনা করুন


26

এই প্রশ্নটি এই এইচএনকিউ দ্বারা অনুপ্রাণিত হয়েছিল ।

সিরিজ সম্পর্কে

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

পাটিগণিত – জ্যামিতিক গড় কী?

পাটিগণিত-জ্যামিতিক গড় দুটি সংখ্যার সংখ্যা বারবার করতে গাণিতিক এবং জ্যামিতিক উপায়ে এগোয় গ্রহণ হিসাবে সংজ্ঞায়িত করা হয়। আপনার কাজটি কয়েকটি nপুনরাবৃত্তির পরে এই নম্বরটি সন্ধান করা ।

ব্যাখ্যা

  • যে a, b, nকোনও যুক্তিসঙ্গত বিন্যাসে আপনি তিনটি সংখ্যা নেন take
  • জন্য nপুনরাবৃত্তিও, এর গাণিতিক এবং জ্যামিতিক গড় নেওয়া aএবং bএবং সেই সেট aএবং b
  • দুটি সংখ্যার জন্য aএবং b, গাণিতিক গড়টি হিসাবে সংজ্ঞায়িত করা হয় (a + b) / 2
  • জ্যামিতিক গড় হিসাবে সংজ্ঞায়িত করা হয় √(a * b)
  • aএবং bএকে অপরের কাছে আসা উচিত।
  • তারপরে, আউটপুট উভয় aএবং b
  • আপনার ভাসমান ত্রুটি-বিচ্যুতির বিষয়ে চিন্তা করতে হবে না।
  • এটি তাই বাইট জেতে সংক্ষিপ্ততম কোড !

পরীক্ষার মামলা

[0, [24, 6]] -> [24, 6]    
[1, [24, 6]] -> [15.0, 12.0]
[2, [24, 6]] -> [13.5, 13.416407864998739]
[5, [24, 6]] -> [13.458171481725616, 13.458171481725616]
[10, [100, 50]] -> [72.83955155234534, 72.83955155234534]

The next one is 1/Gauss's Constant:
[10, [1, 1.41421356237]] -> [1.198140234734168, 1.1981402347341683]

লিডারবোর্ড

মার্টিনের সিরিজ থেকে চুরি।

নিম্নলিখিত স্নিপেট সিরিজের সমস্ত চ্যালেঞ্জ জুড়ে একটি লিডারবোর্ড তৈরি করবে।

আপনার উত্তরগুলি প্রদর্শিত হবে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে প্রতিটি উত্তর শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার। আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন। এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


1
প্রাথমিক সংখ্যাগুলি কি ধনাত্মক পূর্ণসংখ্যার?
xnor

2
" উভয় aবাb " ভাল, কোনটি? দুজনই, না হয় একজন?
ডুরকনব

@ ডুরকনব -_- এটি উভয়ই।
মালটিসেন

1
@ এক্সনর নং শেষ পরীক্ষা-কেস দেখুন।
মালটিসেন

5
সিরিজের এই অংশটি তৈরি করা এক ধরণের দুর্ভাগ্যজনক পরিস্থিতির কারণ হয়ে দাঁড়ায়। এটি এত সরল যে সমাধানগুলি সমস্ত দেখতে বেশ একই রকম দেখাচ্ছে। এবং ইতিমধ্যে ব্যবহৃত ভাষাগুলিতে অনুরূপ সমাধানগুলি পোস্ট করা সাধারণত প্রত্যাখ্যান করা হয়। আমি আমার সমাধানটি প্রায় 2 মিনিটের মধ্যে লিখেছিলাম, তবে এটি এমন একটি ভাষায় যা ইতিমধ্যে ব্যবহৃত হয়েছিল এবং এটি একই দৈর্ঘ্যের। আমি যদি সাধারণ পোস্টিংয়ের শিষ্টাচার অনুসরণ করি তবে আমি সিরিজে অংশ নিতে পারব না।
রেটো কোরাদি

উত্তর:



9

ডায়ালগ এপিএল , 22 21 15 বাইট

.5∘(+.×,×.*⍨)⍣⎕

( , ) কে সঠিক আর্গুমেন্ট হিসাবে গ্রহণ করে এবং n এর জন্য অনুরোধ করে :

(

  +.× 0.5 এবং ডান আর্গুমেন্টের ডট পণ্য

, অনুসরণ করেছে

  ×.*⍨সঠিক যুক্তির "ডট পাওয়ার" এবং 0.5 *

)⍣⎕ সংখ্যা-প্রম্পট বার প্রয়োগ করা।

* "বিন্দু শক্তি" ডট পণ্যগুলির মতো, তবে গুণমান এবং শক্তিটি প্লাস এবং গুণনের পরিবর্তে ব্যবহার করে, নিম্নরূপ:

      n
A ×.*⍨ B হ'ল B i A = B 1 A B 2 A
      i = 1

-3 বাইট এনএনজি ধন্যবাদ।


পুরনো সংস্করণ:

{((+/÷≢),.5*⍨×/)⍣⍺⊢⍵}

লাগে nবাম আর্গুমেন্ট হিসাবে এবং a bঅধিকার আর্গুমেন্ট হিসাবে।

⊢⍵RightArg উপর
(... )⍣⍺পুনঃগণনা LeftArg বার
(+/÷≢)সমষ্টি ট্যালি দ্বারা বিভক্ত
,দ্বারা অনুসরণ
.5*⍨×/পণ্যের বর্গমূল।

সমস্ত পরীক্ষার কেস:

      f←{((.5×+/),.5*⍨×/)⍣⍺⊢⍵}
      0 1 2 5 10 10 f¨ (24 6)(24 6)(24 6)(24 6)(100 50)(1,2*.5)
┌────┬─────┬────────────────┬───────────────────────┬───────────────────────┬───────────────────────┐
│24 6│15 12│13.5 13.41640786│13.45817148 13.45817148│72.83955155 72.83955155│1.198140235 1.198140235│
└────┴─────┴────────────────┴───────────────────────┴───────────────────────┴───────────────────────┘

কি f⍣⍺⊢⍵বা অনুরূপ একটি বাগ্ধারা আপনি পেশাগতভাবে ব্যবহার করবেন?
lirtosiast

@ থমাসকওয়া হ্যাঁ, উদাহরণস্বরূপ miserver.dyalog.comOf⍣core⊢TREEদেখুন (বড় "ডি" ক্লিক করুন এবং লাইনে স্ক্রোল করুন [266])।
অ্যাডম

7

টিআই-বেসিক, 22 বাইট

Input N
For(I,1,N
{mean(Ans),√(prod(Ans
End
Ans

অ্যালগরিদম যা বলে ঠিক তা করে। প্রম্পট থেকে এন, এবং A এবং B Ansকে দ্বি-উপাদানগুলির তালিকা হিসাবে নিয়ে যায়।

যদি এন 0 হয় তবে For(লুপটি পুরোপুরি এড়িয়ে যায়।


6

জাভাস্ক্রিপ্ট ES7, 48 43 বাইট

-5 ডাউনগোটকে ধন্যবাদ!

f=(n,a,b)=>n?f(n-1,(a+b)/2,(a*b)**.5):[a,b]

খুব সহজ পুনরাবৃত্তি ফাংশন।


2
(a*b)**.5তুলনায় খাটো Math.sqrt(a*b)উদাহরণস্বরূপ
ডাউনগোট

@ ডাউনগোট এটি ইএস,, তবে মেহ h
কনর ও'ব্রায়েন

6

ম্যাটল্যাব / অক্টোব, 69 65 বাইট tes

function [a,b]=r(a,b,n)
for i=1:n;j=(a+b)/2;b=(a*b)^.5;a=j;end

1
আপনি সেই পুনরাবৃত্তিতে আবার b=(a*b).^5পুনরায় ব্যবহার না bকরে 4 বাইট বাঁচানোর কারণে আপনি সরাসরি করতে পারেন ।
মস্তিষ্ক গাইড

6

জেলি, অ-প্রতিযোগিতামূলক

9 বাইট এই উত্তরটি প্রতিদ্বন্দ্বিতামূলক নয়, কারণ এটি এমন বৈশিষ্ট্যগুলি ব্যবহার করে যা চ্যালেঞ্জ পরবর্তী পোস্ট করে দেয়।

SH;P½¥ðṛ¡

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

SH;P½¥ðṛ¡    Input: x (vector) -- y (repetitions)

SH           Take the sum (S) of x and halve (H) the result.
   P½        Take the product (P) of x and the square root (½) of the result.
     ¥       Combine the last two instructions in a dyadic chain.
  ;          Concatenate the results to the left and to the right.
      ð      Push the preceding, variadic chain; begin a new, dyadic chain.
       ṛ     Return the right argument (y).
        ¡    Repeat the pushed chain y times.

5

গুরুতরভাবে, 11 বাইট

,p`;π√@æk`n

হেক্স ডাম্প:

2c70603be3fb40916b606e

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

,                    Read in the list as [n,a,b]
 p                   pop list to yield: n [a,b]
  `      `n          Push a quoted function and run it n times.
   ;                 Duplicate [a,b] pair
    π√               Compute its product and square root it (GM)
      @              Swap the other copy of the pair to the top
       æ             Compute its mean.
        k            Compile the stack back into a list.

5

সি ++, 108 102 100 বাইট

আমাকে 6 বাইট বাঁচানোর জন্য @ রেটোকোরাডি এবং @ অ্যালেক্সার ধন্যবাদ জানাই।

এটি অ-প্রতিযোগিতামূলক, কারণ সি ++ ভাল গল্ফ করার ভাষা নয়। মজা করার জন্য এটি করেছেন :)

#include<cmath>
std::string f(float a,float b,int n){return n==0?a+" "+b:f((a+b)/2,sqrt(a*b),n-1);}

এটি একটি সাধারণ পুনরাবৃত্তি ফাংশন, জেএস উত্তরের সাথে খুব মিল।


3
আপনি কমা পরে স্পেস থেকে মুক্তি পেতে পারেন। এছাড়াও, floatপরিবর্তে ব্যবহার doubleকরা সংক্ষিপ্ত।
রেটো কোরাদি

1
আপনি #includeলাইনের স্থানও সরাতে পারবেন ।
অ্যালেক্স এ।

বাহ, আমি এটি বোকা বোকা। ধন্যবাদ!
দ্য কফিকপ

আমি বিবেচনা করব f(float*s)যা কোন "যুক্তিসঙ্গত ফর্ম্যাটে" হতে 3 ফ্লোটের পয়েন্টার লাগে। নিশ্চিত না যে এটি আসলে এটি খাটো করে তোলে।
nwp

4

কে 5, 15 বাইট

খুব আক্ষরিক:

{(+/x%2;%*/x)}/

কর্মে:

 {(+/x%2;%*/x)}/[0; 24 6]
24 6
 {(+/x%2;%*/x)}/[5; 24 6]
1.345817e1 1.345817e1

দুর্ভাগ্যক্রমে, এটি ওকে তে কাজ করে না কারণ সেই অনুবাদক বর্তমানে অ্যাডওয়্যারসের প্রজেকশন (কার্চিং) সমর্থন করে না। আসল কে 5 এ কাজ করে।

ওকে, বর্তমানে একটি ল্যাম্বডায় সংজ্ঞাটি আবদ্ধ করা প্রয়োজন:

  {x{(+/x%2;%*/x)}/y}[5; 24 6]
13.4582 13.4582

4

জে, 18 13 বাইট

-:@+/,%:@*/^:

ব্যবহার:

   agm =: -:@+/,%:@*/^:
   5 agm 24 6
13.4582 13.4582

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

3

জাপট , 24 বাইট 25 33

সংরক্ষিত 9 7 বাইট @ETH প্রডাকশনগুলিকে ধন্যবাদ

Uo r@[VW]=[V+W /2(V*W q]

ES6 ধ্বংসের সুবিধা গ্রহণ করে।

এটি অনলাইনে চেষ্টা করুন

অবহেলিত ও & ব্যাখ্যা

Uo r@[VW]=[V+W /2(V*W q]

       // Implicit: U: 1st input, V: 2nd input, W: 3rd input
Uo     // Range from 0 to 1st input
r@     // Loop over range
  [V,W]=    // Set 2nd and 3rd input to...
   [V+W /2,   // Add 2nd and 3rd inputs, divide by 2
   (V*W q]    // Multiple 2nd and 3rd inputs, find square root
            // Set's to the above respectively 
       // Implicit: return [V,W]

Uo0 থেকে U পর্যন্ত বিস্তৃত সংখ্যা তৈরি করে, তাই Uo m@[V,W]=[V+W /2,(V*W q]কাজ করা উচিত। (স্বাক্ষরিত)
ইটিএইচ প্রোডাকশনগুলি

ওহ, এবং আপনার কমাগুলির মোটেই প্রয়োজন হবে না। :)
ইটিএইচ প্রডাকশনগুলি

পুনরায় @ ইথ প্রডাকশন ধন্যবাদ! :)
ডাউনওয়েট

ওহ প্রিয়, এটি U1 ব্যতীত অন্য যে কোনওটির জন্য ব্যর্থ হয় , প্রতিটি লুপকে যেমন যায় তেমন আউটপুট দেয়। এখানে যা সঠিকভাবে কাজ করে তা এখানে রয়েছে:Uo £[VW]=[V+W /2(V*W q]};[VW]
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশন ধন্যবাদ, তবে ব্যবহারটিও rকাজ করেছে বলে মনে হয়েছিল
ডাউনওয়েট


3

পাইথ, 12

u,.OG@*FG2EQ

পরীক্ষা স্যুট

ব্যাখ্যা

u,.OG@*FG2EQ    ##  implicit: Q = eval(input())
u         EQ    ##  reduce eval(input()) times, starting with Q
                ##  the reduce lambda has G as the previous value and H as the next
  .OG           ##  arithmetic mean of last pair
     @*FG2      ##  geometric mean of last pair, uses *F to get the product of the list
                ##  and @...2 to get the square root of that
 ,              ##  join the two means into a two element list

সম্পর্কে ভুলে গেছি @এবং .O, কিন্তু আমি এমনকি নতুন উদ্দেশ্য জানতাম না E
orp

@ অরলপ আহ, আপনার পোস্টটি দেখেননি, আমার খারাপ আমি মন্তব্যগুলিতে কেবল এই পরামর্শ দেব। এবং হ্যাঁ, সমস্ত পরিবর্তিত
সামগ্রীর উপর

2

মিনকোলাং v0.14, 23 বাইট

এখানে চেষ্টা করুন !

$n[$d+2$:r*1Mi2%?!r]$N.
$n                      C get all input C
  [                ]    C pop N; repeat inner N times C
   $d                   C duplicate stack [1,2] => [1,2,1,2] C
     +                  C add top two elements C
      2$:               C divide by two C
         r              C reverse stack (get the other two) C
          *             C multiply them together C
           1M           C take square root C
             i2%?!r     C reverse the stack if an odd step number C
                    $N  C output stack
           1M           C take square root C
             i          C get step in for loop C


2

পাইথন 3, 65 55 বাইট

অপারেটরটি ব্যবহার করে সংক্ষিপ্ত সংস্করণটি দেখানোর জন্য ম্যাথম্যান্ডনে ধন্যবাদ lambda

f=lambda a,b,n:f((a+b)/2,(a*b)**.5,n-1)if n else(a,b)

আমার আসল সংস্করণ:

def f(a,b,n):
 if n:f((a+b)/2,(a*b)**.5,n-1)
 else:print(a,b)

আমার ছাগ্রিনের কাছে একটি পুনরাবৃত্ত ফাংশন (একটি লা জাভাস্ক্রিপ্ট এবং সি ++ উত্তর) লুপের জন্য সহজের চেয়ে কম ছিল।


2
আপনি এটি lambdaএবং টার্নারি if/elseঅপারেটরটির সাহায্যে কিছুটা ছোট করতে পারেন :f=lambda a,b,n:f((a+b)/2,(a*b)**.5,n-1)if n else(a,b)
ম্যাথমান্ডান

সমস্যা নেই! (এছাড়াও, আমি মনে করি এটি 53 বাইট)
mathmandan

আমি সংরক্ষণ করে .py ফাইল 55 বাইট হিসাবে তালিকাভুক্ত করা হয়। প্রোগ্রামের আকার গণনা করার আরও ভাল উপায় আছে কি?
জ্যাক ব্রাউনস্টেইন

কখনও কখনও এই সাইটের লোকেরা তাদের কোডটি নকল করে মোটেরেফ.ইন.বাইটি- কাউন্টারে আটকান । আপনি যদি এই তাত্পর্য সম্পর্কে ভাবছেন তবে আমি অনুমান করব যে উইন্ডোজ আপনার .py ফাইলের শেষে একটি অপ্রয়োজনীয় নিউলাইন চরিত্রটি সন্নিবেশ করছে (এবং উইন্ডোজ 1 এর পরিবর্তে 2 বাইট হিসাবে একটি নিউলাইন গণনা করে)। যে কোনও উপায়ে, স্কোর করার উদ্দেশ্যে আপনাকে শেষ কোডটি আপনার কোডের অংশ হিসাবে গণনা করতে হবে না। আপনি যদি একাধিক-লাইন এন্ট্রি পোস্ট করেন তবে আপনার প্রতিটি লাইন অক্ষরের জন্য 1 টি গণনা করা উচিত, 2 নয়, এবং আপনার কোডের শেষ লাইনের শেষে কোনও নিউলাইন অন্তর্ভুক্ত না করে। (যতদূর আমি বিধিগুলিকে যাইহোক বুঝতে পারি!)
mathmandan

2

আর, 66 বাইট

f=function(a,b,n){while(n){x=(a+b)/2;b=(a*b)^.5;n=n-1;a=x};c(a,b)}

ব্যবহার:

> f(24,6,0)
[1] 24  6
> f(24,6,1)
[1] 15 12
> f(24,6,2)
[1] 13.50000 13.41641
> f(24,6,3)
[1] 13.45820 13.45814
> f(24,6,4)
[1] 13.45817 13.45817
> f(100,50,10)
[1] 72.83955 72.83955
> f(1,1.41421356237,10)
[1] 1.19814 1.19814

আপনি 2 বাইট সংরক্ষণের জন্য ফাংশনটির নামটি সরাতে পারেন।
অ্যালেক্স এ।

2

গণিত, 31 30 বাইট

মার্টিন বাটনারকে একটি বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে।

{+##/2,(1##)^.5}&@@#&~Nest~##&

ব্যবহার:

In[1]:= {+##/2,(1##)^.5}&@@#&~Nest~##&[{24, 6}, 5]

Out[1]= {13.4582, 13.4582}

1

লুয়া, 62 বাইট

n,a,b=...for i=1,n do a,b=(a+b)/2,math.sqrt(a*b)end print(a,b)

ব্যবহার থেকে লাইন আর্গুমেন্ট আদেশ ...করার দায়িত্ব অর্পণ করা n, aএবং b, একটি ছিমছাম কৌতুক আমি অ্যাপ্লিকেশন Lua সম্পর্কে সম্প্রতি কিছু শিখেছি।


1

হাস্কেল, 40 বাইট

(!!).iterate(\(a,b)->((a+b)/2,sqrt$a*b))

একটি বেনামে ফাংশন। ব্যবহারের উদাহরণ:

>> let f=(!!).iterate(\(a,b)->((a+b)/2,sqrt$a*b)) in f (1.0,1.41421356237) 10
(1.198140234734168,1.1981402347341683)

ল্যাম্বডা ফাংশনটি (\(a,b)->((a+b)/2,sqrt$a*b))একটি টিপলের গাণিতিক এবং জ্যামিতিক গড় নেয়। এটি প্রথম পুনরায় ইনপুট (একটি টিপল) দিয়ে শুরু হয় এবং (!!)পুনরাবৃত্তির সংখ্যা নির্দিষ্ট করতে দ্বিতীয় ইনপুটটিকে সূচক করে es


1

পার্ল, 60 বাইট

perl -ape'F=($F[0]/2+$F[1]/2,sqrt$F[0]*$F[1])for 1..shift@F;$_="@F"'

বিশেষ দ্রষ্টব্য: প্রতি এই মেটা পোস্টে , আমি বিশ্বাস করি আমি স্কোরিং সঠিক পেয়েছেন। আসল কোডটি (একক উদ্ধৃতিগুলির মধ্যে) 58 টি অক্ষর, তারপরে আমি +2 aএবং pপতাকাগুলি সংক্ষিপ্ত আহ্বানের থেকে পৃথক হিসাবে যুক্ত করেছি,perl -e'...'

লীগের অভিযোগ

আমার এই উত্তেজনা অনুভব করছি আমি একটি সুস্পষ্ট উন্নতি মিস করছি। আমি জানি, "কোড গল্ফে আপনাকে স্বাগতম", তবে আমি স্বাভাবিকের চেয়ে বেশি বোঝাতে চাইছি এটিকে ছোট করার একটি সহজ সুযোগ আছে বলে আমি বিশ্বাস করি।

প্রথম দিকে, আমি $\কিছু সাফল্যের সাথে দ্বিতীয় শব্দ হিসাবে ব্যবহার করে চারপাশে গণ্ডগোল করেছি , তবে উপরের পদ্ধতির অতিরিক্ত 2 টি বাইট কম হওয়া সত্ত্বেও অতিরিক্ত apফ্ল্যাগ প্রয়োজনীয় ছিল। একইভাবে, স্পষ্টত $_বরাদ্দ এড়ানো ভাল হবে, তবে লুপটি এটি কঠিন করে তোলে।

shift@Fবাগ আমাকে খুব; আমি যদি সেভাবে না করি তবে (বা @F=(0,...,...)পরিবর্তে ব্যবহার করুন, যা কোনও বাইট সংরক্ষণ করে না), @Fঅ্যাসাইনমেন্টের সাথে একটি বাইরের ত্রুটি আছে ।

উদাহরণ

echo 5 24 6 | perl -ape'F=($F[0]/2+$F[1]/2,sqrt$F[0]*$F[1])for 1..shift@F;$_="@F"'

আউটপুট

13.4581714817256 13.4581714817256

1

জুলিয়া, 49 বাইট

(a,b,n)->(for i=1:n;a,b=(a+b)/2,√(a*b)end;(a,b))

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


1

হাস্কেল, 47 বাইট

f a b 0=(a,b)
f a b n=f((a+b)/2)(sqrt$a*b)(n-1)

আপনি f: fx 0 = x; f (a, b) n = f ((a + b) / 2, sqrt $ a * b) in n-1
দামিয়েন

এবং ফাংশন infix সংজ্ঞায়িত করুন।
xnor

1

জুলিয়া, 42 বাইট

f(a,b,n)=n>0?f((a+b)/2,(a*b)^.5,n-1):(a,b)

এটি একটি পুনরাবৃত্ত ফাংশন fযা তিনটি সংখ্যা গ্রহণ করে এবং একটি টিপল দেয়।

Ungolfed:

function f(a::Real, b::Real, n::Integer)
    if n > 0
        # Recurse on the arithmetic and geometric means, decrementing n
        return f((a + b) / 2, sqrt(a * b), n - 1)
    else
        # Return the pair
        return (a, b)
    end
end


1

পাইথন 2, 62 61 62 বাইট

def f(a,b,n):
 while n:a,b=(a+b)/2.,(a*b)**.5;n-=1
 print a,b

3
প্রোগ্রামটি একবারে মুদ্রণ করা উচিত, যখন এটি শেষ হয়।
lirtosiast

1
আমার ভুল বোঝাবুঝি সংশোধন করা হয়েছে।
wflynny

1

সিজেম, 16 বাইট

{{_:+2/\:*mq]}*}

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

আমি সাধারণত এটি পোস্ট করতাম না কারণ প্রশ্নটি দেখার আগে @ পিটারটেলর সমান দীর্ঘ সিজেএম উত্তর পোস্ট করেছিল। তবে যেহেতু এটি কোনও সিরিজ শুরুর হিসাবে বিজ্ঞাপন দেওয়া হয়েছে, তাই সিরিজটি আকর্ষণীয় হওয়ার ক্ষেত্রে আমি আমার বিকল্পগুলি খোলা রাখতে চেয়েছিলাম।

দৈর্ঘ্য পিটারের উত্তরের সমান হলেও কোডটি নেই। আমি তালিকায় দুটি মান নিয়ে আলাদা ইনপুট ফর্ম্যাটটি বেছে নিয়েছি, যেখানে পিটার পৃথক মান ব্যবহার করেছে। সুতরাং উভয়ই ইনপুট ফর্ম্যাট সহ এটির খুব বেশি কিছু নেই, কোডটি একেবারেই আলাদা দেখায় looks

{     Start loop over number of iterations.
  _     Copy the current pair of values.
  :+    Reduce pair with + operator.
  2/    Divide by 2.
  \     Swap second copy of pair to top.
  :*    Reduce pair with * operator.
  mq    Calculate square root.
  ]     Wrap the two new values in a list for next iteration.
}*    End iteration loop.

0

পার্ল 6 ,  53  47 বাইট

{(($^a,$^b),->(\a,\b){((a+b)/2,sqrt(a*b))}...*)[$^n]} # 53 bytes

ব্যবহার:

# give it a name
my &code = {(($^a,$^b),->(\a,\b){((a+b)/2,sqrt(a*b))}...*)[$^n]}

say code 100,50,10;          # (72.8395515523453 72.8395515523453)
say code 1,1.41421356237,10; # (1.19814023473417 1.19814023473417)

আমি যদি ইনপুটটি থেকে পরিবর্তন করি তবে আমি কয়েকটি বাইট সংরক্ষণ a,b,nকরতে (a,b),nপারি।

{($^l,->(\a,\b){((a+b)/2,sqrt(a*b))}...*)[$^n]} # 47 bytes

ব্যবহার:

my &code = {($^l,->(\a,\b){((a+b)/2,sqrt(a*b))}...*)[$^n]}

say code (100,50),10;          # (72.8395515523453 72.8395515523453)
say code (1,1.41421356237),10; # (1.19814023473417 1.19814023473417)

say code (24,6),$_ for 0,1,2,5;
# (24 6)
# (15 12)
# (13.5 13.4164078649987)
# (13.4581714817256 13.4581714817256)
{
  (
    $^l,          # first 2 element tuple
    ->            # pointy block (lambda)
      (\a,\b)     # take a single tuple, and give its 2 elements each a name
    {
      (           # create a 2 element tuple
        (a+b)/2,  # arithmetic mean
        sqrt(a*b) # geometric mean
      )
    } ... *       # create a lazy infinite sequence of tuples
  )[ $^n ]        # take the nth "tuple" from the outer sequence
}

সত্যিই আমি অদলবদল হবে ... *সঙ্গে ... -> (\a,\b) { a =~= b }, তারপর জন্য কোন প্রয়োজন হবে $^nপ্যারামিটার।
( ==পরিবর্তে ব্যবহার করবেন না =~=, বা এটি বন্ধ নাও হতে পারে)

my &code = {($^l,->(\a,\b){((a+b)/2,sqrt(a*b))}...->(\a,\b){a=~=b})[*-1]}

say code (24,6);           # (13.4581714817256 13.4581714817256)
say code (100,50);         # (72.8395515523453 72.8395515523453)
say code (1,1.41421356237) # (1.19814023473417 1.19814023473417)

0

প্রোলোগ, 80 বাইট

কোড:

p(A,B,0):-write([A,B]).
p(A,B,N):-X is(A+B)/2,Y is sqrt(A*B),M is N-1,p(X,Y,M).

উদাহরণ:

p(100,50,10).
[72.83955155234534, 72.83955155234534]

এটি এখানে অনলাইনে চেষ্টা করুন


0

জাভা, 103 96 84 বাইট

String f(int n,double a,double b){return n>0?f(n-1,(a+b)/2,Math.sqrt(a*b)):a+","+b;}

সমস্ত টেস্টকেস যাচাই করুন।

পুরানো সংস্করণ (96 বাইট):

String f(int n,double a,double b){for(;n>0;a=(a+b)/2,b=Math.sqrt((b-2*a)*b))n--;return a+","+b;}

পুরানো সংস্করণ (103 বাইট):

String f(int n,double a,double b){double t;for(;n>0;t=(a+b)/2,b=Math.sqrt(a*b),a=t)n--;return a+","+b;}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.