Suma las medias de los dos enteros.

12

Hay bastantes medios en matemáticas, como la media aritmética, la media geométrica y muchos otros ...

Definiciones y Tarea

Tenga en cuenta que estas son las definiciones para dos enteros positivos *:

  • La raíz cuadrada media es la raíz cuadrada de la suma de sus cuadrados divididos por la mitad ( ).

  • La media aritmética es su suma, reducida a la mitad ( ).

  • La media geométrica es la raíz cuadrada de su producto ( ).

  • La media armónica es 2 dividida por la suma de sus inversos ( = ).

Dados dos enteros a y b tales que a, b ∈ [1, + ∞) , suma las medias mencionadas anteriormente de a y b . Sus respuestas deben tener una precisión de al menos 3 decimales, pero no tiene que preocuparse por los errores de precisión de redondeo o coma flotante.

Casos de prueba

a, b -> Salida

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

Puede ver los resultados correctos para más casos de prueba usando este programa . Este es el , por lo que gana las presentaciones válidas más cortas que siguen las reglas estándar.

* Hay muchos otros medios, pero para los propósitos de este desafío usaremos los mencionados en la sección "Definiciones".

Sr. Xcoder
fuente
Relacionado.
Martin Ender
10
Debe haber pedido dar salida a la media de los medios. -1 (no).
mi pronombre es monicareinstate el
99
Al menos no hay Mathematica incorporado para eso. ¿Derecho?
NieDzejkob
@NieDzejkob No lo creo :-)
Sr. Xcoder
@NieDzejkob Aunque sospecho que hay incorporados para cada uno de los medios.
Erik the Outgolfer

Respuestas:

13

Haskell , 48 bytes

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

Pruébalo en línea!

Esto utiliza el hecho de que los medios raíz cuadrada, aritmética, armónica y geométrica son todos casos especiales de la media generalizada ((a**p+b**p)/2)**(1/p) para p=2,1,-1,0. La media geométrica usa el límite p->0+, aproximado como el p=1e-9que es suficiente para la precisión.

xnor
fuente
9

Mathematica , 37 bytes

-2 bytes gracias a Martin Ender. -6 bytes gracias a Jenny_mathy y la reutilización de funciones gracias a JungHwan Min.

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

Pruébalo en línea!

Mathematica , 55 bytes

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

Pruébalo en línea!

¯ \ _ (ツ) _ / ¯

totalmente humano
fuente
1
Una alternativa:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Sr. Xcoder
1
2 bytes de descuento:((#^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
66
37 bytes: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s&
J42161217
2
Una ligera revisión a la versión de @ Jenny_mathy (la misma cuenta de bytes): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Solo para que sea más fácil reutilizar la función (sin tener que ejecutarla Clear@tantes de cada iteración).
JungHwan Min
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)

Pruébalo en línea!

orlp
fuente
El <<1va a truncarse incorrectamente a un entero cuando ay bson paridades opuestas.
xnor
@xnor No, no lo es :) Estás pensando >>1.
orlp
1
¡Oh, mi error! Ahora veo que hay un /2exterior que esto compensa. Buen truco.
xnor
3

Haskell , 48 bytes

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

Pruébalo en línea!

Explicación:

s/2 = (a+b)/2: La media aritmética.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): El cuadrado medio raíz.

sqrt p = sqrt(a*b). La media geométrica.

2*p/s = 2*a*b/(a+b). La media armónica.

H.PWiz
fuente
3

Octava , 44 42 41 bytes

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

Pruébalo en línea!

Tenga en cuenta que TIO no tiene instalado el paquete de señal, así que lo definí rms()en el encabezado. En Octave Online , puedes probarlo si lo haces pkg load nan. No estoy seguro de si hay algún intérprete en línea que lo cargue de forma predeterminada, pero la mayoría de los sistemas tendrían este paquete cargado de forma predeterminada.

Gracias a Tom Carpenter por detectar un pequeño error de 2 bytes.

Esto define una función anónima, tomando la entrada como un vector n=[a,b]. Luego usamos la asignación en línea para reducir el cálculo de la HM a solo z/q.

Sanchises
fuente
1
No necesita incluir el f=en el código, por lo que tiene 42 bytes. (lo que, por supuesto, lleva al "44 tachado parece 44") - ¡ Pruébelo en línea!
Tom Carpenter
¡Vaya, es un artefacto copiarlo de Octave-Online! Gracias.
Sanchises
TIO carga los paquetes instalados de forma predeterminada, simplemente no tiene el paquete de señal instalado
Luis Mendo
@LuisMendo Exactamente, creo que el estándar de facto de MATLAB y Octave es suponer que todos los paquetes están instalados y cargados.
Sanchises
^.5 guarda un byte encima sqrt. Además, elimine f=de la parte del código en el enlace
Luis Mendo
2

Jalea , 17 bytes

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

Pruébalo en línea!

Erik el Outgolfer
fuente
Buena combinación de enlaces. Lo mejor que puedo hacer en una línea es PḤ÷S,µ³²Æm,P½,µÆmFS(19 bytes): aunque vale la pena mencionarlo, tal vez sea una fuente de inspiración. EDITAR: > _> Ahora me doy cuenta de que puedo usar en +lugar de,
Sr. Xcoder
@ Mr.Xcoder Al principio tenía una versión de 18 bytes (no en el historial de revisiones) pero luego pensé en juntar las que estaban sujetas ½, y guardó un byte.
Erik the Outgolfer
Otra posible fuente de inspiración: PḤ÷Spuede ser reemplazado por:İSHİ
Sr. Xcoder
@ Mr.Xcoder también pensó en eso
Erik the Outgolfer el
2

05AB1E , 18 16 bytes

-2 bytes gracias a Erik the Outgolfer

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

Explicación:

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

Pruébalo en línea!

Okx
fuente
nO;t¹O;¹Pt2¹zO/O
Erik the Outgolfer
@EriktheOutgolfer No creo que funcione.
Okx
Tome la entrada como una lista [a, b].
Erik the Outgolfer
@EriktheOutgolfer ¡Por supuesto! ¿Por qué no pensé en eso?
Okx
2

Casco , 19 bytes

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

Pruébalo en línea!

-1 gracias a H.PWiz .

Erik el Outgolfer
fuente
ö√½Σm□puede serȯ√½ṁ□
H.PWiz
@ H.PWiz> _> Sabía que olvidaría algo
Erik the Outgolfer el
18 bytes
H.PWiz
@ H.PWiz sigue aprendiendo! : p
Erik the Outgolfer
2

MATL , 21 18 17 bytes

UYmGphX^GYmGpy/vs

Pruébalo en línea!

-3 bytes gracias a Luis Mendo.

Explicación

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
fuente
2

Ohm v2 , 16 bytes

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

Pruébalo en línea!

Explicación

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

... si Ohm tuviera una especie de modo detallado. :PAG

²Σ½¬³Π¬³Σ½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]
totalmente humano
fuente
1
Estoy bastante seguro de que agregué un medio incorporado para la aritmética hace un momento, pero no le ahorraría bytes aquí.
Nick Clifford
2

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

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

-2 bytes de Scrooble

Toma una lista de dos números Anse implícitamente devuelve la suma de los cuatro medios; por ejemplo, correr con {7,6}:prgmNAMEget 25.96148157.

Explicación:

√(sum(Ans2)/2): 8 bytes: raíz cuadrada media

mean(Ans): 5 3 bytes: media aritmética (edad: sum(Ans)/2)

2prod(Ans)/sum(Ans): 8 bytes: media armónica

√(prod(Ans: 3 bytes: media geométrica

+3 bytes por 3 +es

pizzapants184
fuente
Creo que tienes un paréntesis de cierre adicional sin igual aquí después de las 2 pulgadas sum(Ans)/2).
kamoroso94
@ kamoroso94 Fijo, gracias.
pizzapants184
Ahorre dos bytes con el mean(incorporado.
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

bastante trivial

tsh
fuente
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)

Toma ambos parámetros como Doubley emite como Double.
Pruébalo aquí.

O (también 63 bytes ):

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

Toma ambos parámetros como Integery emite como Double.
Pruébalo aquí.

Kevin Cruijssen
fuente
1

En realidad , 15 bytes

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

Pruébalo en línea!

¡Yay en realidad tiene incorporado Root Square Mean!

æßπ√ + ßΣßπτ / + ßµ + ~ Programa completo.

æ ~ Media aritmética.
 ßπ√ ~ Producto, raíz cuadrada (calcula la media geométrica).
    + ~ Suma.
     ßΣ ~ Presione la suma de la entrada.
       ßπτ ~ Empuje el producto de la entrada duplicado.
          / ~ Divide.
           + ~ Suma.
            ßµ ~ Media cuadrática de la raíz de empuje.
              + ~ Suma.
Sr. Xcoder
fuente
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 gracias al Sr. Xcoder por una edición que me hizo sentir tonto.

Urna de pulpo mágico
fuente
1
Creo que puede reemplazar a**2con a*ay b**2conb*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

Expandido

[
  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

Pruébalo en línea!

jq170727
fuente