एजीएम सीरीज होल 1: अंकगणित-ज्यामितीय माध्य की गणना करें


26

यह प्रश्न इस HNQ से प्रेरित था ।

श्रृंखला के बारे में

यह सवाल अब एजीएम पद्धति के बारे में एक श्रृंखला का हिस्सा है। श्रृंखला की यह पहली पोस्ट वास्तव में गणना के बारे में होगी AGM। आप इसे किसी भी अन्य कोड गोल्फ चुनौती की तरह मान सकते हैं, और श्रृंखला के बारे में चिंता किए बिना इसका जवाब दे सकते हैं। हालांकि, सभी चुनौतियों के बीच एक लीडरबोर्ड है।

अंकगणित-ज्यामितीय माध्य क्या है

अंकगणित-ज्यामितीय माध्य दो नंबर की संख्या कि बार-बार करने के लिए गणित और ज्यामितीय साधन और converges लेने के रूप में परिभाषित किया गया है। आपका कार्य कुछ nपुनरावृत्तियों के बाद इस संख्या को खोजना है ।

स्पष्टीकरण

  • आप तीन नंबर लेते हैं, a, b, nकिसी भी उचित प्रारूप में।
  • के लिए 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

जहाँ N आपके सबमिशन का आकार है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं, उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

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


1
क्या शुरुआती संख्या सकारात्मक पूर्णांक हैं?
22

2
" दोनों aयाb " - कौन सा? दोनों, या एक?
दरवाज़े

@ डॉर्कनोब -_- इसके दोनों।
माल्टीसेन

1
@ एक्सनोर नं। पिछले परीक्षण-मामले को देखें।
माल्टीसेन

5
श्रृंखला के इस हिस्से को बनाना एक तरह की दुर्भाग्यपूर्ण स्थिति का कारण बनता है। यह इतना सरल है कि समाधान सभी काफी समान दिखने वाले हैं। और पहले से उपयोग की जाने वाली भाषाओं में समान समाधान पोस्ट करना आम तौर पर पर आधारित है। मैंने अपना समाधान लगभग 2 मिनट में लिखा था, लेकिन यह पहले से उपयोग की जाने वाली भाषा में है, और यह एक ही लंबाई है। यदि मैं विशिष्ट पोस्टिंग शिष्टाचार का पालन करता हूं, तो मैं श्रृंखला में भाग नहीं ले पाऊंगा।
रेटो कोराडी

जवाबों:



9

दिल्लोग एपीएल , 22 21 15 बाइट्स

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

सही तर्क के रूप में ( , बी ) लेता है और एन के लिए संकेत देता है :

(

  +.× 0.5 का डॉट उत्पाद और सही तर्क

, के बाद

  ×.*⍨सही तर्क की "डॉट पावर" और 0.5 *

)⍣⎕ लागू सांख्यिक-शीघ्र समय।

* "डॉट पॉवर" डॉट प्रॉडक्ट की तरह है, लेकिन प्लस और गुणा के बजाय गुणा और पावर का उपयोग करते हुए, निम्नानुसार है:

      n
A ×.*⍨ B है Π बी मैं एक = Π बी 1 बी 2 एक
      मैं = 1

-3 बाइट्स ngn के लिए धन्यवाद।


पुराना संस्करण:

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

nबाएं तर्क के a bरूप में और सही तर्क के रूप में लेता है।

⊢⍵RightArg पर
(... उत्पाद के वर्गमूल के बाद tally द्वारा विभाजित )⍣⍺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

@ThomasKwa हां, उदाहरण के Of⍣core⊢TREEलिए miserver.dyalog.com पर क्लिक करें (बड़े "डी" पर क्लिक करें और लाइन पर स्क्रॉल करें [266])।
Adám

7

टीआई-बेसिक, 22 बाइट्स

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

ठीक वैसा ही होता है जैसा कि एल्गोरिथ्म कहता है। N को प्रॉम्प्ट से, और A और B Ansको दो-तत्व सूची के रूप में लेता है ।

यदि एन 0 है, तो For(लूप पूरी तरह से छोड़ दिया जाता है।


6

जावास्क्रिप्ट ईएस 7, 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)उदाहरण
डाउनग्रेड

@Downgoat वह ES7 है, लेकिन meh।
कॉनर ओ'ब्रायन

6

MATLAB / ऑक्टेव, 69 65 बाइट्स

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 बाइट बचाने के लिए @RetoKoradi और @AlexA को धन्यवाद।

यह गैर-प्रतिस्पर्धी है, क्योंकि C ++ एक अच्छी गोल्फिंग भाषा नहीं है। मज़ा के लिए यह किया :)

#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

K5, 15 बाइट्स

बहुत शाब्दिक:

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

कार्रवाई में:

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

दुर्भाग्य से, यह ओके में काम नहीं करता है क्योंकि वह दुभाषिया वर्तमान में क्रियाविशेषण के प्रक्षेपण (करी) का समर्थन नहीं करता है। असली k5 में काम करता है।

ओके में, वर्तमान में एक लंबो में परिभाषा को लपेटना आवश्यक होगा:

  {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 बाइट @ETHproductions के लिए धन्यवाद

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]काम करना चाहिए। (
अनटाइटेड

ओह, और आपको अल्पविराम की आवश्यकता नहीं होनी चाहिए। :)
ETHproductions

@ETHproductions धन्यवाद फिर से! :)
डाउनगेट

ओह प्रिय, यह U1 के अलावा किसी भी अन्य के लिए विफल रहता है , प्रत्येक लूप को आउटपुट करता है जैसा कि यह जाता है। यहाँ एक है जो ठीक से काम करता है:Uo £[VW]=[V+W /2(V*W q]};[VW]
ETHproductions

@ETHproductions धन्यवाद, लेकिन rयह भी काम करने के लिए लग रहा था का उपयोग करते हुए
Downgoat

3

मतलाब, 54 बाइट्स

function x=f(x,n)
for k=1:n
x=[mean(x) prod(x)^.5];end

उदाहरण:

>> f([24 6], 2)
ans =
  13.500000000000000  13.416407864998739

3

अजगर, १२

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
orlp

@orlp आह, आपकी पोस्ट नहीं देखी, मेरा बुरा मुझे इन टिप्पणियों में सिर्फ सुझाव दिया होगा। और हाँ, सभी बदलते हुए सामानों पर नज़र रखना थोड़ा संघर्ष है: P
FryAmTheEggman

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 बाइट्स है।)
मैथमैडैन

मेरे द्वारा सहेजी गई .py फ़ाइल को 55 बाइट्स के रूप में सूचीबद्ध किया गया है। क्या कार्यक्रम के आकार की गणना करने का एक बेहतर तरीका है?
जैक ब्रूनस्टीन

कभी-कभी इस साइट पर लोग अपना कोड mothereff.in/byte-counter में कॉपी और पेस्ट करते हैं । यदि आप विसंगति के बारे में सोच रहे हैं, तो मुझे लगता है कि विंडोज़ आपकी .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, एक निफ्टी ट्रिक जिसे मैंने हाल ही में लुआ के बारे में सीखा।


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))एक ट्यूपल पर अंकगणित और ज्यामितीय माध्य लेता है। यह पहले इनपुट (टुपल) से शुरू होता है, और फिर (!!)पुनरावृत्तियों की संख्या निर्दिष्ट करने के लिए दूसरा इनपुट अनुक्रमित करता है।


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) $ 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

LabVIEW, 21 LabVIEW आदिम

इस मेटा पोस्ट के अनुसार प्रिमिटिव्स की गणना की जाती है ।

बहुत स्पष्ट करने के लिए बहुत स्पष्ट नहीं है।


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
मेरी गलतफहमी। फिक्स्ड।
विघ्नहर्ता

1

सीजेएम, 16 बाइट्स

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

यह एक अनाम फ़ंक्शन है। इनपुट दो मानों (डबल्स के रूप में) के साथ एक सूची है, इसके बाद पुनरावृति गिनती है। परीक्षण के लिए I / O कोड के साथ इसे ऑनलाइन आज़माएं

मैंने आमतौर पर यह पोस्ट नहीं किया होगा क्योंकि @PeterTaylor ने प्रश्न देखने से पहले एक समान रूप से CJam उत्तर पोस्ट किया था। लेकिन चूंकि यह एक श्रृंखला की शुरुआत के रूप में विज्ञापित है, मैं श्रृंखला के दिलचस्प होने की स्थिति में अपने विकल्प खुले रखना चाहता था।

जबकि लंबाई पीटर के जवाब के समान है, कोड नहीं है। मैंने एक सूची में दो मूल्यों को ले कर एक अलग इनपुट प्रारूप को चुना, जहां पीटर ने अलग-अलग मूल्यों का उपयोग किया। तो जबकि इनपुट प्रारूप के साथ इसके लिए बहुत कुछ नहीं है, कोड काफी अलग दिखता है।

{     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;}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.