Взято из: OEIS- A071816
Ваша задача, учитывая верхнюю границу n
, состоит в том, чтобы найти число решений, которые удовлетворяют уравнению:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
Последовательность начинается, как описано на странице OEIS, и как показано ниже (1-индексированный):
1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756
Ведь n = 1
есть только одно решение:(0,0,0,0,0,0)
Для n = 2
, есть 20 заказанных решений (a,b,c,x,y,z)
для a+b+c = x+y+z
:
(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1),
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0),
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1),
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).
I & O
- Ввод - одно целое число, обозначающее
n
. - Выход - одно целое число / строка, обозначающая
f(n)
, гдеf(...)
указанная выше функция. - Индексация в точности соответствует описанию, никакая другая индексация неприемлема.
Это код-гольф , побеждает наименьшее количество байтов.
Ответы:
Желе ,
96 байтO (n 6 ) решение.
Попробуйте онлайн!
Как это работает
источник
O(n^6)
хоть: P.Mathematica 17 или 76 байт
Используя формулу:
(Сохранено 3 байта на @GregMartin и @ngenisis)
Вместо того, чтобы использовать формулу, здесь я буквально вычисляю все решения и считаю их.
источник
11/20
на.55
двухбайтовую экономию.Haskell , 48 байтов
Я не заметил формулу до того, как написал это, так что это определенно не самый короткий (или самый быстрый) общий метод, но я подумал, что он хорош.
Попробуйте онлайн!
f n
генерирует все списки 6 элементов из[1..n]
, а затем подсчитывает те , у которых чередующиеся сумма 0. использует тот факт , чтоa+b+c==d+e+f
так же , какa-(d-(b-(e-(c-f))))==0
, и что это не имеет значения , если мы добавим 1 ко всем номерам.источник
MATL , 12 байт
Попробуйте онлайн!
объяснение
Я не мог упустить шанс снова использовать свертку!
Это использует следующую характеристику от OEIS:
и, конечно, полиномиальное умножение является сверткой.
источник
Желе , 9 байт
Не такой короткий, как у @ Dennis's, но он заканчивается менее чем за 20 секунд для ввода
100
.Попробуйте онлайн!
Как это работает
источник
Pyth,
1312 байтСохраненный один байт благодаря Leaky Nun.
объяснение
источник
/LJJ
вместоm/JdJ
.Python 3 , 28 байт
Попробуйте онлайн!
источник
TI-BASIC, 19 байтов
Оценивает формулу OEIS.
источник
Prompt x
= 2 байта?Оазис , 17 байт
Попробуйте онлайн!
Oasis - это стековый язык, оптимизированный для повторяющихся последовательностей. Однако формула рекурсии была бы слишком длинной для этого случая.
источник
Брахилог , 17 байт
Попробуйте онлайн!
объяснение
источник
ᶜ
должен автоматически прийти с≜
ᶜ
самостоятельно, это метапредикат.JavaScript, 24 байта
Использует формулу со страницы OEIS.
Попробуйте онлайн!
источник
x=>x**5*.55+x**3/4+x/5
Октава ,
252321 байтПопробуйте онлайн!
Использует формулу из OEIS-записи. Сохраненные
двачетыре байта, перестраивая формулу и используя.55
вместо11/20
, благодаря fənɛtɪk.источник
Python 2.7,
1091059996 байтСпасибо ETHproductions и Деннису за сохранение нескольких байтов:
источник
sum(sum(x[:3])==sum(x[3:])for x ...)
будет еще короче. Такжеfrom itertools import*
сохраняет байт.for
. Кроме того, мы не требуем, чтобы функции назывались по умолчанию, поэтому вы можете удалить ихh=
.Mathematica, 52 байта
Реализация формулы OEIS Келли Лоудером намного короче, но это вычисляет числа напрямую:
Ну, это фактически подсчитывает количество решений с
1 <= a,b,c,x,y,z <= n
. Это то же самое число, так как добавление 1 ко всем переменным не меняет равенства.Объяснение:
Range@#~Tuples~6
делает все списки из шести целых чисел от 1 до n,#~Partition~3&/@
разбивает каждый список на два списка длиной 3,Tr/@
суммирует эти подсписки иCount[...,{n_,n_}]
подсчитывает, сколько пар имеют одинаковую сумму. Мне очень повезло с порядком старшинства междуf @
,f /@
и~f~
!источник
Октава , 41 байт
Попробуйте онлайн!
Аналогично моему ответу на MATL , но вычисляет свертку с помощью дискретного преобразования Фурье (
fft
) с достаточным количеством точек (n^2
).~~(1:n)
используется в качестве более короткой версииones(1,n)
.round
необходимо из-за ошибок с плавающей точкой.источник
CJam , 17 байт
Ввод
11
тайм-аутов на TIO,12
и выше нехватка памяти.Попробуйте онлайн!
объяснение
источник
Clojure, 79 байт
Тонны повторения в коде, при большем числе переменных макрос может быть короче.
источник