Soma as médias dos dois números inteiros

12

Existem alguns meios na matemática, como a média aritmética, a média geométrica e muitos outros ...

Definições e Tarefa

Observe que estas são as definições para dois números inteiros positivos *:

  • O quadrado médio da raiz é a raiz quadrada da soma dos quadrados divididos pela metade ( ).

  • A média aritmética é sua soma, reduzida pela metade ( ).

  • A média geométrica é a raiz quadrada do produto ( ).

  • A média harmônica é 2 dividida pela soma de seus inversos ( = ).

Dado dois inteiros um e b de tal forma que a, b ∈ [1, + ∞) , somar os meios acima mencionados de um e b . Suas respostas devem ser precisas com pelo menos três casas decimais, mas você não precisa se preocupar com erros de precisão de arredondamento ou ponto flutuante.

Casos de teste

a, b -> Saída

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

Você pode ver os resultados corretos para mais casos de teste usando este programa . Isso é , portanto, os envios válidos mais curtos que seguem as regras padrão vencem.

* Existem muitos outros meios, mas para os propósitos deste desafio, usaremos os mencionados na seção "Definições".

Mr. Xcoder
fonte
Relacionado.
Martin Ender
10
Deve ter pedido para produzir a média dos meios. -1 (não).
meu pronome é monicareinstate 15/10
9
Pelo menos não há Mathematica embutido para isso. Certo?
N
@NieDzejkob Acho que não :-)
Mr. Xcoder 15/17
@NieDzejkob Embora eu suspeite que haja construtores para cada um dos meios.
Erik the Outgolfer

Respostas:

13

Haskell , 48 bytes

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

Experimente online!

Isso usa o fato de que as médias quadradas, aritméticas, harmônicas e geométricas são todos casos especiais da média generalizada ((a**p+b**p)/2)**(1/p) para p=2,1,-1,0. A média geométrica usa o limite p->0+, aproximado como p=1e-9suficiente para precisão.

xnor
fonte
9

Mathematica , 37 bytes

-2 bytes graças a Martin Ender. -6 bytes graças a Jenny_mathy e reutilização da função graças a JungHwan Min.

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

Experimente online!

Mathematica , 55 bytes

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

Experimente online!

¯ \ _ (ツ) _ / ¯

totalmente humano
fonte
1
Uma alternativa:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Sr. Xcoder 15/17
1
2 bytes de desconto:((#^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
Uma ligeira correção para @ versão de Jenny_mathy (mesma contagem de byte): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Apenas para facilitar a reutilização da função (sem precisar executar Clear@tantes de cada iteração).
JungHwan Min 15/10/19
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)

Experimente online!

orlp
fonte
O <<1truncará incorretamente para um número inteiro quando ae bsão paridades opostas.
Xnor
@ xnor Não, não é :) Você está pensando >>1.
orlp
1
Oh, meu erro! Vejo agora que há um /2lado de fora que isso é compensador. Bom truque.
Xnor
4

R , 52 bytes

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

Experimente online!

Giuseppe
fonte
3

Haskell , 48 bytes

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

Experimente online!

Explicação:

s/2 = (a+b)/2: A média aritmética.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): O quadrado médio da raiz.

sqrt p = sqrt(a*b). A média geométrica.

2*p/s = 2*a*b/(a+b). A média harmônica.

H.PWiz
fonte
3

Oitava , 44 42 41 bytes

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

Experimente online!

Observe que o TIO não possui o pacote de sinais instalado, então eu defini rms()no cabeçalho. No Octave Online , você pode tentar se quiser pkg load nan. Não tenho certeza se existem intérpretes online que o carregam por padrão, mas a maioria dos sistemas teria esse pacote carregado por padrão.

Agradecemos a Tom Carpenter por detectar um pequeno erro de 2 bytes.

Isso define uma função anônima, recebendo a entrada como um vetor n=[a,b]. Em seguida, usamos a atribuição em linha para reduzir o cálculo do HM para apenas z/q.

Sanchises
fonte
1
Você não precisa incluir f=o código, o que significa 42 bytes. (o que, obviamente, leva ao "riscado 44 parece 44") - Experimente on-line!
Tom Carpenter
Opa, isso é um artefato de copiá-lo do Octave-Online! Obrigado.
Sanchises 15/10
O TIO carrega pacotes instalados por padrão, ele simplesmente não tem o pacote Signal instalado #
Luis Mendo
@LuisMendo Exatamente, acho que o padrão de fato do MATLAB e Octave é assumir que todos os pacotes estão instalados e carregados.
Sanchises 15/10
^.5 salva um byte mais sqrt. Além disso, remova f=da parte do código no link
Luis Mendo
2

Gelatina , 17 bytes

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

Experimente online!

Erik, o Outgolfer
fonte
Boa combinação de links. O melhor que eu poderia fazer em uma linha é PḤ÷S,µ³²Æm,P½,µÆmFS(19 bytes) - embora valha a pena mencionar, talvez seja uma fonte de inspiração. EDIT: > _> Agora percebo que posso apenas usar em +vez de,
Sr. Xcoder 15/17
@ Mr.Xcoder Eu tive uma versão de 18 bytes no início (não no histórico de revisões), mas depois pensei em colocar os assuntos ½juntos e salvou um byte.
Erik the Outgolfer
Outra fonte possível de inspiração: PḤ÷Spode ser substituída por:İSHİ
Sr. Xcoder 15/10
@ Mr.Xcoder também pensei nisso #
Erik the Outgolfer
2

05AB1E , 18 16 bytes

-2 bytes graças a Erik the Outgolfer

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

Explicação:

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

Experimente online!

Okx
fonte
nO;t¹O;¹Pt2¹zO/O
Erik the Outgolfer
@EriktheOutgolfer Eu não acho que funcione.
Okx 15/10
Tome entrada como uma lista [a, b].
Erik the Outgolfer
@EriktheOutgolfer Claro! Por que eu não pensei nisso.
Okx 15/10
2

Casca , 19 bytes

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

Experimente online!

-1 graças a H.PWiz .

Erik, o Outgolfer
fonte
ö√½Σm□pode ser #ȯ√½ṁ□
2110 H.PWiz
@ H.PWiz> _> Eu sabia que eu ia esquecer alguma coisa
Erik o Outgolfer
18 bytes
H.PWiz 16/10
@ H.PWiz ainda está aprendendo! : p
Erik the Outgolfer
2

MATL , 21 18 17 bytes

UYmGphX^GYmGpy/vs

Experimente online!

-3 bytes graças a Luis Mendo.

Explicação

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

Ohm v2 , 16 bytes

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

Experimente online!

Explicação

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

... se Ohm tivesse uma espécie de modo detalhado. : 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]
totalmente humano
fonte
1
Tenho certeza de que adicionei um meio aritmético embutido há pouco tempo, mas não salvaria nenhum bytes aqui.
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

Pega uma lista de dois números Anse retorna implicitamente a soma dos quatro meios; por exemplo, corra com {7,6}:prgmNAMEpara obter 25.96148157.

Explicação:

√(sum(Ans2)/2): 8 bytes: quadrado médio da raiz

mean(Ans): 5 3 bytes: média aritmética (antiga sum(Ans)/2:)

2prod(Ans)/sum(Ans): 8 bytes: média harmônica

√(prod(Ans: 3 bytes: média geométrica

+3 bytes para 3 +es

pizzapants184
fonte
Eu acho que você tem um parêntese de fechamento extra incomparável aqui após o 2 pol sum(Ans)/2).
kamoroso94
@ kamoroso94 Corrigido, obrigado.
pizzapants184
Salve dois bytes com o mean(builtin.
Khuldraeseth na'Barya
1

Dyalog APL , 44 bytes

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

Experimente online!

Dyadic dfns com aà esquerda e bà direita.

Uriel
fonte
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
fonte
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 os parâmetros como Doublee gera como Double.
Experimente aqui.

Ou (também 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 os parâmetros como Integere gera como Double.
Experimente aqui.

Kevin Cruijssen
fonte
1

ARBLE , 49 45 bytes

-4 bytes graças ao Sr. Xcoder

((a^2+b^2)/2)^.5+(a+b)/2+(a*b)^.5+2*a*b/(a+b)

Experimente online!

ATaco
fonte
45 bytes
Sr. Xcoder 15/10
1

Na verdade , 15 bytes

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

Experimente online!

O Yay realmente tem um built-in para o Root Square Mean!

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

média aritmética.
 ßπ√ ~ Produto, Raiz quadrada (calcula a média geométrica).
    + ~ Adição.
     ßΣ ~ Empurre a soma da entrada.
       ßπτ ~ Empurre o produto da entrada dobrada.
          / ~ Divida.
           + ~ Adição.
            ßµ ~ Empurre a raiz quadrada média.
              + ~ Adição.
Mr. Xcoder
fonte
1

Julia , 49 47 bytes

a$b=(x=a+b)/2+((a^2+b^2)/2)^.5+(y=a*b)^.5+2*y/x

Experimente online!

Uriel
fonte
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 graças ao Sr. Xcoder por uma edição que me fez sentir burra.

Urna de polvo mágico
fonte
1
Eu acho que você pode substituir a**2por a*ae b**2comb*b
Sr. Xcoder 17/10
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

Experimente online!

jq170727
fonte