รวมความหมายของจำนวนเต็มสองจำนวน


12

คณิตศาสตร์มีวิธีการค่อนข้างน้อยเช่นค่าเฉลี่ยเลขคณิตค่าเฉลี่ยเรขาคณิตและอื่น ๆ ...

คำจำกัดความและภารกิจ

โปรดทราบว่าสิ่งเหล่านี้เป็นคำจำกัดความของจำนวนเต็มบวกสองตัว :

  • แควร์รูทเฉลี่ยคือสแควร์รูทของผลรวมของสี่เหลี่ยมจัตุรัสลดลงครึ่งหนึ่ง ( )

  • มัชฌิมเลขคณิตคือผลรวมของพวกเขาลดลงครึ่งหนึ่ง ( )

  • เฉลี่ยเรขาคณิตเป็นรากที่สองของผลิตภัณฑ์ของพวกเขา ( )

  • เฉลี่ยฮาร์โมนิเป็น2หารด้วยผลรวมของการแปรผกผันกันของพวกเขา ( = )

ได้รับสองจำนวนเต็มและ ดังกล่าวว่ามี b ∈ [1, + ∞)สรุปวิธีการดังกล่าวข้างต้นของและข คำตอบของคุณจะต้องแม่นยำอย่างน้อย 3 ตำแหน่งทศนิยม แต่คุณไม่ต้องกังวลเกี่ยวกับข้อผิดพลาดความแม่นยำในการปัดเศษหรือทศนิยม

กรณีทดสอบ

a, b -> เอาท์พุท

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

คุณสามารถเห็นผลลัพธ์ที่ถูกต้องสำหรับกรณีทดสอบเพิ่มเติมโดยใช้โปรแกรมนี้ นี่คือดังนั้นการส่งที่ถูกต้องสั้นที่สุดที่เป็นไปตามกฎมาตรฐานจะชนะ

* มีวิธีการอื่นอีกมากมาย แต่สำหรับจุดประสงค์ของการท้าทายนี้เราจะใช้วิธีที่กล่าวถึงในส่วน "คำจำกัดความ"



10
ต้องขอให้ส่งค่าเฉลี่ยของค่าเฉลี่ย -1 (ไม่ใช่)
สรรพนามของฉันคือ monicareinstate

9
อย่างน้อยก็ไม่มี Mathematica builtin สำหรับสิ่งนั้น ขวา?
NieDzejkob

@NieDzejkob ฉันไม่คิดอย่างนั้น :-)
Mr. Xcoder

@NieDzejkob แม้ว่าฉันจะสงสัยว่ามี builtins สำหรับแต่ละวิธี
Erik the Outgolfer

คำตอบ:


13

Haskell , 48 ไบต์

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

ลองออนไลน์!

นี้จะใช้ความจริงที่ว่าหมายถึงรากตารางคณิตศาสตร์ฮาร์โมนิและเรขาคณิตทุกกรณีพิเศษของค่าเฉลี่ยทั่วไป สำหรับ((a**p+b**p)/2)**(1/p) p=2,1,-1,0ค่าเฉลี่ยเรขาคณิตใช้ขีด จำกัดp->0+โดยประมาณว่าp=1e-9เพียงพอสำหรับความแม่นยำ


9

Mathematicaขนาด 37 ไบต์

-2 ไบต์ขอบคุณ Martin Ender ขอบคุณ -6 bytes สำหรับ Jenny_mathy และความสามารถในการนำกลับมาใช้ใหม่ได้ต้องขอบคุณ JungHwan Min

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

ลองออนไลน์!

Mathematicaขนาด 55 ไบต์

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

ลองออนไลน์!

¯ \ _ (ツ) _ / ¯


1
ทางเลือก:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Mr. Xcoder

1
ปิด 2 ไบต์:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Martin Ender

2
42 ไบต์: (((s=+##)^2-2##)/2)^.5+s/2+(1##)^.5+2##/s&
J42161217

6
37 ไบต์: (2(s=+##/2)^2-t)^.5+s+(t=1##)^.5+t/s&
J42161217

2
การแก้ไขเล็กน้อย @ Jenny_mathy รุ่น (t=1##)^.5+(2(s=+##/2)^2-t)^.5+s+t/s&(นับไบต์เดียวกัน): เพียงเพื่อให้ง่ายต่อการนำฟังก์ชั่นมาใช้ซ้ำ (โดยไม่ต้องเรียกใช้Clear@tก่อนการวนซ้ำแต่ละครั้ง)
JungHwan Min

5

Python 3 , 57 ไบต์

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

ลองออนไลน์!


<<1เป็นไปอย่างไม่ถูกต้องตัดเป็นจำนวนเต็มเมื่อaและbเป็น parities ตรงข้าม
xnor

@xnor ไม่มีก็ไม่ได้ :) >>1คุณกำลังความคิดของ
orlp

1
โอ้ความผิดพลาดของฉัน! ฉันเห็นแล้วว่ามีสิ่ง/2ภายนอกที่ชดเชยสิ่งนี้ เคล็ดลับดี
xnor


3

Haskell , 48 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

s/2 = (a+b)/2: ค่าเฉลี่ยเลขคณิต

sqrt(s^2/2-p) = sqrt((a^2+2*a*b+b^2)/2-a*b) = sqrt((a^2+b^2)/2): รูตหมายความว่ากำลังสอง

sqrt p = sqrt(a*b). ค่าเฉลี่ยเรขาคณิต

2*p/s = 2*a*b/(a+b). ค่าเฉลี่ยฮาร์มอนิก


3

คู่ , 44 42 41 ไบต์

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

ลองออนไลน์!

โปรดทราบว่า TIO ไม่ได้ติดตั้งแพ็คเกจสัญญาณดังนั้นฉันจึงกำหนดไว้rms()ในส่วนหัว บนคู่ออนไลน์pkg load nanคุณสามารถลองถ้าคุณ ฉันไม่แน่ใจว่ามีล่ามออนไลน์ที่โหลดโดยค่าเริ่มต้นหรือไม่ แต่ระบบส่วนใหญ่จะมีแพ็คเกจนี้โหลดตามค่าเริ่มต้น

ขอขอบคุณ Tom Carpenter สำหรับการทำความผิดพลาดเล็กน้อยที่ 2 ไบต์

นี้กำหนดฟังก์ชั่นที่ไม่ระบุชื่อ, n=[a,b]การป้อนข้อมูลที่เป็นเวกเตอร์ z/qจากนั้นเราจะใช้การกำหนดแบบอินไลน์เพื่อลดการคำนวณของพระบาทเพียง


1
คุณไม่จำเป็นต้องใส่f=รหัสลงไปด้วยดังนั้นมันจึงมีขนาด 42 ไบต์ (ซึ่งแน่นอนว่านำไปสู่ ​​"การตัดออก 44 ดูเหมือน 44") - ลองออนไลน์!
Tom Carpenter

โอ้โอ้นั่นเป็นสิ่งประดิษฐ์ที่คัดลอกมาจาก Octave-Online! ขอบคุณ
Sanchises

โหลด TIO ติดตั้งแพคเกจโดยค่าเริ่มต้นมันก็ไม่ได้มีแพคเกจติดตั้งสัญญาณ
หลุยส์ Mendo

@ LuisMendo แน่นอนฉันคิดว่ามาตรฐานของ MATLAB และ Octave นั้นคือสมมติว่ามีการติดตั้งและโหลดแพคเกจทั้งหมด
Sanchises

^.5 บันทึกไบต์sqrtมากกว่า นอกจากนี้ลบออกf=จากส่วนของรหัสในลิงค์
Luis Mendo

2

เยลลี่ขนาด 17 ไบต์

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

ลองออนไลน์!


การผสมผสานที่ดีของลิงก์ สิ่งที่ดีที่สุดที่ฉันสามารถทำได้ในหนึ่งบรรทัดคือPḤ÷S,µ³²Æm,P½,µÆmFS(19 ไบต์) - ฉันคิดว่ามันควรค่าแก่การกล่าวถึงบางทีมันอาจเป็นแรงบันดาลใจ แก้ไข: > _> ตอนนี้ฉันรู้ว่าฉันสามารถใช้+แทน,
Mr. Xcoder

@ Mr.Xcoder ฉันมีรุ่น 18 ไบต์ในตอนแรก (ไม่ได้อยู่ในประวัติการแก้ไข) แต่ก็คิดว่าจะนำสิ่งที่อยู่ภายใต้มา½รวมกันและช่วยประหยัดไบต์
Erik the Outgolfer

แหล่งที่มาของแรงบันดาลใจที่เป็นไปได้อื่น: PḤ÷Sสามารถถูกแทนที่ด้วย:İSHİ
Mr. Xcoder

@ Mr.Xcoder คิดเช่นกัน
Erik the Outgolfer

2

05AB1E , 18 16 ไบต์

-2 ไบต์ขอบคุณ Erik the Outgolfer

nO;t¹O;¹Pt2¹zO/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

ลองออนไลน์!


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

@EriktheOutgolfer ฉันไม่คิดว่ามันใช้งานได้
Okx

[a, b]ใช้การป้อนข้อมูลเป็นรายการ
Erik the Outgolfer

@EriktheOutgolfer แน่นอน! ทำไมฉันไม่คิดอย่างนั้น
Okx


2

MATL , 21 18 17 ไบต์

UYmGphX^GYmGpy/vs

ลองออนไลน์!

-3 ไบต์ขอบคุณ Luis Mendo

คำอธิบาย

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

โอห์ม v2 , 16 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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

... ถ้าโอห์มมีโหมด 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
ฉันค่อนข้างมั่นใจว่าฉันได้เพิ่มบิวด์อินสำหรับเลขคณิตหมายถึงเมื่อไม่นานมานี้ แต่มันจะไม่ช่วยให้คุณประหยัดไบต์ที่นี่
Nick Clifford

2

TI-Basic (TI-84 Plus CE), 27 25 ไบต์

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

-2 ไบต์จากScrooble

ใช้รายการตัวเลขสองตัวAnsและส่งกลับผลรวมของสี่วิธีโดยปริยาย เช่นการทำงานกับที่จะได้รับ{7,6}:prgmNAME25.96148157

คำอธิบาย:

√(sum(Ans2)/2): 8 ไบต์: รูตหมายความว่ากำลังสอง

mean(Ans): 5 3 ไบต์: ค่ามัชฌิมเลขคณิต (เดิม: sum(Ans)/2)

2prod(Ans)/sum(Ans): 8 ไบต์: ค่าเฉลี่ยฮาร์มอนิก

√(prod(Ans: 3 ไบต์: ค่าเฉลี่ยทางเรขาคณิต

+3 ไบต์สำหรับ 3 +es


ฉันคิดว่าคุณมีความพิเศษวงเล็บปิดเปรียบที่นี่หลังจากที่ 2 sum(Ans)/2)ใน
kamoroso94

@ kamoroso94 แก้ไขขอบคุณ
pizzapants184

บันทึกสองไบต์ด้วยmean(builtin
Khuldraeseth na'Barya



1

JavaScript, 47 ไบต์

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

ค่อนข้างเล็กน้อย


1

Java 8, 63 ไบต์

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

ใช้พารามิเตอร์ทั้งในฐานะและผลเป็นDouble ลองที่นี่Double

หรือ (เช่น63 ไบต์ ):

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

ใช้พารามิเตอร์ทั้งในฐานะและผลเป็นInteger ลองที่นี่Double




1

ที่จริงแล้ว 15 ไบต์

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

ลองออนไลน์!

Yay ที่จริงแล้วมีรูตในตัวสำหรับค่ารูทสแควร์!

æßπ√ + ßΣßπτ / + ßµ + ~ โปรแกรมเต็มรูปแบบ

æ ~ ค่าเฉลี่ยเลขคณิต
 ผลิตภัณฑ์ ~, รากที่สอง (คำนวณค่าเฉลี่ยทางเรขาคณิต)
    + ~ นอกจากนี้
     ΣΣ ~ กดผลรวมของอินพุต
       Pushπτ ~ ผลักผลิตภัณฑ์ของอินพุตเป็นสองเท่า
          / ~ หาร
           + ~ นอกจากนี้
            ผลักดันค่าเฉลี่ยสแควร์รูท
              + ~ นอกจากนี้


1

Groovy ขนาด 54 ไบต์

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

-2 ขอบคุณ Mr. Xcoder สำหรับการแก้ไขที่ทำให้ฉันรู้สึกเป็นใบ้


1
ฉันคิดว่าคุณสามารถแทนที่a**2ด้วยa*aและb**2ด้วยb*b
Mr. Xcoder

1

C # (. NET Core) 76 ไบต์

+13 ไบต์สำหรับ using System;

a=>b=>Math.Sqrt((a*a+b*b)/2)+(a+b)/2+Math.Sqrt(a*b)+2/(1/a+1/b)

ลองออนไลน์!


คุณสามารถบันทึกไบต์โดยและลบทั้งสองusing System; System.PS: ถ้าคุณต้องการเป็นวิธีที่น่าเบื่อน้อย (แบบเดียวกับที่แน่นอนไบต์นับ using System;a=>b=>(a+b+Math.Sqrt(a*a+b*b<<1))/2+Math.Sqrt(a*b)+2d*a*b/(a+b)76): ;)
Kevin Cruijssen

0

Jq 1.5 , 76 ไบต์

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

ขยาย

[
  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

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.