İki tamsayının ortalamalarını topla


12

Matematikte aritmetik ortalama, geometrik ortalama ve diğerleri gibi birkaç araç vardır ...

Tanımlar ve Görev

Bunların iki pozitif tamsayı * için tanımlar olduğunu unutmayın :

  • Kök ortalama kare yarıya onların karelerinin toplamının (kare köküdür ).

  • Aritmetik ortalama yarıya bunların toplamı olduğu ( ).

  • Geometrik ortalama kendi ürün kareköküdür ( ).

  • Harmonik ortalama olan 2 bunların terslerinden toplamı (bölünmesiyle = ).

A ve b olmak üzere iki tam sayı verildiğinde , a, b ∈ [1, + ∞) , a ve b'nin yukarıda belirtilen araçları toplayın . Yanıtlarınızın en az 3 ondalık basamağa kadar doğru olması gerekir, ancak yuvarlama veya kayan nokta hassasiyeti hataları hakkında endişelenmenize gerek yoktur.

Test Durumları

a, b -> Çıktı

7, 6 -> 25.961481565148972
10, 10 -> 40
23, 1 -> 34.99131878607909
2, 4 -> 11.657371451581236
345, 192 -> 1051.7606599443843

Bu programı kullanarak daha fazla test vakası için doğru sonuçları görebilirsiniz . Bu , bu nedenle standart kurallara uyan en kısa geçerli gönderimler kazanır.

* Başka birçok yol var, ancak bu zorluğun amaçları için "Tanımlar" bölümünde belirtilenleri kullanacağız.



10
Ortalamaların çıktısını istemeliydim. -1 (değil).
zamirim monicareinstate

9
En azından bunun için Mathematica yerleşik değil. Sağ?
NieDzejkob

@NieDzejkob Sanmıyorum :-)
Bay Xcoder

@NieDzejkob Her ne kadar araçların her biri için yerleşik olduğundan şüpheleniyorum.
Outgolfer Erik

Yanıtlar:


13

Haskell , 48 bayt

a%b=sum[((a**p+b**p)/2)**(1/p)|p<-[2,1,-1,1e-9]]

Çevrimiçi deneyin!

Bu kök-kare, aritmetik, harmonik, geometrik ortalama her özel durumlardır gerçeğini kullanır genelleştirilmiş ortalama ((a**p+b**p)/2)**(1/p) için p=2,1,-1,0. Geometrik ortalama kullanımları sınırı p->0+yaklaşık olarak aynı p=1e-9olan hassasiyet için yeterli olmaktadır.


9

Mathematica , 37 bayt

Martin Ender sayesinde -2 bayt. Jenny_mathy sayesinde -6 bayt ve JungHwan Min sayesinde fonksiyon yeniden kullanılabilirliği.

(t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&

Çevrimiçi deneyin!

Mathematica , 55 bayt

RootMeanSquare@#+Mean@#+GeometricMean@#+HarmonicMean@#&

Çevrimiçi deneyin!

¯ \ _ (ツ) _ / ¯


1
Alternatif:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Bay Xcoder

1
2 bayt kapalı:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender

2
42 bayt: (((s=+##)^2-2##)/2)^.5+s/2+(1##)^.5+2##/s&
J42161217

6
37 bayt: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s&
J42161217

2
Jenny_mathy versiyonu (aynı bayt sayısı) @ için hafif bir düzeltme: (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Sadece işlevi tekrar kullanmayı kolaylaştırmak için ( Clear@ther yinelemeden önce çalıştırmak zorunda kalmadan ).
JungHwan Min

5

Python 3 , 57 bayt

lambda a,b:(a+b+(a*a+b*b<<1)**.5)/2+(a*b)**.5+2*a*b/(a+b)

Çevrimiçi deneyin!


<<1Yanlış bir tam sayıya kesecek olacak ave btam tersi pariteler bulunmaktadır.
xnor

@xnor Hayır değil :) Sen düşünüyorsun >>1.
orlp

1
Hata benim! Görüyorum /2ki bunun telafi ettiği bir dış var. İyi numara.
xnor


3

Haskell , 48 bayt

a?b|s<-a+b,p<-a*b=s/2+sqrt(s^2/2-p)+sqrt p+2*p/s

Çevrimiçi deneyin!

Açıklama:

s/2 = (a+b)/2: Aritmetik ortalama.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Kök ortalama kare.

sqrt p = sqrt(a*b). Geometrik ortalama.

2*p/s = 2*a*b/(a+b). Harmonik ortalama.


3

Oktav , 44 42 41 bayt

@(n)(q=mean(n))+rms(n)+(z=prod(n))^.5+z/q

Çevrimiçi deneyin!

TIO'da sinyal paketi kurulu olmadığına dikkat edin, bu yüzden rms()başlıkta tanımladım . On Octave Online'da , sen eğer deneyebilirsiniz pkg load nan. Varsayılan olarak yükleyen herhangi bir çevrimiçi tercüman olup olmadığından emin değilim, ancak çoğu sistem varsayılan olarak bu paketi yükleyecektir.

Tom Carpenter'a 2 baytlık küçük bir hata tespit ettiği için teşekkürler.

Bu, girişi vektör olarak alarak anonim bir işlevi tanımlar n=[a,b]. Daha sonra HM hesaplamasını sadece azaltmak için satır içi atama kullanırız z/q.


1
Bu f=kodu 42 bayt yapacak şekilde koda eklemenize gerek yoktur . (Tabii ki "44'ü 44'e benziyor") - Çevrimiçi deneyin!
Tom Carpenter

Hata! Bu Octave-Online'dan kopyalamanın bir eseri! Teşekkürler.
Ekim'deki Sanchises

TIO varsayılan olarak kurulu paketleri yükler, sadece Signal paketini yüklemez
Luis Mendo

@LuisMendo Tam olarak, MATLAB ve Octave'nın fiili standardının tüm paketlerin kurulu ve yüklü olduğunu varsaymak olduğunu düşünüyorum.
Ekim'deki Sanchises

^.5 Bir bayt kaydeder üzerinde sqrt. Ayrıca, f=bağlantıdaki kod bölümünden kaldırın
Luis Mendo

2

Jöle , 17 bayt

²Æm,P½S
PḤ÷S+Ç+Æm

Çevrimiçi deneyin!


Bağlantıların güzel kombinasyonu. Bir satırda yapabileceğim en iyi şey PḤ÷S,µ³²Æm,P½,µÆmFS(19 bayt) - bahsetmeye değer olsa da, belki de bir ilham kaynağı. DÜZENLEME: > _> Şimdi +bunun yerine kullanabileceğimin farkındayım,
Bay Xcoder

@ Mr.Xcoder İlk başta 18 byte'lık bir versiyonum vardı (revizyon geçmişinde değil) ama sonra bunları bir ½araya getirmeyi düşündüm ve bir bayt kurtardı.
Outgolfer Erik

Başka bir olası ilham kaynağı: PḤ÷SDeğiştirilebilir:İSHİ
Bay Xcoder

@ Mr.Xcoder bunu da düşündü
Outgolfer Erik

2

05AB1E , 18 16 bayt

Outgolfer Erik sayesinde -2 bayt

nO;t¹O;¹Pt2¹zO/O

Açıklama:

nO;t                Root mean square
n                    Raise [a, b] to [a ** 2, b ** 2]
 O                   Sum
  ;                  Half
   t                 Square root
    ¹O;             Arithmetic mean
    ¹                Retrieve stored [a, b]
     O               Sum
      ;              Half
       ¹Pt          Geometric mean
       ¹             Retrieve stored [a, b]
        P            Product
         t           Square root
          2¹zO/     Harmonic mean
           ¹         Retrieved stored [a, b]
            z        Vectorised inverse to [1 / a, 1 / b]
             O       Sum
          2   /      Get 2 divided by the sum
               O    Sum of all elements in stack

Çevrimiçi deneyin!


nO;t¹O;¹Pt2¹zO/O
Outgolfer Erik

@EriktheOutgolfer Bunun işe yaradığını düşünmüyorum.
Okx

Girişi liste olarak alın [a, b].
Outgolfer Erik

@EriktheOutgolfer Elbette! Neden böyle düşünmedim.
Okx


2

MATL , 21 18 17 bayt

UYmGphX^GYmGpy/vs

Çevrimiçi deneyin!

Luis Mendo sayesinde -3 bayt.

açıklama

UYm               % Mean of squares, 
                  % Stack: { (a^2+b^2)/2 }
   Gp             % Product of input, a*b
                  % Stack: { (a^2+b^2)/2, a*b }
     hX^          % Concatenate into array, take square root of each element.
                  % Stack: { [RMS, HM] } 
        GYm       % Arithmetic mean of input.
                  % Stack: { [RMS,GM], AM }
           Gpy    % Product of input, duplicate AM from below.
                  % Stack: { [RMS,GM], AM, a*b, AM
              /   % Divide to get HM
                  % Stack { [RMS,GM], AM, HM}
               vs % Concatenate all to get [RMS,GM,AM,HM], sum.

2

Ohm v2 , 16 bayt

²Σ½¬³Π¬³Σ½D³Πs/Σ

Çevrimiçi deneyin!

açıklama

square sum halve sqrt input product sqrt input sum halve dupe input product swap div sum

... eğer Ohm'un ayrıntılı bir türü varsa. : P

²Σ½¬³Π¬³Σ½D³Πs/Σ

                  implicit input       [[7, 6]]
²Σ½¬              root mean square
²                  square              [[49, 36]]
 Σ                 sum                 [85]
  ½                halve               [42.5]
   ¬               square root         [6.519]
    ³Π¬           geometric mean
    ³              push first input    [6.519, [7, 6]]
     Π             product             [6.519, 42]
      ¬            square root         [6.519, 6.481]
       ³Σ½        arithmetic mean
       ³           push first input    [6.519, 6.481, [7, 6]]
        Σ          sum                 [6.519, 6.481, 13]
         ½         halve               [6.519, 6.481, 6.500]
          D³Πs/   harmonic mean
          D        duplicate           [6.519, 6.481, 6.500, 6.500]
           ³       push first input    [6.519, 6.481, 6.500, 6.500, [7, 6]]
            Π      product             [6.519, 6.481, 6.500, 6.500, 42]
             s     swap                [6.519, 6.481, 6.500, 42, 6.500]
              /    divide              [6.519, 6.481, 6.500, 6.461]
               Σ  sum                  [25.961]
                  implicit output      [25.961]

1
Bir süre önce aritmetik ortalama için bir yerleşik eklediğimden eminim, ancak sizi burada herhangi bir bayt kurtarmaz.
Nick Clifford

2

TI-Basic (TI-84 Plus CE), 27 25 bayt

√(sum(Ans2)/2)+mean(Ans)+2prod(Ans)/sum(Ans)+√(prod(Ans

Scrooble'dan -2 bayt

İki sayının bir listesini alır Ansve dolaylı olarak dört aracın toplamını döndürür; örneğin ile {7,6}:prgmNAMEalmak için çalıştırın 25.96148157.

Açıklama:

√(sum(Ans2)/2): 8 bayt: ortalama karekök

mean(Ans): 5 3 bayt: aritmetik ortalaması (eski: sum(Ans)/2)

2prod(Ans)/sum(Ans): 8 bayt: harmonik ortalama

√(prod(Ans: 3 bayt: geometrik ortalama

3 +es için +3 bayt


Sanırım burada 2 inçten sonra eşsiz bir kapanış paranteziniz var sum(Ans)/2).
kamoroso94

@ kamoroso94 Düzeltildi, teşekkürler.
17:47

Yerleşik ile iki bayt kaydedin mean(.
Khuldraeseth na'Barya



1

JavaScript, 47 bayt

a=>b=>(c=a+b)/2+(c*c/2-(d=a*b))**.5+d**.5+2*d/c

oldukça önemsiz


1

Java 8, 63 bayt

a->b->Math.sqrt((a*a+b*b)/2)+(a+b)/2+Math.sqrt(a*b)+2/(1/a+1/b)

Her iki parametreyi de alır Doubleve çıktısını alır Double.
Burada deneyin.

Veya (ayrıca 63 bayt ):

a->b->(a+b+Math.sqrt(a*a+b*b<<1))/2+Math.sqrt(a*b)+2d*a*b/(a+b)

Her iki parametreyi de alır Integerve çıktısını alır Double.
Burada deneyin.




1

Aslında 15 bayt

æßπ√+ßΣßπτ/+ßµ+

Çevrimiçi deneyin!

Yay Aslında Kök Kare Ortalama için yerleşik bir var!

æßπ√ + ßΣßπτ / + ßµ + ~ Tam program.

Aritmetik ortalama.
 Ürün, Karekök (geometrik ortalama hesaplar).
    + ~ Ekleme.
     ßΣ ~ Giriş toplamını itin.
       ßπτ ~ Girişin ürününü iki katına itin.
          / ~ Böl.
           + ~ Ekleme.
            Kök Karesi Ortalama itin.
              + ~ Ekleme.


1

Groovy, 54 bayt

{a,b->c=a+b;((a*a+b*b)/2)**0.5+c/2+(a*b)**0.5+2*a*b/c}

- Bay Xcoder'a aptal hissettiren bir düzenleme için teşekkürler.


1
Ben değiştirmek düşünüyorum a**2ile a*ave b**2ileb*b
Sn Xcoder


0

Jq 1,5 , 76 bayt

[pow((map(pow(.;2))|add)/2;.5),add/2,pow(.[0]*.[1];.5),2/(map(1/.)|add)]|add

Expanded

[
  pow((map(pow(.;2))|add)/2;.5)  # root mean square
, add/2                          # arithmetic mean
, pow(.[0]*.[1];.5)              # geometric mean
, 2/(map(1/.)|add)               # harmonic mean
]
| add                            # that just about sums it up for mean

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.