Sum the means of the two integers

There are quite a few means in mathematics, such as the arithmetic mean, the geometric mean, and many others...

Note that these are the definitions for two positive integers*:

• The root mean square is the square root of the sum of their squares halved ().

• The arithmetic mean is their sum, halved ().

• The geometric mean is the square root of their product ().

• The harmonic mean is 2 divided by the sum of their inverses ( = ).

Given two integers a and b such that a, b ∈ [1, +∞), sum the means mentioned above of a and b. Your answers must be accurate to at least 3 decimal places, but you do not have to worry about rounding or floating-point precision errors.

Test Cases

a, b -> Output

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

You can see the correct results for more test cases using this program. This is , so the shortest valid submissions that follows the standard rules wins.

* There are many other means, but for the purposes of this challenge we'll use the ones mentioned in the "Definitions" section.

• Related. Oct 15 '17 at 12:18
• Must've asked to output the mean of means. -1 (not). Oct 15 '17 at 12:21
• At least there is no Mathematica builtin for that. Right? Oct 15 '17 at 12:21
• @NieDzejkob I don't think so :-) Oct 15 '17 at 12:21
• @NieDzejkob Although I suspect there are builtins for each one of the means. Oct 15 '17 at 12:25

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

Try it online!

This uses the fact that the root-square, arithmetic, harmonic, and geometric means are all special cases of the generalized mean ((a**p+b**p)/2)**(1/p) for p=2,1,-1,0. The geometric mean uses the limit p->0+, approximated as p=1e-9 which suffices for precision.

Mathematica, 37 bytes

-2 bytes thanks to Martin Ender. -6 bytes thanks to Jenny_mathy and function reusability thanks to JungHwan Min.

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

Try it online!

Mathematica, 55 bytes

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

Try it online!

¯\_(ツ)_/¯

• An alternative: ((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)& Oct 15 '17 at 12:50
• 2 bytes off: ((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)& Oct 15 '17 at 12:59
• 42 bytes: (((s=+##)^2-2##)/2)^.5+s/2+(1##)^.5+2##/s& Oct 15 '17 at 18:03
• 37 bytes: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s& Oct 15 '17 at 18:42
• A slight fix to @Jenny_mathy's version (same byte count): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Just to make it easier to reuse the function (without having to run Clear@t before each iteration). Oct 15 '17 at 19:26

Python 3, 57 bytes

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

Try it online!

• The <<1 is going to incorrectly truncate to an integer when a and b are opposite parities.
– xnor
Oct 15 '17 at 14:35
• @xnor No it's not :) You're thinking of >>1.
– orlp
Oct 15 '17 at 14:35
• Oh, my mistake! I see now there's a /2 outside that this is compensating for. Nice trick.
– xnor
Oct 15 '17 at 14:39

R, 52 bytes

function(a,b,m=(a+b)/2,p=a*b)m+p^.5+(m^2*2-p)^.5+p/m

Try it online!

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

Try it online!

Explanation:

s/2 = (a+b)/2: The arithmetic mean.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): The root mean square.

sqrt p = sqrt(a*b). The geometric mean.

2*p/s = 2*a*b/(a+b). The harmonic mean.

Octave, 4442 41 bytes

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

Try it online!

Note that TIO does not have the signal package installed, so I defined rms() in the header. On Octave Online, you can try it if you pkg load nan. I'm not sure if there are any online interpreters that load it by default, but most systems would have this package loaded by default.

Thanks to Tom Carpenter for spotting a small mistake of 2 bytes.

This defines an anonymous function, taking the input as a vector n=[a,b]. We then use inline assignment to reduce the calculation of the HM to just z/q.

• You don't need to include the f= in the code, so that makes it 42 bytes. (which of course leads to the "crossed out 44 looks like 44") - Try it online! Oct 15 '17 at 13:08
• Oh oops, that's an artifact from copying it from Octave-Online! Thanks. Oct 15 '17 at 13:10
• TIO loads installed packages by default, it just doesn't have the Signal package installed Oct 15 '17 at 13:56
• @LuisMendo Exactly, I think te de facto standard of MATLAB and Octave is to assume that all packages are installed and loaded. Oct 15 '17 at 16:47
• ^.5 saves a byte over sqrt. Also, remove f= from the code part in the link Oct 15 '17 at 21:04

Jelly, 17 bytes

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

Try it online!

• Nice combination of links. The best I could do in one line is PḤ÷S,µ³²Æm,P½,µÆmFS (19 bytes) - I though it's worth mentioning, maybe it's a source of inspiration. EDIT: >_> I now realise I can just use + instead of , Oct 15 '17 at 12:31
• @Mr.Xcoder I had an 18-byte version at first (not in revision history) but then thought to put the ones subject to ½ together, and it saved a byte. Oct 15 '17 at 12:33
• Another possible source of inspiration: PḤ÷S can be replaced by: İSHİ Oct 15 '17 at 13:03
• @Mr.Xcoder thought of that too Oct 15 '17 at 13:04

05AB1E, 18 16 bytes

-2 bytes thanks to Erik the Outgolfer

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

Explanation:

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

Try it online!

• nO;t¹O;¹Pt2¹zO/O Oct 15 '17 at 13:10
• @EriktheOutgolfer I don't think that works.
– Okx
Oct 15 '17 at 13:11
• Take input as a list [a, b]. Oct 15 '17 at 13:12
• @EriktheOutgolfer Of course! Why didn't I think of that.
– Okx
Oct 15 '17 at 13:15

Husk, 19 bytes

ṁëȯ√½ṁ□o½Σo√Π§/ΣoDΠ

Try it online!

-1 thanks to H.PWiz.

• ö√½Σm□ can be ȯ√½ṁ□ Oct 15 '17 at 14:49
• @H.PWiz >_> I knew I'd forget something Oct 15 '17 at 14:54
• 18 bytes Oct 16 '17 at 5:52
• @H.PWiz still learning! :p Oct 16 '17 at 11:23
• you can change o½ΣY. Jan 28 '21 at 3:28

MATL, 2118 17 bytes

UYmGphX^GYmGpy/vs

Try it online!

-3 bytes thanks to Luis Mendo.

Explanation

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.

Ohm v2, 16 bytes

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

Try it online!

Explanation

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

...if Ohm had a verbose mode of sorts. :P

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

implicit input       [[7, 6]]
²Σ½¬              root mean square
²                  square              [[49, 36]]
Σ                 sum                 
½                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]
• I'm pretty sure I added a built-in for arithmetic mean a little while ago, but it wouldn't save you any bytes here. Oct 16 '17 at 4:10

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

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

-2 bytes from Scrooble

Takes a list of two numbers in Ans, and implicitly returns the sum of the four means; e.g. run with {7,6}:prgmNAME to get 25.96148157.

Explanation:

√(sum(Ans2)/2): 8 bytes: root mean square

mean(Ans): 5 3 bytes: arithmetic mean (old: sum(Ans)/2)

2prod(Ans)/sum(Ans): 8 bytes: harmonic mean

√(prod(Ans: 3 bytes: geometric mean

+3 bytes for 3 +es

• I think you have an extra unmatched closing parenthesis here after the 2 in sum(Ans)/2). Oct 16 '17 at 23:34
• @kamoroso94 Fixed, thanks. Oct 16 '17 at 23:47
• Save two bytes with the mean( builtin. Dec 10 '17 at 21:00

SOGL V0.12, 22 bytes

+:A½.².²+½√..*:√;«a/¹∑

Try it Here!

Dyalog APL, 44 bytes

{+/(2×o÷k),(.5×k←⍺+⍵),.5*⍨(o←⍺×⍵),.5×+/⍺⍵*2}

Try it online!

Dyadic dfns with a on the left and b on the right.

JavaScript, 47 bytes

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

quite trivial

f =

a=>b=>(c=a+b)/2+(c*c/2-(d=a*b))**.5+d**.5+2*d/c
<div oninput="r.value = f(+a.value)(+b.value)">
<p><label>a = <input id="a" type="number" step="any" value="1" /></label></p>
<p><label>b = <input id="b" type="number" step="any" value="1" /></label></p>
</div>
<p>result = <output id="r">4</output></label></p>

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.

Python 2, 58 bytes

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

Try it online!

Takes input as floats

ARBLE, 49 45 bytes

-4 bytes thanks to Mr. Xcoder

((a^2+b^2)/2)^.5+(a+b)/2+(a*b)^.5+2*a*b/(a+b)

Try it online!

• 45 bytes Oct 15 '17 at 20:38

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).
ßΣ          ~ Push the sum of the input.
ßπτ       ~ Push the product of the input doubled.
/      ~ Divide.
ßµ   ~ Push Root Square Mean.

Julia, 49 47 bytes

a\$b=(x=a+b)/2+((a^2+b^2)/2)^.5+(y=a*b)^.5+2*y/x

Try it online!

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.

• I think you can replace a**2 with a*a and b**2 with b*b Oct 17 '17 at 18:37

C# (.NET Core), 76 bytes

+13 bytes for using System;

a=>b=>Math.Sqrt((a*a+b*b)/2)+(a+b)/2+Math.Sqrt(a*b)+2/(1/a+1/b)

Try it online!