将两个整数的平均值相加


12

数学中有很多手段,例如算术平均,几何平均等等。

定义和任务

请注意,以下是两个正整数 * 的定义:

  • 根均方是它们的平方的减半(总和的平方根)。

  • 算术平均值是它们的总和,减半()。

  • 几何平均值是他们的产品的平方根()。

  • 调和平均值2可以通过倒数之和(分割= )。

给定两个整数ab 使得a,b∈[1,+∞),对ab的上述均值求和。您的答案必须至少精确到小数点后3位,但您不必担心舍入或浮点精度错误。

测试用例

a,b->输出

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

使用此程序,您可以查看更多测试案例的正确结果。这是,因此遵循标准规则的最短有效提交将获胜。

*还有许多其他方法,但是出于挑战的目的,我们将使用“定义”部分中提到的方法。



10
必须要求输出均值。-1(不是)。
我的代名词是monicareinstate '17

9
至少没有内置的Mathematica。对?
NieDzejkob

@NieDzejkob我不这么认为:-)
Xcoder先生17年

@NieDzejkob虽然我怀疑每种方法都有内置函数。
暴民埃里克(Erik the Outgolfer)

Answers:


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。几何平均值使用limit 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先生17年

1
2字节折扣:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender

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在每次迭代之前都运行)。
JungHwan Min

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()在标题中定义了该包。在Octave Online上,您可以尝试一下pkg load nan。我不确定默认情况下是否有任何在线解释程序将其加载,但是大多数系统将默认加载此程序包。

感谢Tom Carpenter发现2个字节的小错误。

这定义了一个匿名函数,将输入作为向量n=[a,b]。然后,我们使用内联分配将HM的计算减少为just z/q


1
您无需f=在代码中包含,因此它变为42个字节。(这当然会导致“划掉的44看起来像44”)- 在线尝试!
汤姆·卡彭特

哎呀,这是从Octave-Online复制它的产物!谢谢。
桑奇斯

TIO加载默认安装的软件包,它只是没有安装的信号包
路易斯Mendo

@LuisMendo确实,我认为MATLAB和Octave的事实上的标准是假定所有软件包都已安装和加载。
桑奇斯

^.5 节省了字节以上sqrt。另外,f=从链接的代码部分中删除
Luis Mendo

2

果冻,17个字节

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

在线尝试!


链接的不错组合。我可以在一行中执行的最佳操作是PḤ÷S,µ³²Æm,P½,µÆmFS(19字节)-我值得一提,也许这是灵感的来源。编辑: > _>我现在意识到我可以+代替,
Xcoder先生17年

@ Mr.Xcoder我最初有一个18字节的版本(不在修订历史记录中),但随后考虑将它们放在½一起,并节省了一个字节。
暴民埃里克(Erik the Outgolfer)'17年

另一个可能的灵感来源:PḤ÷S可以由以下方式代替:İSHİ
Xcoder先生17年

@ Mr.Xcoder也想到了这一点
Outgolfer的Erik

2

05AB1E18 16字节

-2个字节,感谢Outrik的Erik

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

在线尝试!



@EriktheOutgolfer我认为不起作用。
Okx

将输入作为列表[a, b]
Erik the Outgolfer

@EriktheOutgolfer当然!我为什么没有想到这一点。
Okx


2

MATL21 18 17字节

UYmGphX^GYmGpy/vs

在线尝试!

-3个字节感谢Luis Mendo。

说明

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

欧姆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个字节

在中获取两个数字的列表Ans,并隐式返回四个均值的和;例如,运行{7,6}:prgmNAMEget 25.96148157

说明:

√(sum(Ans2)/2):8字节:均方根

mean(Ans)5 3字节:算术平均值(旧:sum(Ans)/2

2prod(Ans)/sum(Ans):8字节:谐波均值

√(prod(Ans:3个字节:几何平均值

+3个字节,持续3 +es


我认为您在2英寸后还有一个额外的无括号右括号sum(Ans)/2)
kamoroso94

@ kamoroso94固定,谢谢。
pizzapant184

使用mean(内置文件节省两个字节。
Khuldraeseth na'Barya



1

JavaScript,47个字节

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

相当琐碎


1

Java 8,63字节

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

将参数Double和都输出为Double
在这里尝试。

或(也是63个字节):

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

将参数Integer和都输出为Double
在这里尝试。




1

实际上,15个字节

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

在线尝试!

Yay实际上具有Root Square Mean的内置功能!

æßπ√+ßΣßπτ/ + ßµ +〜完整程序。

æ〜算术平均值。
 ßπ√〜乘积,平方根(计算几何平均值)。
    +〜加法。
     ßΣ〜推入输入的总和。
       ßπτ〜将输入的乘积加倍。
          /〜分开。
           +〜加法。
            ß〜推方均方根。
              +〜加法。


1

Groovy,54个字节

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

-2感谢Xcoder先生所做的编辑,使我感到愚蠢。


1
我想你可以替换a**2使用a*a,并b**2b*b
Xcoder先生


0

jQuery 1.5,76个字节

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

展开式

[
  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

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.