Tính tổng phương tiện của hai số nguyên


12

Có khá nhiều phương tiện trong toán học, như trung bình số học, trung bình hình học và nhiều phương tiện khác ...

Định nghĩa và nhiệm vụ

Lưu ý rằng đây là các định nghĩa cho hai số nguyên dương *:

  • Bình phương trung bình gốc là căn bậc hai của tổng bình phương của chúng giảm một nửa ( ).

  • Trung bình số học là tổng của chúng, giảm một nửa ( ).

  • Ý nghĩa hình học là căn bậc hai của sản phẩm của họ ( ).

  • Giá trị trung bình hài2 chia cho tổng nghịch đảo của chúng ( = ).

Cho hai số nguyên ab sao cho a, b [1, + ∞) , tính tổng các phương tiện đã đề cập ở trên của ab . Câu trả lời của bạn phải chính xác đến ít nhất 3 chữ số thập phân, nhưng bạn không phải lo lắng về các lỗi chính xác làm tròn hoặc dấu phẩy động.

Các trường hợp thử nghiệm

a, b -> Đầu ra

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

Bạn có thể xem kết quả chính xác cho nhiều trường hợp thử nghiệm hơn bằng chương trình này . Đây là , vì vậy những bài nộp hợp lệ ngắn nhất tuân theo các quy tắc tiêu chuẩn sẽ thắng.

* Có nhiều phương tiện khác, nhưng cho mục đích của thử thách này, chúng tôi sẽ sử dụng những phương tiện được đề cập trong phần "Định nghĩa".



10
Phải yêu cầu xuất trung bình phương tiện. -1 (không).
đại từ của tôi là monicareinstate

9
Ít nhất là không có Mathicala dựng sẵn cho điều đó. Đúng?
NieDzejkob

@NieDzejkob Tôi không nghĩ vậy :-)
Ông Xcoder

@NieDzejkob Mặc dù tôi nghi ngờ có các nội trang cho mỗi một phương tiện.
Erik the Outgolfer

Câu trả lời:


13

Haskell , 48 byte

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

Hãy thử trực tuyến!

Điều này sử dụng thực tế là các phương tiện bình phương gốc, số học, hài hòa và hình học là tất cả các trường hợp đặc biệt của trung bình tổng quát ((a**p+b**p)/2)**(1/p) cho p=2,1,-1,0. Giá trị trung bình hình học sử dụng giới hạn p->0+, xấp xỉ là p=1e-9đủ cho độ chính xác.


9

Toán học , 37 byte

-2 byte nhờ Martin Ender. -6 byte nhờ vào Jenny_mathy và khả năng sử dụng lại chức năng nhờ vào JungHwan Min.

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

Hãy thử trực tuyến!

Toán học , 55 byte

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

Hãy thử trực tuyến!

¯ \ _ (ツ) _ /


1
Một cách khác:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Ông Xcoder

1
Tắt 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
Một sửa chữa nhỏ cho phiên bản @ Jenny_mathy (cùng số byte) : (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&. Chỉ để làm cho việc sử dụng lại chức năng dễ dàng hơn (mà không phải chạy Clear@ttrước mỗi lần lặp).
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)

Hãy thử trực tuyến!


Điều <<1này sẽ được cắt không chính xác thành một số nguyên khi ablà các chẵn lẻ đối diện.
xnor

@xnor Không phải vậy :) Bạn đang nghĩ đến >>1.
orlp

1
Ôi, lỗi của tôi! Tôi thấy bây giờ có một /2bên ngoài mà điều này là bù đắp. Bí quyết đẹp.
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

Hãy thử trực tuyến!

Giải trình:

s/2 = (a+b)/2: Trung bình số học.

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): Căn bậc hai có nghĩa là vuông.

sqrt p = sqrt(a*b). Ý nghĩa hình học.

2*p/s = 2*a*b/(a+b). Nghĩa hài hòa.


3

Octave , 44 42 41 byte

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

Hãy thử trực tuyến!

Lưu ý rằng TIO không có gói tín hiệu được cài đặt, vì vậy tôi đã xác định rms()trong tiêu đề. Trên Octave Online , bạn có thể dùng thử nếu bạn pkg load nan. Tôi không chắc chắn nếu có bất kỳ trình thông dịch trực tuyến nào tải nó theo mặc định, nhưng hầu hết các hệ thống sẽ có gói này được tải theo mặc định.

Cảm ơn Tom Carpenter đã phát hiện ra một lỗi nhỏ 2 byte.

Điều này xác định một hàm ẩn danh, lấy đầu vào là một vectơ n=[a,b]. Sau đó, chúng tôi sử dụng phép gán nội tuyến để giảm tính toán của HM xuống z/q.


1
Bạn không cần bao gồm f=mã trong mã này để có mã 42 byte. (tất nhiên dẫn đến "gạch bỏ 44 trông giống 44") - Hãy thử trực tuyến!
Tom Carpenter

Ôi, đó là một tạo tác từ việc sao chép nó từ Octave-Online! Cảm ơn.
Chiếm

TIO tải các gói đã cài đặt theo mặc định, nó chỉ không cài đặt gói Tín hiệu
Luis Mendo

@LuisMendo Chính xác, tôi nghĩ rằng tiêu chuẩn thực tế của MATLAB và Octave là giả định rằng tất cả các gói được cài đặt và tải.
Chiếm

^.5 tiết kiệm một byte hơn sqrt. Ngoài ra, xóa f=khỏi phần mã trong liên kết
Luis Mendo

2

Thạch , 17 byte

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

Hãy thử trực tuyến!


Kết hợp tốt đẹp của các liên kết. Điều tốt nhất tôi có thể làm trong một dòng là PḤ÷S,µ³²Æm,P½,µÆmFS(19 byte) - Tôi mặc dù điều đó đáng nói, có lẽ đó là một nguồn cảm hứng. EDIT: > _> Bây giờ tôi nhận ra mình chỉ có thể sử dụng +thay vì,
Ông Xcoder

@ Mr.Xcoder Lúc đầu tôi có một phiên bản 18 byte (không phải trong lịch sử sửa đổi) nhưng sau đó nghĩ rằng đặt các chủ đề ½lại với nhau và nó đã lưu một byte.
Erik the Outgolfer

Một nguồn cảm hứng khả dĩ khác: PḤ÷Scó thể được thay thế bằng:İSHİ
Ông Xcoder

@ Mr.Xcoder cũng nghĩ về điều đó
Erik the Outgolfer 15/10/17

2

05AB1E , 18 16 byte

-2 byte nhờ Erik the Outgolfer

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

Giải trình:

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

Hãy thử trực tuyến!


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

@EriktheOutgolfer Tôi không nghĩ rằng nó hoạt động.
Okx

Lấy đầu vào như một danh sách [a, b].
Erik the Outgolfer

@EriktheOutgolfer Tất nhiên rồi! Tại sao tôi không nghĩ về điều đó.
Okx


2

MATL , 21 18 17 byte

UYmGphX^GYmGpy/vs

Hãy thử trực tuyến!

-3 byte nhờ Luis Mendo.

Giải trình

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/Σ

Hãy thử trực tuyến!

Giải trình

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

... Nếu Ohm có chế độ dài dòng. : 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
Tôi khá chắc chắn rằng tôi đã thêm một tích hợp cho số học có nghĩa là một chút trước đây, nhưng nó sẽ không tiết kiệm cho bạn bất kỳ byte nào ở đây.
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 từ Scrooble

Đưa ra một danh sách gồm hai số Ansvà trả về tổng của bốn phương tiện; ví dụ: chạy với {7,6}:prgmNAMEđể có được25.96148157 .

Giải trình:

√(sum(Ans2)/2): 8 byte: bình phương trung bình gốc

mean(Ans): 5 3 byte: trung bình số học (cũ:sum(Ans)/2 :)

2prod(Ans)/sum(Ans): 8 byte: trung bình hài

√(prod(Ans: 3 byte: trung bình hình học

+3 byte trong 3 +giây


Tôi nghĩ rằng bạn có một dấu ngoặc đơn đóng thêm chưa từng có ở đây sau 2 in sum(Ans)/2).
kamoroso94

@ kamoroso94 Đã sửa, cảm ơn.
pizzapants184

Lưu hai byte với mean(nội dung.
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

khá tầm thường





1

Trên thực tế , 15 byte

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

Hãy thử trực tuyến!

Yay Thật sự có tích hợp sẵn cho Root Square Nghĩa!

æßπ√ + ßΣßπτ / + ß Cách + ~ Chương trình đầy đủ.

~ Trung bình số học.
 ßπ√ ~ Sản phẩm, Căn bậc hai (tính trung bình hình học).
    + ~ Bổ sung.
     ßΣ ~ Đẩy tổng của đầu vào.
       ßπτ ~ Đẩy sản phẩm của đầu vào tăng gấp đôi.
          / ~ Chia.
           + ~ Bổ sung.
            ß Tiết ~ Đẩy Root Square Nghĩa.
              + ~ Bổ sung.


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 cảm ơn ông Xcoder vì đã chỉnh sửa khiến tôi cảm thấy ngớ ngẩn.


1
Tôi nghĩ bạn có thể thay thế a**2bằng a*ab**2bằngb*b
Ông 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

Mở rộng

[
  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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.