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".



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.


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!

¯ \ _ (ツ) _ / ¯


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!


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


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.


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.


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!


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!


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

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.

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]

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


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

JavaScript, 47 octets

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

assez banal


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.




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.


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.


1
Je pense que vous pouvez remplacer a**2par a*aet b**2parb*b
M. Xcoder


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.