Somma le medie dei due numeri interi


12

Ci sono molti mezzi in matematica, come la media aritmetica, la media geometrica e molti altri ...

Definizioni e attività

Si noti che queste sono le definizioni per due numeri interi positivi *:

  • Il quadrato medio della radice è la radice quadrata della somma dei loro quadrati divisi in due ( ).

  • La media aritmetica è la loro somma, dimezzata ( ).

  • La media geometrica è la radice quadrata del loro prodotto ( ).

  • La media armonica è 2 divisa per la somma dei loro inversi ( = ).

Dati due interi a e b tali che a, b ∈ [1, + ∞) , sommare i mezzi di cui sopra di una e b . Le tue risposte devono essere accurate con almeno 3 cifre decimali, ma non devi preoccuparti di errori di arrotondamento o precisione in virgola mobile.

Casi test

a, b -> Uscita

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

Puoi vedere i risultati corretti per più casi di test usando questo programma . Si tratta di , quindi vince l'invio valido più breve che segue le regole standard.

* Esistono molti altri mezzi, ma ai fini di questa sfida utilizzeremo quelli menzionati nella sezione "Definizioni".



10
Deve aver chiesto di indicare la media dei mezzi. -1 (non).
mio pronome è monicareinstate il

9
Almeno non c'è Mathematica integrato per questo. Giusto?
NieDzejkob,

@NieDzejkob Non la penso così :-)
Mr. Xcoder,

@NieDzejkob Anche se sospetto che ci siano builtin per ognuno dei mezzi.
Erik the Outgolfer,

Risposte:


13

Haskell , 48 byte

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

Provalo online!

Questo usa il fatto che i mezzi radice-quadrato, aritmetici, armonici e geometrici sono tutti casi speciali del mezzo generalizzato ((a**p+b**p)/2)**(1/p) per p=2,1,-1,0. La media geometrica utilizza il limite p->0+, approssimato come p=1e-9sufficiente per la precisione.


9

Mathematica , 37 byte

-2 byte grazie a Martin Ender. -6 byte grazie a Jenny_mathy e riutilizzabilità delle funzioni grazie a JungHwan Min.

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

Provalo online!

Mathematica , 55 byte

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

Provalo online!

¯ \ _ (ツ) _ / ¯


1
Un'alternativa:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Mr. Xcoder,

1
2 byte di sconto:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender,

2
42 byte: (((s=+##)^2-2##)/2)^.5+s/2+(1##)^.5+2##/s&
J42161217

6
37 byte: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s&
J42161217

2
Una leggera correzione per la versione di @ Jenny_mathy (stesso numero di byte): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Solo per rendere più semplice il riutilizzo della funzione (senza dover eseguire Clear@tprima di ogni iterazione).
JungHwan Min,

5

Python 3 , 57 byte

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

Provalo online!


Si <<1troncerà erroneamente a un numero intero quando ae bsono parità opposte.
xnor

@xnor No non è :) Stai pensando >>1.
orlp

1
Oh mio errore! Vedo che adesso c'è un /2aspetto esterno che sta compensando. Bel trucco.
xnor


3

Haskell , 48 byte

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

Provalo online!

Spiegazione:

s/2 = (a+b)/2: La media aritmetica.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Il quadratino della radice.

sqrt p = sqrt(a*b). La media geometrica.

2*p/s = 2*a*b/(a+b). La media armonica.


3

Ottava , 44 42 41 byte

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

Provalo online!

Si noti che TIO non ha il pacchetto di segnali installato, quindi ho definito rms()nell'intestazione. Su Octave Online , puoi provarlo se lo fai pkg load nan. Non sono sicuro se ci sono interpreti online che lo caricano per impostazione predefinita, ma la maggior parte dei sistemi avrebbe questo pacchetto caricato per impostazione predefinita.

Grazie a Tom Carpenter per aver individuato un piccolo errore di 2 byte.

Questo definisce una funzione anonima, prendendo l'input come vettore n=[a,b]. Quindi utilizziamo l'assegnazione in linea per ridurre il calcolo dell'HM a giusto z/q.


1
Non è necessario includere il f=nel codice, in modo da renderlo di 42 byte. (che ovviamente porta al "44 barrato sembra 44") - Provalo online!
Tom Carpenter,

Oh oops, è un artefatto da copiarlo da Octave-Online! Grazie.
Sanchises,

TIO carica i pacchetti installati per impostazione predefinita, semplicemente non ha il pacchetto Signal installato
Luis Mendo,

@LuisMendo Esattamente, penso che lo standard di fatto di MATLAB e Octave sia supporre che tutti i pacchetti siano installati e caricati.
Sanchises,

^.5 salva un byte sopra sqrt. Inoltre, rimuovi f=dalla parte di codice nel link
Luis Mendo,

2

Gelatina , 17 byte

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

Provalo online!


Bella combinazione di collegamenti. Il meglio che potrei fare in una riga è PḤ÷S,µ³²Æm,P½,µÆmFS(19 byte) - anche se vale la pena menzionarlo, forse è una fonte di ispirazione. EDIT: > _> Ora mi rendo conto che posso usare solo +invece di,
Mr. Xcoder il

@ Mr.Xcoder All'inizio avevo una versione a 18 byte (non nella cronologia delle revisioni), ma poi ho pensato di mettere insieme i soggetti ½, e ho salvato un byte.
Erik the Outgolfer,

Un'altra possibile fonte di ispirazione: PḤ÷Spuò essere sostituita da:İSHİ
Mr. Xcoder,

@ Anche Mr.Xcoder ci ha pensato
Erik the Outgolfer,

2

05AB1E , 18 16 byte

-2 byte grazie a Erik the Outgolfer

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

Spiegazione:

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

Provalo online!


nO;t¹O;¹Pt2¹zO/O
Erik the Outgolfer,

@EriktheOutgolfer Non penso che funzioni.
Okx

Prendi input come elenco [a, b].
Erik the Outgolfer,

@EriktheOutgolfer Certo! Perché non ci ho pensato.
Okx,


2

MATL , 21 18 17 byte

UYmGphX^GYmGpy/vs

Provalo online!

-3 byte grazie a Luis Mendo.

Spiegazione

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 byte

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

Provalo online!

Spiegazione

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

... se Ohm avesse una specie di modalità verbosa. : 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
Sono abbastanza sicuro di aver aggiunto una media aritmetica incorporata un po 'di tempo fa, ma qui non ti risparmierei alcun byte.
Nick Clifford,

2

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

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

-2 byte da Scrooble

Prende un elenco di due numeri Anse restituisce implicitamente la somma dei quattro mezzi; es. corri con {7,6}:prgmNAMEper ottenere 25.96148157.

Spiegazione:

√(sum(Ans2)/2): 8 byte: radice quadrata media

mean(Ans): 5 3 byte: media aritmetica (vecchia sum(Ans)/2:)

2prod(Ans)/sum(Ans): 8 byte: media armonica

√(prod(Ans: 3 byte: media geometrica

+3 byte per 3 +es


Penso che tu abbia una parentesi di chiusura ineguagliata qui dopo il 2 in sum(Ans)/2).
kamoroso94,

@ kamoroso94 Risolto, grazie.
pizzapants184

Salva due byte con l' mean(integrato.
Khuldraeseth na'Barya,



1

JavaScript, 47 byte

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

abbastanza banale


1

Java 8, 63 byte

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

Accetta entrambi i parametri come Doublee output come Double.
Provalo qui.

Oppure (anche 63 byte ):

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

Accetta entrambi i parametri come Integere output come Double.
Provalo qui.




1

In realtà , 15 byte

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

Provalo online!

Yay In realtà ha un built-in per Root Square Mean!

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

æ ~ Media aritmetica.
 ßπ√ ~ Prodotto, radice quadrata (calcola la media geometrica).
    + ~ Aggiunta.
     ßΣ ~ Sposta la somma dell'ingresso.
       ßπτ ~ Sposta il prodotto dell'ingresso raddoppiato.
          / ~ Dividi.
           + ~ Aggiunta.
            ßµ ~ Media radice quadrata spinta.
              + ~ Aggiunta.


1

Groovy, 54 byte

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

-2 grazie a Mr. Xcoder per una modifica che mi ha fatto sentire stupido.


1
Penso che puoi sostituire a**2con a*ae b**2conb*b
Mr. Xcoder il


0

Jq 1,5 , 76 byte

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

allargato

[
  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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.