2つの整数の平均を合計します


12

数学には、算術平均、幾何平均など、多くの平均があります...

定義とタスク

これらは2つの正の整数の定義であることに注意してください*:

  • 根平均二乗は半分自分の二乗和(の平方根です)。

  • 算術平均は(半分、それらの和です)。

  • 幾何平均は(彼らの積の平方根です)。

  • 調和平均は、ある2それらの逆(の合計で割っ= )。

二つの整数所与及びbは 、その結果、B∈[1、+∞) 、手段の上記合計とB。回答は少なくとも小数点以下3桁まで正確である必要がありますが、丸めや浮動小数点の精度エラーを心配する必要はありません。

テストケース

a、b->出力

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

このプログラムを使用して、より多くのテストケースの正しい結果を確認できます。これはであるため、標準ルールに準拠した最短の有効な提出が優先されます。

*他にも多くの手段がありますが、この課題の目的のために、「定義」セクションで言及したものを使用します。



10
平均値を出力するように求められている必要があります。-1(ない)。
私の代名詞は、

9
少なくともそのためのMathematicaビルトインはありません。正しい?
-NieDzejkob

@NieDzejkob私はそうは思わない:
Xcoder氏17年

@NieDzejkob私は、それぞれの手段にビルトインがあると疑っていますが。
エリックアウトゴルファー

回答:


13

Haskell、48バイト

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

オンラインでお試しください!

これは、ルート平方算術、高調波、および幾何学的な手段は、すべての特殊なケースであるという事実使用する一般の平均 ((a**p+b**p)/2)**(1/p)のためにp=2,1,-1,0。幾何平均は、精度に十分であるp->0+と近似される制限を使用しますp=1e-9


9

Mathematica、37バイト

-2バイトはMartin Enderのおかげです。Jenny_mathyのおかげで-6バイト、JungHwan Minのおかげで関数の再利用可能性。

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

オンラインでお試しください!

Mathematica、55バイト

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

オンラインでお試しください!

¯\ _(ツ)_ /¯


1
代替案:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
ミスターXcoder

1
2バイトオフ:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
マーティンエンダー

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

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

2
Jenny_mathyのバージョン(同じバイト数)@へのわずかな修正:(t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&。関数を再利用しやすくするためです(Clear@t各反復の前に実行する必要はありません)。
ジョンファンミン

5

Python 3、57バイト

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

オンラインでお試しください!


<<1間違って整数に切り捨てるために起こっているab、反対パリティです。
xnor

@xnorいいえ、そうではありません:)あなたは考えてい>>1ます。
orlp

1
ああ、私の間違い!私は今/2、これが補っている外部があります。ナイストリック。
xnor


3

Haskell、48バイト

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

オンラインでお試しください!

説明:

s/2 = (a+b)/2:算術平均。

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2):二乗平均平方根。

sqrt p = sqrt(a*b)。幾何平均。

2*p/s = 2*a*b/(a+b)。調和平均。


3

オクターブ44 42 41バイト

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

オンラインでお試しください!

TIOにはシグナルパッケージがインストールされていないためrms()、ヘッダーで定義したことに注意してください。上のオクターブオンライン、あなたがあれば、それを試すことができますpkg load nan。デフォルトでロードするオンラインインタープリターがあるかどうかはわかりませんが、ほとんどのシステムではこのパッケージがデフォルトでロードされます。

2バイトの小さな間違いを発見してくれたTom Carpenterに感謝します。

これは、入力をベクトルとして取得する匿名関数を定義しますn=[a,b]。次に、インライン割り当てを使用して、HMの計算をちょうどに減らしz/qます。


1
f=コードにを含める必要がないため、42バイトになります。(もちろん、「取り消し線44は44のように見えます」)- オンラインで試してみてください!
トムカーペンター

おっと、それはOctave-Onlineからコピーすることによるアーティファクトです!ありがとう。
Sanchises

TIOはデフォルトでインストール済みパッケージをロードしますが、Signalパッケージはインストールされていません
ルイスメンドー

@LuisMendo正確に言えば、MATLABとOctaveの事実上の標準は、すべてのパッケージがインストールおよびロードされると仮定することです。
-Sanchises

^.5 バイトを1つ節約しますsqrt。また、f=リンクのコード部分から削除
ルイスメンドー

2

ゼリー、17バイト

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

オンラインでお試しください!


リンクの素晴らしい組み合わせ。1行でできることはPḤ÷S,µ³²Æm,P½,µÆmFS(19バイト)です-言及する価値はありますが、インスピレーションの源かもしれません。EDIT: > _>私は今、私はちょうど使用することができます実現する+代わりに,
氏Xcoder

@ Mr.Xcoder最初は18バイトバージョンでした(改訂履歴にはありません)が、対象となるものをまとめると考え½、1バイト節約しました。
エリックアウトゴルファー

インスピレーションの別の可能なソースは:PḤ÷S:によって置き換えることができますİSHİ
ミスターXcoder

@ Mr.Xcoderもそのことを考えていました
エリック・ザ・アウトゴルファー

2

05AB1E18 16バイト

Erik the Outgolferのおかげで-2バイト

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

説明:

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

オンラインでお試しください!


nO;t¹O;¹Pt2¹zO/O
エリックアウトゴルファー

@EriktheOutgolfer私はそれが機能するとは思わない。
Okx

入力をリストとして取得します[a, b]
エリックアウトゴルファー

@EriktheOutgolferもちろん!なぜ私はそれを考えなかった。
Okx


2

MATL21 18 17バイト

UYmGphX^GYmGpy/vs

オンラインでお試しください!

Luis Mendoのおかげで-3バイト。

説明

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バイト

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

オンラインでお試しください!

説明

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

...オームに詳細な並べ替えモードがある場合。: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
少し前に算術平均の組み込みを追加したと確信していますが、ここではバイトを節約できません。
ニッククリフォード

2

TI-Basic(TI-84 Plus CE)、27 25バイト

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

-Scroobleから2バイト

の2つの数値のリストを受け取りAns、4つの平均の合計を暗黙的に返します。例えば{7,6}:prgmNAME、取得するために実行25.96148157ます。

説明:

√(sum(Ans2)/2):8バイト:二乗平均平方根

mean(Ans)5 3バイト:算術平均(旧:sum(Ans)/2

2prod(Ans)/sum(Ans):8バイト:調和平均

√(prod(Ans:3バイト:幾何平均

3 +esの場合は+3バイト


I think you have an extra unmatched closing parenthesis here after the 2 in sum(Ans)/2).
kamoroso94

@kamoroso94 Fixed, thanks.
pizzapants184

Save two bytes with the mean( builtin.
Khuldraeseth na'Barya



1

JavaScript, 47 bytes

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

quite trivial


1

Java 8, 63 bytes

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

Takes both parameters as Double and outputs as Double.
Try it here.

Or (also 63 bytes):

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

Takes both parameters as Integer and outputs as Double.
Try it here.




1

Actually, 15 bytes

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

Try it online!

Yay Actually has a built-in for Root Square Mean!

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

æ                ~ Arithmetic mean.
 ßπ√             ~ Product, Square root (computes geometric mean).
    +            ~ Addition.
     ßΣ          ~ Push the sum of the input.
       ßπτ       ~ Push the product of the input doubled.
          /      ~ Divide.
           +     ~ Addition.
            ßµ   ~ Push Root Square Mean.
              +  ~ Addition.


1

Groovy, 54 bytes

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

-2 thanks to Mr. Xcoder for an edit that made me feel dumb.


1
I think you can replace a**2 with a*a and b**2 with b*b
Mr. Xcoder


0

Jq 1.5, 76 bytes

[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

Try it online!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.