Суммируйте значения двух целых


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
По крайней мере, для этого нет встроенной Mathematica. Правильно?
NieDzejkob

@NieDzejkob Я так не думаю :-)
Мистер Xcoder

@NieDzejkob Хотя я подозреваю, что для каждого из этих средств есть встроенные функции.
Эрик 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 байта благодаря Мартину Эндеру. -6 байт благодаря 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)&
г-н 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 Мин

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! Благодарю.
Sanchises

TIO загружает установленные пакеты по умолчанию, просто не установлен пакет Signal
Luis Mendo

@LuisMendo Точно, я думаю, что де-факто стандарт MATLAB и Octave предполагает, что все пакеты установлены и загружены.
Sanchises

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

2

Желе , 17 байт

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

Попробуйте онлайн!


Хорошая комбинация ссылок. Лучшее, что я мог сделать в одной строке - это PḤ÷S,µ³²Æm,P½,µÆmFS(19 байт) - хотя стоит упомянуть, может быть, это источник вдохновения. РЕДАКТИРОВАТЬ: > _> Теперь я понимаю, что я могу просто использовать +вместо,
г-н Xcoder

@ Mr.Xcoder Сначала у меня была 18-байтовая версия (не в истории ревизий), но затем я подумал собрать вместе те из них ½, которые были сохранены, и это спасло байт.
Эрик Outgolfer

Другой возможный источник вдохновения: PḤ÷Sможет быть заменен:İSHİ
Мистером Xcoder

@ Мистер 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
Эрик Outgolfer

@EriktheOutgolfer Я не думаю, что это работает.
Okx

Взять входные данные в виде списка [a, b].
Эрик Outgolfer

@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

... если бы у Ома была многословная разновидность. :П

²Σ½¬³Π¬³Σ½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 байта от Скрубла

Принимает список из двух чисел 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 +es


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

@ kamoroso94 Исправлено, спасибо.
pizzapants184

Сохранить два байта с помощью mean(встроенного.
Хулдрасет на Барьяя



1

JavaScript, 47 байт

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

довольно тривиально





1

На самом деле 15 байтов

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

Попробуйте онлайн!

Yay На самом деле есть встроенный для Root Square Mean!

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

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


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.