Jumlahkan rata-rata dari dua bilangan bulat

12

Ada beberapa cara dalam matematika, seperti rata-rata aritmatika, rata-rata geometris, dan banyak lainnya ...

Definisi dan Tugas

Perhatikan bahwa ini adalah definisi untuk dua bilangan bulat positif *:

  • The Root Mean Square adalah akar kuadrat dari jumlah kuadrat mereka dibelah dua ( ).

  • The mean aritmetik adalah jumlah mereka, dibelah dua ( ).

  • The rata geometris adalah akar kuadrat dari produk mereka ( ).

  • The mean harmonik adalah 2 dibagi dengan jumlah invers mereka ( = ).

Dengan diberi dua bilangan bulat a dan b sedemikian rupa sehingga a, b ∈ [1, + ∞) , jumlah rata-rata yang disebutkan di atas a dan b . Jawaban Anda harus akurat untuk setidaknya 3 tempat desimal, tetapi Anda tidak perlu khawatir tentang kesalahan presisi pembulatan atau titik mengambang.

Uji Kasus

a, b -> Output

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

Anda dapat melihat hasil yang benar untuk lebih banyak kasus uji menggunakan program ini . Ini adalah , jadi pengiriman terpendek yang valid yang mengikuti aturan standar akan menang.

* Ada banyak cara lain, tetapi untuk tujuan tantangan ini kita akan menggunakan yang disebutkan di bagian "Definisi".

Tuan Xcoder
sumber
Terkait
Martin Ender
10
Pasti diminta untuk mengeluarkan rata-rata sarana. -1 (tidak).
kata ganti saya adalah monicareinstate
9
Setidaknya tidak ada Mathematica bawaan untuk itu. Baik?
NieDzejkob
@NieDzejkob Saya tidak berpikir begitu :-)
Tn. Xcoder
@NieDzejkob Meskipun saya curiga ada builtin untuk masing-masing cara.
Erik the Outgolfer

Jawaban:

13

Haskell , 48 byte

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

Cobalah online!

Ini menggunakan fakta bahwa akar kuadrat, aritmatika, harmonik, dan rata-rata geometrik adalah semua kasus khusus dari rata ((a**p+b**p)/2)**(1/p) - rata umum untuk p=2,1,-1,0. Rerata geometris menggunakan batas p->0+, yang diperkirakan p=1e-9cukup untuk presisi.

Tidak
sumber
9

Mathematica , 37 byte

-2 byte terima kasih kepada Martin Ender. -6 bytes berkat Jenny_mathy dan fungsi reusability berkat JungHwan Min.

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

Cobalah online!

Mathematica , 55 byte

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

Cobalah online!

¯ \ _ (ツ) _ / ¯

benar-benar manusiawi
sumber
1
Alternatif:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Tn. Xcoder
1
Diskon 2 byte:((#^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
Sebuah memperbaiki sedikit untuk @ versi Jenny_mathy ini (count byte yang sama): (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Hanya untuk membuatnya lebih mudah untuk menggunakan kembali fungsi (tanpa harus berjalan Clear@tsebelum setiap iterasi).
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)

Cobalah online!

orlp
sumber
The <<1akan benar memotong ke integer ketika adan byang paritas berlawanan.
xnor
@xnor Tidak bukan :) Anda sedang memikirkan >>1.
orlp
1
Oh, kesalahanku! Saya melihat sekarang ada bagian /2luar yang mengkompensasi ini. Trik yang bagus.
xnor
4

R , 52 byte

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

Cobalah online!

Giuseppe
sumber
3

Haskell , 48 byte

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

Cobalah online!

Penjelasan:

s/2 = (a+b)/2: Mean aritmatika.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Root mean square.

sqrt p = sqrt(a*b). Mean geometrik.

2*p/s = 2*a*b/(a+b). Mean harmonik.

H.Piz
sumber
3

Oktaf , 44 42 41 byte

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

Cobalah online!

Perhatikan bahwa TIO tidak memiliki paket sinyal yang diinstal, jadi saya mendefinisikan rms()di header. Di Octave Online , Anda dapat mencobanya jika Anda pkg load nan. Saya tidak yakin apakah ada penerjemah online yang memuatnya secara default, tetapi sebagian besar sistem akan memuat paket ini secara default.

Terima kasih kepada Tom Carpenter karena menemukan kesalahan kecil 2 byte.

Ini mendefinisikan fungsi anonim, mengambil input sebagai vektor n=[a,b]. Kami kemudian menggunakan penugasan sebaris untuk mengurangi perhitungan HM menjadi adil z/q.

Sanchises
sumber
1
Anda tidak perlu memasukkan f=dalam kode, sehingga membuatnya menjadi 42 byte. (yang tentu saja mengarah ke "dicoret 44 sepertinya 44") - Cobalah online!
Tom Carpenter
Oh oops, itu artefak dari menyalinnya dari Octave-Online! Terima kasih.
Sanchises
TIO memuat paket yang diinstal secara default, hanya saja paket Sinyal tidak diinstal
Luis Mendo
@LuisMendo Persis, saya pikir standar de facto MATLAB dan Octave adalah dengan menganggap bahwa semua paket diinstal dan dimuat.
Sanchises
^.5 menyimpan byte lebih dari sqrt. Juga, hapus f=dari bagian kode di tautan
Luis Mendo
2

Jelly , 17 byte

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

Cobalah online!

Erik the Outgolfer
sumber
Kombinasi tautan yang bagus. Yang terbaik yang bisa saya lakukan dalam satu baris adalah PḤ÷S,µ³²Æm,P½,µÆmFS(19 byte) - Saya pikir itu layak disebut, mungkin itu sumber inspirasi. Sunting: > _> Sekarang saya sadar saya bisa menggunakan +saja,
Tn. Xcoder
@ Mr.Xcoder Saya memiliki versi 18-byte pada awalnya (tidak dalam sejarah revisi) tetapi kemudian berpikir untuk menempatkan subjek yang menjadi ½satu, dan menyimpan satu byte.
Erik the Outgolfer
Sumber inspirasi lain yang mungkin: PḤ÷Sdapat digantikan oleh:İSHİ
Tn. Xcoder
@ Mr.Xcoder juga memikirkan hal itu
Erik the Outgolfer
2

05AB1E , 18 16 byte

-2 byte terima kasih kepada Erik the Outgolfer

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

Penjelasan:

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

Cobalah online!

Okx
sumber
nO;t¹O;¹Pt2¹zO/O
Erik the Outgolfer
@EriktheOutgolfer Saya pikir itu tidak berhasil.
Okx
Ambil input sebagai daftar [a, b].
Erik the Outgolfer
@EriktheOutgolfer Tentu saja! Kenapa aku tidak memikirkan itu.
Okx
2

Sekam , 19 byte

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

Cobalah online!

-1 terima kasih H.PWiz .

Erik the Outgolfer
sumber
ö√½Σm□bisaȯ√½ṁ□
H.PWiz
@ H.PWiz> _> Saya tahu saya akan melupakan sesuatu
Erik the Outgolfer
18 byte
H.PWiz
@ H.Piz masih belajar! : p
Erik the Outgolfer
2

MATL , 21 18 17 byte

UYmGphX^GYmGpy/vs

Cobalah online!

-3 byte terima kasih kepada Luis Mendo.

Penjelasan

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

Ohm v2 , 16 byte

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

Cobalah online!

Penjelasan

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

... jika Ohm memiliki semacam mode verbose. : 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]
benar-benar manusiawi
sumber
1
Saya cukup yakin saya menambahkan built-in untuk aritmatika berarti beberapa saat yang lalu, tetapi tidak akan menghemat byte di sini.
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 dari Scrooble

Membawa daftar dua angka Ans, dan secara implisit mengembalikan jumlah dari empat cara; misalnya lari dengan {7,6}:prgmNAMEuntuk mendapatkan 25.96148157.

Penjelasan:

√(sum(Ans2)/2): 8 byte: root mean square

mean(Ans): 5 3 byte: rata-rata aritmatika (lama sum(Ans)/2:)

2prod(Ans)/sum(Ans): 8 byte: rata-rata harmonik

√(prod(Ans: 3 byte: rerata geometris

+3 byte untuk 3 +es

pizzapants184
sumber
Saya pikir Anda memiliki kurung penutup ekstra yang tak tertandingi di sini setelah 2 in sum(Ans)/2).
kamoroso94
@ kamoroso94 Diperbaiki, terima kasih.
pizzapants184
Simpan dua byte dengan mean(builtin.
Khuldraeseth na'Barya
1

Dyalog APL , 44 byte

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

Cobalah online!

Dyadic dfns dengan adi kiri dan bdi kanan.

Uriel
sumber
1

JavaScript, 47 byte

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

cukup sepele

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

Mengambil parameter sebagai Doubledan keluaran sebagai Double.
Coba di sini.

Atau (juga 63 byte ):

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

Mengambil parameter sebagai Integerdan keluaran sebagai Double.
Coba di sini.

Kevin Cruijssen
sumber
1

Python 2 , 58 byte

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

Cobalah online!

Mengambil input sebagai mengambang

TFeld
sumber
1

ARBLE , 49 45 byte

-4 byte terima kasih kepada Tn. Xcoder

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

Cobalah online!

ATaco
sumber
45 byte
Tn. Xcoder
1

Sebenarnya , 15 byte

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

Cobalah online!

Yay Actually memiliki built-in untuk Root Square Mean!

æßπ√ + ßΣßπτ / + ßµ + ~ Program lengkap.

æ ~ Aritmatika berarti.
 ßπ√ ~ Produk, akar kuadrat (menghitung rata-rata geometris).
    + ~ Tambahan.
     ßΣ ~ Dorong jumlah input.
       ßπτ ~ Dorong produk input menjadi dua kali lipat.
          / ~ Membagi.
           + ~ Tambahan.
            ßµ ~ Push Root Square Mean.
              + ~ Tambahan.
Tuan Xcoder
sumber
1

Julia , 49 47 byte

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

Cobalah online!

Uriel
sumber
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 Terima kasih kepada Tn. Xcoder untuk hasil edit yang membuat saya merasa bodoh.

Guci Gurita Ajaib
sumber
1
Saya pikir Anda dapat mengganti a**2dengan a*adan b**2denganb*b
Tn. Xcoder
0

Jq 1,5 , 76 byte

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

Diperluas

[
  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

Cobalah online!

jq170727
sumber