Підсумуйте значення двох цілих чисел


12

У математиці існує досить багато засобів, таких як середнє арифметичне, середнє геометричне та багато інших ...

Визначення та завдання

Зауважте, що це визначення для двох натуральних чисел *:

  • Корінь середній квадрат квадратний корінь з суми їх квадратів половинок ( ).

  • Середнє арифметичне їх сума, вдвічі ( ).

  • Середнє геометричне є квадратний корінь з їх твори ( ).

  • Гармонійне середнє є 2 , поділений на суму їх зворотними ( = ).

Давши два цілі числа a і b такі, що a, b ∈ [1, + ∞) , підсумовуйте значення, згадані вище a і b . Ваші відповіді повинні бути точними щонайменше до 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
Принаймні, для цього немає математики, побудованої. Правильно?
NieDzejkob

@NieDzejkob Я не думаю, що так :-)
Містер Xcoder

@NieDzejkob Хоча я підозрюю, є вбудовані для кожного з засобів.
Ерік Аутгольфер

Відповіді:


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

Математика , 37 байт

-2 байти завдяки Мартіну Ендеру. -6 байт завдяки Jenny_mathy та повторному використанню функцій завдяки JungHwan Min.

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

Спробуйте в Інтернеті!

Математика , 55 байт

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

Спробуйте в Інтернеті!

¯ \ _ (ツ) _ / ¯


1
Альтернатива:((#^2+#2^2)/2)^.5+(#+#2)/2+(#1#2)^.5+2#*#2/(#+#2)&
Містер Xcoder

1
2 байти від:((#^2+#2^2)/2)^.5+(+##)/2+(1##)^.5+2/(1/#+1/#2)&
Мартін Ендер

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є протилежними паритетами.
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()у заголовку. На сайті Octave Online ви можете спробувати це, якщо ви хочете pkg load nan. Я не впевнений, чи є онлайн-перекладачі, які завантажують його за замовчуванням, але більшість систем завантажують цей пакет за замовчуванням.

Дякую Тому Карпентеру за те, що він помітив невелику помилку у 2 байти.

Це визначає анонімну функцію, приймаючи вхід як вектор n=[a,b]. Потім ми використовуємо вбудоване призначення, щоб зменшити обчислення HM до справедливих z/q.


1
Вам не потрібно включати f=в код, так що він складає 42 байти. (що, звичайно, призводить до того, що "перекреслений 44 виглядає як 44") - Спробуйте в Інтернеті!
Том Карпентер

Ой, ой, це артефакт від його копіювання з Octave-Online! Дякую.
Санчіз

TIO завантажує встановлені пакети за замовчуванням, просто не встановлено пакет сигналу
Луїс Мендо

@LuisMendo Саме так, я думаю, що фактично стандартом MATLAB та Octave є припускати, що всі пакунки встановлені та завантажені.
Санчіз

^.5 зберігає байти над sqrt. Також видаліть f=з кодової частини посилання
Луїс Мендо

2

Желе , 17 байт

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

Спробуйте в Інтернеті!


Приємне поєднання посилань. Найкраще, що я міг зробити в одному рядку PḤ÷S,µ³²Æm,P½,µÆmFS(19 байт) - я хоч і варто згадати, можливо, це джерело натхнення. EDIT: > _> Зараз я розумію, що можу просто використовувати +замість,
містер Xcoder

@ Mr.Xcoder Спочатку у мене була 18-байтна версія (не в історії ревізій), але потім я думав об'єднати ті, що підлягають ½об'єднанню, і це зберегло байт.
Ерік Аутгольфер

Ще одне можливе джерело натхнення: PḤ÷Sможе бути замінено на:İSHİ
Містер Xcoder

@ Mr.Xcoder теж подумав про це
Ерік Аутгольфер

2

05AB1E , 18 16 байт

-2 байти завдяки Еріку Переможнику

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
Ерік Аутгольфер

@EriktheOutgolfer Я не думаю, що це працює.
Окс

Візьміть дані як список [a, b].
Ерік Аутгольфер

@EriktheOutgolfer Звичайно! Чому я не придумав цього.
Okx


2

MATL , 21 18 17 байт

UYmGphX^GYmGpy/vs

Спробуйте в Інтернеті!

-3 байти завдяки Луїсу Мендо.

Пояснення

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

... якби Ом мав багатослівний режим сортування. : 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
Я впевнений, що трохи раніше тому я додав вбудований для середнього арифметичного значення, але це не заощадить тут жодних байтів.
Нік Кліффорд

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}:prgmNAMEщоб дістати 25.96148157.

Пояснення:

√(sum(Ans2)/2): 8 байт: середній квадрат кореня

mean(Ans): 5 3 байти: середнє арифметичне (стара sum(Ans)/2:)

2prod(Ans)/sum(Ans): 8 байт: середнє гармонійне

√(prod(Ans: 3 байти: середнє геометричне

+3 байт для 3 +ес


Я думаю, що у вас є додаткові незрівнянні дужки, що закриваються, після 2 дюймів sum(Ans)/2).
kamoroso94

@ kamoroso94 Виправлено, дякую.
pizzapants184

Збережіть два байти за допомогою mean(вбудованого.
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

Власне , 15 байт

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

Спробуйте в Інтернеті!

У насправді є вбудований для Root Square Mean!

æßπ√ + ßΣßπτ / + ßµ + ~ Повна програма.

æ ~ Середнє арифметичне.
 ßπ√ ~ Добуток, квадратний корінь (обчислює геометричне середнє значення).
    + ~ Доповнення.
     ßΣ ~ Натисніть суму вводу.
       ßπτ ~ Натисніть добуток вводу вдвічі.
          / ~ Розділити.
           + ~ Доповнення.
            ßµ ~ Середнє середнє значення Push Root.
              + ~ Доповнення.


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 дякую містеру Xcoder за редакцію, яка змусила мене почуватись німим.


1
Я думаю , ви можете замінити a**2з a*aі b**2зb*b
г 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: Якщо ви хочете менш нудний шлях (з точно такою ж байт-лічильник 76) using System;a=>b=>(a+b+Math.Sqrt(a*a+b*b<<1))/2+Math.Sqrt(a*b)+2d*a*b/(a+b). ;)
Кевін Круїссен

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

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.