Получив целое число, выведите пять совершенных кубов, сумма которых равна этому целому числу. Обратите внимание, что кубы могут быть положительными, отрицательными или нулевыми. Например,
-10 == -64 - 64 + 64 + 27 + 27
поэтому для ввода -10
вы можете вывести [-64, -64, 64, 27, 27]
, хотя возможны и другие решения. Обратите внимание, что вы должны выводить кубы, а не кубы.
Решение всегда существует - вам может понравиться загадывать это для себя. Далее предполагается, что четырех кубиков достаточно.
-10
другого возможного решения может быть,-1000+4574296+4410944-4492125-4492125
например. И разрешено ли выводить--
или+-
вместо+
/-
соответственно (т.е.3 = 27+-27+-125--64--64
вместо3 = 27-27-135+64+64
)?--5
, я бы сказал, нет, в соответствии с обычными правилами вывода выражения .+
знаками, только цифры.-10 = -64 - 64 + 64 + 27 + 27
или-10 = -343 + 0 -8 +125 +216
Ответы:
Брахилог , 18 байт
Попробуйте онлайн!
объяснение
Мы в основном описываем проблему с дополнительным ограничением, согласно которому мы хотим, чтобы выходной список не увеличивался с точки зрения величин: это заставляет Brachylog правильно возвращать все возможные комбинации из 5 значений вместо бесконечного возврата по значению последнего элемент списка.
Нахождение разных решений
Добавив a
≜
, можно использовать этот предикат, чтобы найти все решения с растущими величинами: например, вот первые 10 решений для42
источник
Брахилог , 11 байт
Спасибо Fatalize за сохранение одного байта
Попробуйте онлайн!
Во-первых, необходимо
~+
, чтобы output (.
) суммировался с входом.l₅
снова ограничивает вывод, диктуя, что он должен иметь длину 5.≥₁
объявляет, что список должен быть в порядке убывания (я считаю, что это необходимо для остановки программы, входящей в бесконечный цикл)Мы явно унифицируем этот список с
.
выходной переменной, потому что наш следующий предикат «изменит» значения внутри списка. Затем мы берем кубический корень каждого значения в списке с помощью√₃ᵐ
. Поскольку Brachylog по своей сути основан на целых числах, это диктует, что все числа в списке являются числами куба.Наконец, мы используем,
∧
потому что есть неявное.
добавление в конце каждой строки. Поскольку мы не хотим.
объединяться со списком корней куба, мы объединили его ранее и используем,∧
чтобы остановить его объединение в конце.источник
Python 2 ,
585754 байтаПопробуйте онлайн!
источник
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
вы не можете использовать(n**3-n)
?Python 3 , 65 байт
Попробуйте онлайн!
Я имею в виду, явная формула даже здесь (хотя он абстрагировал конструкцию за экзистенциальной)
источник
k
и переписав уравнение. Попробуйте онлайн!Java 8,
17887737165 байт-6 байт благодаря @ OlivierGrégoire .
То же самое объяснение внизу, но с использованием базового уравнения вместо производного, которое я использовал ранее (благодаря ответу @LeakyNun 's Python 3 за неявный совет):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Попробуйте онлайн.
Старый 178 байт ответ:
Попробуйте онлайн.
Объяснение:
Я зацикливаюсь
k
от 0 и выше, пока не будет найдено решение. На каждой итерации он проверяет эти два уравнения:k
: n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3k
: n == n 3 - (k + 1) 3 - (k-1) 3 + k 3 + k 3Зачем?
Поскольку n - n 3 = n * (1-n) * (1 + n) и затем 6 | (nn 3 ) , его можно записать как n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
И поэтому n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 для некоторого k .
Источник.
источник
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(или 64 с использованием целых для менее точных результатов)Желе , 13 байт
Попробуйте онлайн!
Разберитесь с формулой самостоятельно. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Альтернатива 13 байт: попробуйте онлайн!
источник
‘c3µ³;;;C;~*3
следует сохранить байт, поскольку (n ^ 3-n) / 6 = C (n + 1, 3)Октава ,
474033 байтаПопробуйте онлайн!
Благодаря Джузеппе я спас 6 байтов, так как я забыл удалить некоторые старые скобки. Сохранение еще байтов путем изменения знаков благодаря rafa11111.
Использует формулу в связанном посте math.se :
Кажется, это будет длиннее, если я попытаюсь решить уравнение: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 относительно k , а не просто используя уравнение.
источник
Функции Minecraft (18w11a, 1.13 снимка), 813 байтов
Использует шесть функций:
a
б
с
d
е
е
"Принимает данные" из названной цели табло
n
, создайте ее с помощью/scoreboard objectives add n dummy
и затем установите ее, используя/scoreboard players set x n 5
. Затем вызовите функцию, используя/function a
Использует формулу из этого ответа math.se
источник
JavaScript (Node.js) ,
4845 байтПопробуйте онлайн!
источник
|0
?n**3-n
должен быть кратным 6 для целого числаn
.MATL , 21 байт
Это пробует все 5 наборов чисел из набора
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Так что это очень неэффективно.Попробуйте онлайн!
источник
Haskell ,
4342 байтаПросто популярный ответ, переведенный на Haskell. Спасибо @ rafa11111 за сохранение байта!
Попробуйте онлайн!
источник
k
назначении ...Шелуха , 12 байт
Попробуйте онлайн!
Пробует все возможные списки из 5 кубов и возвращает первый с правильной суммой.
объяснение
источник
C (gcc) ,
858175 байтовСохранено 4 байта, а затем 6 байтов благодаря переупорядочению назначений @ terracecat
Попробуйте онлайн!
источник
Фортран (GFortran) , 53 байта
Попробуйте онлайн!
Фортран переигрывает Питона? Что тут происходит?
источник
Python 3,
656160 байтИзменить: упал несколько ненужных пробелов.
Редактировать: благодаря умному переупорядочению rafa11111.
Вдохновленный этим .
Попробуйте онлайн!
источник
(N**3-N)
и[N,1-k,-1-k,k,k]
R ,
4038 байтИспользует формулу в связанном посте math.SE. До 2 байтов благодаря Джузеппе.
Попробуйте онлайн!
источник
APL (Dyalog Unicode) ,
3026 байтПопробуйте онлайн!
APL перевод ответа LeakyNun .
Спасибо Адаму за 4 байта за молчание.
Как?
источник
Шелуха , 20 байт
Попробуйте онлайн!
Использует формулу из этого поста .
объяснение
источник
x86,
4139 байтПреимущественно простая реализация формулы с вводом
ecx
и выводом в стек.Интересно то, что я использовал функцию кубирования, но, поскольку
call label
это 5 байтов , я сохраняю адрес метки и использую 2 байтаcall reg
. Кроме того, так как я помещаю значения в свою функцию, я используюjmp
вместоret
. Вполне возможно, что, будучи умным с циклом и стеком, можно полностью избежать вызовов.Я не делал никаких причудливых трюков с кубиками, вроде использования
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Changelog:
Исправьте количество байтов, используя
not
вместоneg
/dec
.-2 байта, не
xor
IN,edx
поскольку это, вероятно, 0 изimul
.Objdump:
Вот моя тестовая версия, которая делает все кубы в конце. После того, как значения помещены в стек, цикл куба перезаписывает значения стека. В настоящее время это
4240 байт, но где-то должны быть некоторые улучшения.источник
Кубически 51 символ 55 байтов
Попробуйте онлайн!
Видимо MDXF забыл внедрить SBCS ...
источник
Unefunge 98 , 35 байт
Попробуйте онлайн!
Он использует популярную формулу из этого math.se ответа .
источник
Perl 5
-nE
, 48 байтХет-наконечник
источник
PowerShell Core , 52 байта
Попробуйте онлайн!
Использует уравнение
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, гдеk=o^3 - o
; это незначительный рефакторинг популярногоl=o-o^3
(сk=-l
).Как примечание стороны, выражение
l=o-o^3
похоже на кошку с больным ухом.источник
Рубин , 43 байта
Попробуйте онлайн!
источник