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



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.


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!

¯ \ _ (ツ) _ / ¯


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!


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


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.


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.


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!


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!


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

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.

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]

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


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

JavaScript, 47 byte

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

cukup sepele


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.




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.


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.


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!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.