Additionner les moyennes des deux entiers

12

Il y a pas mal de moyens en mathématiques, comme la moyenne arithmétique, la moyenne géométrique, et bien d'autres ...

Définitions et tâche

Notez que ce sont les définitions de deux entiers positifs *:

  • La racine carrée moyenne est la racine carrée de la somme de leurs carrés divisée par deux ( ).

  • La moyenne arithmétique est leur somme, divisée par deux ( ).

  • La moyenne géométrique est la racine carrée de leur produit ( ).

  • La moyenne harmonique est 2 divisée par la somme de leurs inverses ( = ).

Étant donné deux entiers a et b tels que a, b ∈ [1, + ∞) , additionnez les moyennes mentionnées ci-dessus de a et b . Vos réponses doivent être précises à au moins 3 décimales, mais vous n'avez pas à vous soucier des erreurs d'arrondi ou de précision à virgule flottante.

Cas de test

a, b -> Sortie

7, 6 -> 25,961481565148972
10, 10 -> 40
23, 1 -> 34.99131878607909
2, 4 -> 11,657371451581236
345, 192 -> 1051.7606599443843

Vous pouvez voir les résultats corrects pour plus de cas de test en utilisant ce programme . C'est le , donc les soumissions valides les plus courtes qui suivent les règles standard l'emportent.

* Il existe de nombreux autres moyens, mais pour les besoins de ce défi, nous utiliserons ceux mentionnés dans la section "Définitions".

M. Xcoder
la source
En relation.
Martin Ender
10
J'ai dû demander la sortie de la moyenne des moyens. -1 (pas).
mon pronom est monicareinstate
9
Au moins, il n'y a pas de Mathematica intégré pour cela. Droite?
NieDzejkob
@NieDzejkob Je ne pense pas :-)
M. Xcoder
@NieDzejkob Bien que je soupçonne qu'il existe des modules internes pour chacun des moyens.
Erik the Outgolfer

Réponses:

13

Haskell , 48 octets

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

Essayez-le en ligne!

Cela utilise le fait que les moyennes quadratiques , arithmétiques, harmoniques et géométriques sont toutes des cas particuliers de la moyenne généralisée((a**p+b**p)/2)**(1/p) de p=2,1,-1,0. La moyenne géométrique utilise la limite p->0+, approximée comme p=1e-9suffisante pour la précision.

xnor
la source
9

Mathematica , 37 octets

-2 octets grâce à Martin Ender. -6 octets grâce à Jenny_mathy et réutilisabilité de la fonction grâce à JungHwan Min.

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

Essayez-le en ligne!

Mathematica , 55 octets

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

Essayez-le en ligne!

¯ \ _ (ツ) _ / ¯

totalement humain
la source
1
Une alternative:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
M. Xcoder
1
2 octets de moins:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender
2
42 octets: (((s=+##)^2-2##)/2)^.5+s/2+(1##)^.5+2##/s&
J42161217
6
37 octets: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s&
J42161217
2
Un léger correctif pour la version @ de Jenny_mathy (nombre même octet): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Juste pour faciliter la réutilisation de la fonction (sans avoir à l'exécuter Clear@tavant chaque itération).
JungHwan Min
5

Python 3 , 57 octets

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

Essayez-le en ligne!

orlp
la source
Le <<1va tronquer de manière incorrecte à un nombre entier lorsque aet bsont parités opposées.
xnor
@xnor Non, ce n'est pas le cas :) Tu penses à >>1.
orlp
1
Oh, mon erreur! Je vois maintenant qu'il y a un /2extérieur que cela compense. Joli tour.
xnor
4

R , 52 octets

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

Essayez-le en ligne!

Giuseppe
la source
3

Haskell , 48 octets

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

Essayez-le en ligne!

Explication:

s/2 = (a+b)/2: La moyenne arithmétique.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Le carré de la racine moyenne.

sqrt p = sqrt(a*b). La moyenne géométrique.

2*p/s = 2*a*b/(a+b). La moyenne harmonique.

H.PWiz
la source
3

Octave , 44 42 41 octets

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

Essayez-le en ligne!

Notez que TIO n'a pas le paquet de signaux installé, j'ai donc défini rms()dans l'en-tête. Sur Octave Online , vous pouvez l'essayer si vous pkg load nan. Je ne sais pas s'il existe des interprètes en ligne qui le chargent par défaut, mais la plupart des systèmes auraient ce package chargé par défaut.

Merci à Tom Carpenter d'avoir repéré une petite erreur de 2 octets.

Ceci définit une fonction anonyme, prenant l'entrée comme un vecteur n=[a,b]. Nous utilisons ensuite l'affectation en ligne pour réduire le calcul du HM à juste z/q.

Sanchises
la source
1
Vous n'avez pas besoin d'inclure le f=dans le code, ce qui en fait 42 octets. (ce qui conduit bien sûr au "44 barré ressemble à 44") - Essayez-le en ligne!
Tom Carpenter
Oh oups, c'est un artefact de le copier à partir d'Octave-Online! Merci.
Sanchises
TIO charge les packages installés par défaut, il n'a tout simplement pas le package Signal installé
Luis Mendo
@LuisMendo Exactement, je pense que la norme de facto de MATLAB et Octave est de supposer que tous les packages sont installés et chargés.
Sanchises
^.5 enregistre un octet de plus sqrt. En outre, supprimez f=de la partie de code dans le lien
Luis Mendo
2

Gelée , 17 octets

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

Essayez-le en ligne!

Erik le Outgolfer
la source
Belle combinaison de liens. Le mieux que je puisse faire en une seule ligne est PḤ÷S,µ³²Æm,P½,µÆmFS(19 octets) - Je pense que cela mérite d'être mentionné, c'est peut-être une source d'inspiration. EDIT: > _> Je me rends compte maintenant que je peux simplement utiliser +au lieu de,
M. Xcoder
@ Mr.Xcoder J'avais une version de 18 octets au début (pas dans l'historique des révisions) mais j'ai ensuite pensé à ½regrouper les sujets , et cela a sauvé un octet.
Erik the Outgolfer
Une autre source d'inspiration PḤ÷Spossible : peut être remplacée par:İSHİ
M. Xcoder
@ Mr.Xcoder a pensé à cela aussi
Erik the Outgolfer
2

05AB1E , 18 16 octets

-2 octets grâce à Erik l'Outgolfer

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

Explication:

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

Essayez-le en ligne!

Okx
la source
nO;t¹O;¹Pt2¹zO/O
Erik the Outgolfer
@EriktheOutgolfer Je ne pense pas que cela fonctionne.
Okx
Prenez la saisie comme une liste [a, b].
Erik the Outgolfer
@EriktheOutgolfer Bien sûr! Pourquoi n'y ai-je pas pensé.
Okx
2

Husk , 19 octets

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

Essayez-le en ligne!

-1 merci à H.PWiz .

Erik le Outgolfer
la source
ö√½Σm□peut êtreȯ√½ṁ□
H.PWiz
@ H.PWiz> _> Je savais que j'oublierais quelque chose
Erik l'Outgolfer
18 octets
H.PWiz
@ H.PWiz continue d'apprendre! : p
Erik the Outgolfer
2

MATL , 21 18 17 octets

UYmGphX^GYmGpy/vs

Essayez-le en ligne!

-3 octets grâce à Luis Mendo.

Explication

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.
Sanchises
la source
2

Ohm v2 , 16 octets

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

Essayez-le en ligne!

Explication

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

... si Ohm avait une sorte de mode verbeux. : 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]
totalement humain
la source
1
Je suis presque sûr d'avoir ajouté une fonction arithmétique intégrée il y a peu de temps, mais cela ne vous ferait pas économiser d'octets ici.
Nick Clifford
2

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

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

-2 octets de Scrooble

Prend une liste de deux nombres Anset renvoie implicitement la somme des quatre moyennes; par exemple courir avec {7,6}:prgmNAMEpour obtenir 25.96148157.

Explication:

√(sum(Ans2)/2): 8 octets: racine quadratique moyenne

mean(Ans): 5 3 octets: moyenne arithmétique (ancien: sum(Ans)/2)

2prod(Ans)/sum(Ans): 8 octets: moyenne harmonique

√(prod(Ans: 3 octets: moyenne géométrique

+3 octets pour 3 +es

pizzapants184
la source
Je pense que vous avez une parenthèse fermante supplémentaire inégalée ici après le 2 po sum(Ans)/2).
kamoroso94
@ kamoroso94 Fixé, merci.
pizzapants184
Économisez deux octets avec la fonction mean(intégrée.
Khuldraeseth na'Barya du
1

Dyalog APL , 44 octets

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

Essayez-le en ligne!

Dfns dyadiques avec aà gauche et bà droite.

Uriel
la source
1

JavaScript, 47 octets

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

assez banal

tsh
la source
1

Java 8, 63 octets

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

Prend les deux paramètres comme Doubleet les sorties comme Double.
Essayez-le ici.

Ou (également 63 octets ):

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

Prend les deux paramètres comme Integeret les sorties comme Double.
Essayez-le ici.

Kevin Cruijssen
la source
1

En fait , 15 octets

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

Essayez-le en ligne!

Yay a en fait une fonction intégrée pour Root Square Mean!

æßπ√ + ßΣßπτ / + ßµ + ~ Programme complet.

æ ~ Moyenne arithmétique.
 ßπ√ ~ Produit, racine carrée (calcule la moyenne géométrique).
    + ~ Addition.
     ßΣ ~ Appuyez sur la somme de l'entrée.
       ßπτ ~ Poussez le produit de l'entrée doublé.
          / ~ Diviser.
           + ~ Addition.
            ßµ ~ Push Root Square Mean.
              + ~ Addition.
M. Xcoder
la source
1

Groovy, 54 octets

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

-2 merci à M. Xcoder pour un montage qui m'a fait me sentir stupide.

Urne de poulpe magique
la source
1
Je pense que vous pouvez remplacer a**2par a*aet b**2parb*b
M. Xcoder
1

C # (.NET Core) , 76 octets

+13 octets pour using System;

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

Essayez-le en ligne!

mon pronom est monicareinstate
la source
Vous pouvez enregistrer un octet en using System;supprimant les deux System.. PS: Si vous voulez un moyen moins ennuyeux (avec le même nombre d'octets exact de 76): using System;a=>b=>(a+b+Math.Sqrt(a*a+b*b<<1))/2+Math.Sqrt(a*b)+2d*a*b/(a+b). ;)
Kevin Cruijssen
0

Jq 1,5 , 76 octets

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

Étendu

[
  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

Essayez-le en ligne!

jq170727
la source