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



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.


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!

¯ \ _ (ツ) _ / ¯


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!


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.


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.


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!


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!


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

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.

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]

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


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


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




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.


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.


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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.