Найдите разницу между квадратом сумм и суммой квадратов.
Это математическое представление:
Ваша программа / метод должны принимать два входа, это ваш нижний и верхний пределы диапазона, и они включены. Пределы будут целыми числами выше 0.
Ваша программа / метод должен вернуть ответ.
Вы можете использовать любую базу, которую пожелаете, но, пожалуйста, укажите в своем ответе, какую базу вы использовали.
Тестовый пример (база 10)
5,9 970
91,123 12087152
1,10 2640
Это обычный код-гольф, поэтому чем короче ответ, тем лучше.
Ответы:
Python 2, 43 байта
Проверьте это на Ideone .
Как это работает
Вызовите функцию, определенную в спецификации g (a, b) . У нас есть это
Определите функцию f (x, y, s) рекурсивно следующим образом.
Применяя рекуррентное соотношение f (a, b, 0) к сумме b - a , мы можем показать это.
Это функция f реализации. Хотя
b/a
возвращает ненулевое целое число, выполняется следующий кодand
, тем самым реализуя рекурсивное определение f .После того, как
b/a
достигает 0 , то есть , что B> и возвращает лямбда Ложные = 0 , таким образом , реализует базовый случай определения е .источник
MATL , 9 байт
Попробуйте онлайн!
объяснение
пример
Это частичные результаты каждой строки для входов
5
и9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
источник
Желе,
98 байтПопробуйте онлайн!
Спасибо FryAmTheEggman за байт!
источник
Python 2, 45 байт
Решение для закрытой формы - не самое короткое, но я подумал, что в любом случае стоит опубликовать.
объяснение
Пусть
p(n)
будет п - го квадратного пирамидального числа , аt(n)
быть п е треугольным числом . Тогда для n в диапазоне a , ..., b :t(b)-t(a-1)
иp(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Это выражение сводится к тому, что в коде.
источник
p(n)
бытьn
th квадратным пирамидальным числом , иt(n)
будетn
th треугольным числом . Тогда это упрощенная версия(t(b)-t(a-1))^2 - (p(b) - p(a-1))
.(a-b-1)
фактор сам(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
по себе.05AB1E, 8 байтов
Разъяснения
Попробуйте онлайн
источник
Mathematica, 21 байт
Безымянная функция, принимающая два аргумента и возвращающая разницу. Использование:
Здесь есть три небольших (и довольно стандартных) трюка для игры в гольф:
##
представляет оба аргумента одновременно, так что мы можем использовать префиксную нотацию дляRange
.Range@##
является сокращением, дляRange[##]
которого расширяетсяRange[a, b]
и дает нам широкий диапазон по мере необходимости.Tr
для трассировки, но использование его для вектора просто суммирует этот вектор, сохраняя три байтаTotal
.x.x
является точечным произведением, сохраняющим четыре байтаTr[x^2]
.источник
Variance
?Variance
разделен на,n
а другой на,n^2
и я не вижу простой способ отменить их по отдельности.Tr@#^2-#.#&@*Range
только 18 байтов.Лабиринт ,
2824 байтаПопробуйте онлайн!
объяснение
Поскольку в Лабиринте циклы, как правило, дороги, я решил, что явная формула должна быть кратчайшей, поскольку она может быть выражена в виде линейного кода.
Указатель инструкции затем попадает в тупик и должен развернуться. Когда он теперь сталкивается,
/
он пытается делить на ноль (поскольку дно стека неявно заполнено нулями), что завершает программу.источник
Haskell, 34 байта
Пример использования:
91 # 123
->12087152
.Нечего объяснять.
источник
Matlab,
302928 байтИспользование идеи Сьювера
norm
дает нам на 2 байта меньшеСтарая (простая) версия:
источник
Октава,
2723 байтаСоздает анонимную функцию с именем,
ans
которая принимает два входа:ans(lower, upper)
Демо онлайн
объяснение
Создает вектор строки от
x
доy
(включительно) и сохраняет его вz
. Затем мы суммируем все элементы, используяsum
квадраты (^2
). Чтобы вычислить сумму квадратов, мы выполняем умножение матриц между вектором-строкой и его транспонированием. Это эффективно возведет в квадрат каждый элемент и подведет итоги. Затем мы вычитаем два.источник
Java,
8477 символов,8477 байтовСпасибо, на 7 байтов меньше благодаря Мартину Эндеру и FryAmTheEggMan.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Используя три контрольных примера в оригинальном посте: http://ideone.com/q9MZSZ
Ungolfed:
Процесс довольно очевиден. Я объявил две переменные для представления квадрата сумм и суммы квадратов и многократно увеличивал их соответственно. Наконец, я возвращаю вычисленную разницу.
источник
++
наf+=b*b++
(так что вы можете оставить третий слотfor
пустой) , и вы также не должны площадиe
перед возвратом его (т.е. просто сделатьreturn e*e-f
).for
пустым, переместитеf+=b*b++
туда, чтобы вы могли сэкономить как на точке с запятой, так и на скобках.JavaScript (ES6), 46 байт
источник
JavaScript (ES6),
5037 байтТеперь порт решения @ Dennis ♦ Python.
источник
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Фактор, 48 байтов
Анонимная функция.
источник
Haskell, 36 байт
Обратите внимание, что
источник
i+1
.Perl 6 ,
36 3231 байтПопробуй это
Объяснение:
Тест:
источник
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Брахилог , 24 байта
Ожидает 2 числа в Input в виде списка, например
[91:123]
.объяснение
источник
APL,
2320 байтРаботает в NARS2000.
источник
MATL, 11 байт
Попробуйте онлайн!
Объяснение:
источник
Pyth, 11 байт
Попробуйте онлайн!
источник
s*M.P}FQ2
Japt, 10 байт
Попытайся
источник
CJam, 17 байт
Проверьте это здесь.
объяснение
В качестве альтернативы можно просто сложить произведения всех различных пар (в основном умножив квадрат суммы и удалив квадраты), но это на байт длиннее:
источник
PowerShell v2 +, 47 байт
Две вариации
В обоих случаях мы генерируем диапазон с помощью
..
оператора, передавая его в цикл|%{...}
. Каждая итерация, мы накапливая$o
и$p
либо как сумма или сумма-квадратов. Затем мы вычисляем квадрат сумм с$o*$o
и вычитаем$p
. Вывод остается на конвейере и печать неявная.источник
JavaScript (ES6), 67 байт
Тестирование
источник
J, 29 байт
Порт желе дверной ручки ответ .
использование
Где
>>
STDIN,<<
это STDOUT, иx
для повышенной точности.источник
Пайк, 11 байт
Попробуй это здесь!
источник
Юлия, 25 байт
Это функция, которая принимает два целых числа и возвращает массив целых чисел 1x1.
Подход прост: создайте a
UnitRange
из конечных точекa
иb
назовите егоx
, затем суммируйтеx
, возведите в квадрат и вычтите его норму, которая вычисляется какtranspose(x) * x
.Попробуйте онлайн! (включает все тестовые случаи)
источник
a\b=-(x=a:b)'x+sum(x)^2
сохраняет несколько байтов.TI-BASIC, 19 байтов
randIntNoRep
получает диапазон (тасуется). Остальное довольно понятно.источник
Fith , 52 байта
Это анонимная функция, которая берет два числа в стеке и оставляет одно число.
Объяснение:
источник
GeoGebra, 91 байт
Определяет функцию (возможно
e(x,y)
), которая вычисляет желаемую разницу.a(x)
вычисляет сумму натуральных чисел между0
иx
.b(x)
вычисляет сумму квадратов натуральных чисел между0
иx
.c(x,y)
сначала вычисляется сумма натуральных чисел междуx
иy
, затем возводится в квадрат этой суммы.d(x,y)
вычисляет сумму квадратов междуb(x)
иb(y)
.Последняя строка определяет функцию с несколькими переменными, которая завершает расчет. Функция автоматически присваивает имя, сохраняя несколько байтов.
источник
e(x,y)=
дать ему имя, но, чтобы сохранить байты, мы не здесь. GeoGebra автоматически присваивает выражению имя (возможно, e, поскольку это следующая доступная буква). Сейчас у меня нет доступной среды, но я бы не использовал панель CAS. Панель алгебры и строка ввода должны работать правильно. (Прошло довольно много времени с тех пор, как я использовал GGb в сети; мой психологический образ может устареть.)