задача
Ваша задача - построить структуру из кубов. Объем кубов следует следующей последовательности (внизу -> вверху)
вход
Общий объем конструкции ( ).
выход
значение ( ), т. е .: общее количество кубов.
Примечания
- Ввод всегда будет целым числом.
- Иногда невозможно следовать последовательности, то есть: не представляет определенного значения для . В этом случае верните -1 или неверное значение по вашему выбору (однако требуется последовательность).
- Это код-гольф, поэтому выигрывает самый короткий ответ в байтах для каждого языка.
- Ни один ответ не будет помечен как принятый по вышеуказанной причине.
Запросы
- Это мой первый вызов на сайте, так что потерпите меня и простите (и расскажите мне) о любых ошибках, которые я допустил.
- Пожалуйста, предоставьте ссылку, чтобы ваш код можно было проверить.
- Если можете, напишите объяснение того, как работает ваш код, чтобы другие могли понять и оценить вашу работу.
Примеры
input : 4183059834009
output : 2022
input : 2391239120391902
output : -1
input : 40539911473216
output : 3568
Спасибо @Arnauld за ссылку на это:
Разве это не мило?
Ссылка на оригинал: Ссылка
4183059834009
дает вывод2022
?Ответы:
JavaScript (ES7), 31 байт
Прямая формула. Возвращает,
0
если нет решения.Попробуйте онлайн!
Как?
Сумма первых кубов определяется как: nSN N
(Это A000537 . Эту формулу можно легко доказать по индукции. Вот хорошее графическое представление .)S5
Наоборот, если - сумма первых кубов, следующее уравнение допускает положительное целочисленное решение:Xv Икс
Поскольку положительно, это приводит к:( х2+ х ) / 2
Чье положительное решение дает:
Если является целым числом, оно гарантированно будет нечетным, поскольку сама нечетна. Следовательно, решение может быть выражено как: Δr = Δ--√ Δ
комментарии
Рекурсивная версия,
3635 байтВозвращает,
NaN
если нет решения.Попробуйте онлайн!
комментарии
источник
05AB1E , 6 байтов
Попробуйте онлайн!
Порт Джонатана желе ответ. Возьмите накопленную сумму из [0 ... п] , квадрат каждого и найти индекс V .
05AB1E , 7 байтов
Попробуйте онлайн!
Как это устроено
8-байтовое альтернатива:
ÝÝÅΔ3mOQ
.источник
3mO
иnO
работают ... Вероятно, также упомянуть -1 является ложным значением.R ,
4240 байт-2 байта благодаря Джузеппе
Попробуйте онлайн!
Порт Арнаулда JavaScript ответ . Также возвращает 0, если нет решения.
источник
Желе ,
54 байтаМонадическая ссылка, дает,
0
если не возможно.Попробуйте онлайн! слишком неэффективно для тестовых случаев! (O (V) пробел: p)
Вот 8-байтовая версия, которая сначала выполняет корень куба из V, чтобы сделать его O (V ^ (1/3)). Используя эту 8-байтовую версию здесь тестовый набор
Как?
источник
36
IJi
ведет себя как²⁼
(Ị
другими словами).Эликсир , 53 байта
Попробуйте онлайн!
Порт Джонатана желе ответ.
Эликсир , 74 байта
Попробуйте онлайн!
Определенно неоптимальный. Но я новичок в эликсире! :) Возвращает
nil
для "недопустимых" значенийV
.источник
Japt, 7 байт
Попытайся
объяснение
альтернатива
Попытайся
источник
Cubix , 27 байтов (или том 27?)
Похоже, правильное место для этого языка.
Попробуйте онлайн!
Это оборачивается на куб 3x3x3 следующим образом
Смотреть это беги
Это существенно грубые силы, убирая увеличивающиеся кубы от входа. Если это приводит к нулю, выведите в
n
противном случае, если есть отрицательный результат, выведите 0 и выйдите.источник
Perl 6 ,
302926 байт-4 байта благодаря Джо Кингу
Попробуйте онлайн!
Решение методом грубой силы при n <10000. Используется уравнение из ответа Джонатана Аллана.
3736-байтовое решение для большего n ( -1 байт благодаря Джо Кингу ):Попробуйте онлайн!
Возвращает,
False
если нет решения.объяснение
источник
0..$_
чтобы быть действительным для всех чисел, даже если оно будет превышать время для больших. Для нормального игры в гольф вы можете убрать.
первый и заменить второй0>=*
на1>*
JavaScript (Node.js) , 28 байт
Попробуйте онлайн!
Я знаю, что это мой собственный вопрос и все, но у меня был лучший ответ (для этого языка), тогда присутствует, поэтому я отправил. Надеюсь это нормально
источник
APL (Dyalog) , 18 байт
Попробуйте онлайн!
источник
Matlab, 27 байт
Возвращает
n
if существует или пустую матрицу, если нет.Как это устроено
Попробуйте онлайн!
Примечание. В большинстве случаев происходит сбой
v
из-за ограничений памяти.источник
Python 3 , 60 байт
Попробуйте онлайн!
-6 спасибо мистеру Xcoder .
Попробуйте онлайн!
источник
Perl 6 , 33 байта
Попробуйте онлайн!
Это использует метод Арно . Возвращает пустой объект, если номер недействителен.
источник
постоянный ток , 19 байт
Вход и выход из стека, возвращает 0, если нет решения.
Попробуйте онлайн!
объяснение
Если есть решение n, входной сигнал
((n^2+n)^2)/4
. Таким образом, мы рассчитаем пробное решение какn=sqrt(sqrt(4*input))
, используя стандартную точность 0 для десятичных знаков по умолчанию для dc, а затем сравним ее(n^2+n)^2
с тем,4*input
чтобы увидеть, действительно ли это решение.Предпоследняя строка опирается на неочевидный факт, что для dc
0^x=0
для всех ненулевыхx
(даже отрицательныхx
!) Но0^0=1
.источник
Python 3 ,
5348 байтПопробуйте онлайн!
-3 байта от Джо Кинга
Возвращает
-1
без ответа.Работает только до
n=997
пределов рекурсии по умолчанию.Повторно берет все большие и большие кубы из тома, пока не достигнет нуля (успех, возвращенное количество удаленных кубов) или отрицательного числа (без ответа).
Объяснение:
источник
and/or
или списки обычно корочеif/else
. 50 байтовnot V
=>V==0
илиV>-1
байт-код gvm (commit 2612106 ),
7059 байт(-11 байт путем умножения в цикле вместо написания кода для умножения в два раза)
HexDump:
Тестовые прогоны:
Не совсем низкая оценка, просто используйте этот хороший вопрос для тестирования
gvm
здесь;) Коммит старше, чем вопрос, конечно. Обратите внимание, что это 8-битная виртуальная машина, поэтому при использовании некоторого кода, обрабатывающего только диапазон натуральных чисел без знака0-255
, приведенные в этом вопросе тесты не будут работать.Вручную собран из этого:
редактировать : я только что исправил ошибку в
gvm
; без этого исправленияgvm
пытался читать двоичные программы в текстовом режиме , что может привести к сбою (приведенный выше код не содержит0xd
байтов, поэтому не будет разбиваться на окнах без этого исправления).источник
K (ок) , 21 байт
Попробуйте онлайн!
Порт Арнаулда JS ответ .
Как:
функция вернет
(_r%2)
iff1!r == 0
, иначе вернет null (0N
). Это происходит из-за того, что единственный элемент в списке имеет индекс 0, и попытка индексировать этот список любым числом, отличным от 0, вернет ноль.источник