Summieren Sie die Mittelwerte der beiden ganzen Zahlen


12

In der Mathematik gibt es eine ganze Reihe von Mitteln, wie das arithmetische Mittel, das geometrische Mittel und viele andere ...

Definitionen und Aufgabe

Beachten Sie, dass dies die Definitionen für zwei positive ganze Zahlen * sind:

  • Das quadratische Mittel ist die Quadratwurzel aus der Summe der halbierten Quadrate ( ).

  • Das arithmetische Mittel ist ihre halbierte Summe ( ).

  • Das geometrische Mittel ist die Quadratwurzel ihres Produkts ( ).

  • Das harmonische Mittel ist 2 geteilt durch die Summe ihrer Inversen ( = ).

Wenn zwei ganze Zahlen a und b so gegeben sind, dass a, b ∈ [1, + ∞) , summieren Sie die oben genannten Mittelwerte von a und b . Ihre Antworten müssen auf mindestens 3 Dezimalstellen genau sein, aber Sie müssen sich keine Gedanken über Rundungs- oder Gleitkomma-Genauigkeitsfehler machen.

Testfälle

a, b -> Ausgabe

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

Mit diesem Programm können Sie die korrekten Ergebnisse für weitere Testfälle anzeigen . Das ist , also gewinnt die kürzeste gültige Einsendung, die den Standardregeln folgt.

* Es gibt viele andere Möglichkeiten, aber für die Zwecke dieser Herausforderung verwenden wir die im Abschnitt "Definitionen" genannten.



10
Muss gebeten haben, den Mittelwert auszugeben. -1 (nicht).
Mein Pronomen ist monicareinstate

9
Zumindest ist dafür kein Mathematica eingebaut. Richtig?
NieDzejkob

@NieDzejkob Ich glaube nicht :-)
Mr. Xcoder

@NieDzejkob Obwohl ich vermute, dass es für jedes der Mittel Builtins gibt.
Erik der Outgolfer

Antworten:


13

Haskell , 48 Bytes

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

Probieren Sie es online!

Hierbei wird die Tatsache ausgenutzt, dass die quadratischen, arithmetischen, harmonischen und geometrischen Mittelwerte Sonderfälle des verallgemeinerten Mittels((a**p+b**p)/2)**(1/p) für sind p=2,1,-1,0. Das geometrische Mittel verwendet den Grenzwert p->0+, p=1e-9der für die Genauigkeit genügt.


9

Mathematica , 37 Bytes

-2 Bytes dank Martin Ender. -6 Bytes dank Jenny_mathy und Funktionswiederverwendbarkeit dank JungHwan Min.

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

Probieren Sie es online!

Mathematica , 55 Bytes

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

Probieren Sie es online!

¯ \ _ (ツ) _ / ¯


1
Eine Alternative:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Mr. Xcoder

1
2 Bytes aus:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender

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

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

2
Eine leichte Korrektur auf @ Jenny_mathy-Version (gleiche Byteanzahl): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Nur um die Wiederverwendung der Funktion zu vereinfachen (ohne Clear@tvor jeder Iteration ausgeführt werden zu müssen).
JungHwan Min 15.10.17

5

Python 3 , 57 Bytes

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

Probieren Sie es online!


Das <<1wird fälschlicherweise auf eine ganze Zahl abgeschnitten, wenn aund bsind entgegengesetzte Paritäten.
15.

@xnor Nein, ist es nicht :) Du denkst an >>1.
Orlp

1
Oh mein Fehler! Ich sehe jetzt, dass es ein /2Äußeres gibt, das dies ausgleicht. Guter Trick.
15.


3

Haskell , 48 Bytes

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

Probieren Sie es online!

Erläuterung:

s/2 = (a+b)/2: Das arithmetische Mittel.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Das quadratische Mittel.

sqrt p = sqrt(a*b). Das geometrische Mittel.

2*p/s = 2*a*b/(a+b). Das harmonische Mittel.


3

Oktave , 44 42 41 Bytes

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

Probieren Sie es online!

Beachten Sie, dass TIO das Signalpaket nicht installiert hat, so dass ich es rms()im Header definiert habe . Bei Octave Online können Sie es versuchen, wenn Siepkg 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.

Vielen Dank an Tom Carpenter, der einen kleinen Fehler von 2 Bytes entdeckt hat.

Dies definiert eine anonyme Funktion, die die Eingabe als Vektor verwendet n=[a,b]. Wir verwenden dann die Inline-Zuweisung, um die Berechnung des HM auf nur zu reduzieren z/q.


1
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!
Tom Carpenter

Oh oops, that's an artifact from copying it from Octave-Online! Thanks.
Sanchises

TIO loads installed packages by default, it just doesn't have the Signal package installed
Luis Mendo

@LuisMendo Exactly, I think te de facto standard of MATLAB and Octave is to assume that all packages are installed and loaded.
Sanchises

^.5 saves a byte over sqrt. Also, remove f= from the code part in the link
Luis Mendo

2

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 ,
Mr. Xcoder

@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.
Erik the Outgolfer

Another possible source of inspiration: PḤ÷S can be replaced by: İSHİ
Mr. Xcoder

@Mr.Xcoder thought of that too
Erik the Outgolfer

2

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
Erik the Outgolfer

@EriktheOutgolfer I don't think that works.
Okx

Take input as a list [a, b].
Erik the Outgolfer

@EriktheOutgolfer Of course! Why didn't I think of that.
Okx


2

MATL, 21 18 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.

2

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

... wenn Ohm eine Art wortreichen Modus hätte. : 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
Ich bin mir ziemlich sicher, dass ich vor einiger Zeit eine integrierte Funktion für arithmetische Mittelwerte hinzugefügt habe, aber Sie würden hier keine Bytes sparen.
Nick Clifford

2

TI-Basic (TI-84 Plus CE), 27 bis 25 Byte

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

-2 Bytes von Scrooble

Nimmt eine Liste mit zwei Zahlen auf Ansund gibt implizit die Summe der vier Mittelwerte zurück. zB mit rennen um {7,6}:prgmNAMEzu bekommen25.96148157 .

Erläuterung:

√(sum(Ans2)/2): 8 Bytes: quadratischer Mittelwert

mean(Ans): 5 3 Bytes: arithmetisches Mittel (alt:sum(Ans)/2 )

2prod(Ans)/sum(Ans): 8 Bytes: harmonischer Mittelwert

√(prod(Ans: 3 Bytes: geometrischer Mittelwert

+3 Bytes für 3 +es


Ich denke, Sie haben hier nach dem 2 in eine zusätzliche unübertroffene schließende Klammer sum(Ans)/2).
Kamoroso94

@ kamoroso94 Behoben, danke.
Pizzapants184

Sparen Sie zwei Bytes mit dem mean(eingebauten.
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

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

Übernimmt beide Parameter als Doubleund Ausgänge als Double.
Probieren Sie es hier aus.

Oder (auch 63 Bytes ):

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

Übernimmt beide Parameter als Integerund Ausgänge als Double.
Probieren Sie es hier aus.




1

Eigentlich 15 Bytes

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

Probieren Sie es online!

Yay hat tatsächlich ein eingebautes Root Square Mean!

æßπ√ + ßΣßπτ / + ßµ + ~ Volles Programm.

æ ~ arithmetisches Mittel.
 ßπ√ ~ Produkt, Quadratwurzel (berechnet das geometrische Mittel).
    + ~ Zugabe.
     ßΣ ~ Summe der Eingaben drücken.
       ~ Drücken Sie das Produkt der Eingabe verdoppelt.
          / ~ Teilen.
           + ~ Zugabe.
            ßµ ~ Push Root Square Mean.
              + ~ Zugabe.


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 Danke an Mr. Xcoder für eine Bearbeitung, die mich dumm gemacht hat.


1
Ich denke, Sie können a**2mit a*aund b**2mit ersetzenb*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

Erweitert

[
  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

Probieren Sie es online!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.