Вступление
Пятиугольный номер ( A000326 ) генерируется по формуле P п = 0,5 × (3n 2 -n) . Или вы можете просто посчитать количество используемых точек:
Вы можете использовать формулу или рисунок выше, чтобы найти первые несколько пятиугольных чисел:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
Далее нам нужно вычислить сумму х последовательных чисел.
Например, если x = 4 , нам нужно взглянуть на P n + P n + 1 + P n + 2 + P n + 3 (который состоит из 4 членов). Если сумма пятиугольных чисел также является пятиугольной, мы будем называть ее пятиугольной .
При х = 4 , наименьшее количество пятиугольной пятиугольник 330
, который сделан из 4 -х последовательных пятиугольной чисел: 51, 70, 92, 117
. Итак, когда ввод есть 4
, ваша программа функции должна выводить 330
.
задача
- Если задано целое число больше 1, выведите наименьшее пятиугольное число пятиугольника.
- Вы можете предоставить функцию или программу.
- Примечание: нет решений, например, для x = 3 . Это означает, что если число не может быть составлено из первых 10000 пятиугольных чисел, вы должны прекратить вычислять и выводить то, что подходит вам лучше всего.
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Тестовые случаи:
Input: 2
Output: 1926 (which comes from 925, 1001)
Input: 3
Output: ?
Input: 4
Output: 330 (which comes from 51, 70, 92, 117)
Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)
Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)
Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)
Input: 8
Output: ?
Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)
Input: 10
Output: ?
Также можно указать большее число:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
, что нет решений?9919
->496458299155
Ответы:
CJam, 29 байт
Попробуйте онлайн.
Занимает пару секунд, чтобы бежать.
объяснение
Во-первых, нам нужно проверить, сколько пятиугольных чисел нам нужно считать потенциальными суммами. Сумма первых 10000 пятиугольных чисел равна
500050000000
. Первое пятиугольное число больше 577,380.Я использовал слегка модифицированную программу, чтобы найти самые большие входные данные, которые дают непустое решение. Это все решения для входов более 9000:
источник
Луа, 142 байта
Ungolfed
Yay для переворачивания таблиц!
Обновление 142 байта: сохранено 10 байтов путем удаления лишнего вызова функции tonumber.
источник
Haskell, 109 байт
Возвращает,
0
если нет пятиугольного номера пятиугольника.Пример использования (требуется некоторое время, чтобы закончить):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.Это более или менее прямая реализация определения: если сумма первого
x
элементов находится в списке, выведите ее, иначе повторите попытку с хвостом списка. Начните с первых 10 000 пятиугольных чисел, остановитесь и вернитесь,0
если список содержит меньшеx
элементов.источник
PARI / GP, 71 байт
Мне нравится
ispolygonal
функция в PARI / GP.источник
Python 3, 144 байта
Это переворачивает определение пятиугольного числа; если P (n) = (3n ^ 2-n) / 2, то данный P будет пятиугольным числом, если (1 + sqrt (24 * P + 1)) / 6 - целое число. (Технически, он также должен смотреть на (1-sqrt (24 * P + 1)) / 6, но это всегда должно быть отрицательным.) Также использует пробелы и табуляции как два разных уровня отступа, как предложено здесь . Это ничего не выводит, если не может найти пятиугольное пятиугольное число; Я верю, что все в порядке?
Я твердо верю, что кто-то более умный, чем я, мог бы найти способ сократить это еще больше, вероятно, в рамках цикла for.
источник
LabVIEW, 39 примитивов LabVIEW
На этот раз не получится.
Математический узел в цикле создает массив всех чисел. Взять подмассив, добавить элементы, найти это число, если найден, взять индекс и остановить цикл.
Неверный ввод выводит наибольшее пятиугольное число.
источник
R,
114100 байтбезглазый (вроде)
источник
Желе , 30 байт
Этот код работает с этой версией Jelly и эквивалентен следующему двоичному коду:
Он очень медленный и требует много памяти для онлайн-переводчика, так как он проверяет первые 150 000 000 на пятиугольность (149 995 000 - это 10 000- е пятиугольное число).
Сокращая ассортимент до чего-то более разумного, вы можете попробовать это онлайн! для достаточно маленьких входов.
идея
Известный результат о пятиугольных числах состоит в том, что x является пятиугольным тогда и только тогда, когда sqrt (24x + 1) - 1 делится на 6 .
Вместо того, чтобы вычислять первые 10 000 пятиугольных чисел, мы определяем вспомогательную ссылку, которая удаляет непятиугольные числа из данного массива. Почему? Потому что в последней версии Jelly, предшествующей этой проблеме, нет нормального способа пересекать списки ...
Код
Желе, 21 байт (неконкурентный)
Последняя версия Jelly имеет две новые функции (перекрывающиеся фрагменты и фильтрацию / пересечение списков) и исправление ошибки, которая позволяет значительно уменьшить количество байтов.
Этот код отлично работает на моем настольном компьютере, но немного замедлится из-за ограничения времени TIO. Для того, чтобы попробовать его в Интернете! (для достаточно маленьких входов), мы должны снова уменьшить начальный диапазон.
Как это устроено
источник
Mathematica 85 байт
выполняет быстрый поиск до P 10 4 .
источник
Аксиома, 157 байт
бездельник и результаты
Пояснение: мы можем найти, используя результат "а", см. ниже
[используйте 1 + sqrt (...), потому что n> 0]
Это означает, что если существует один n0 такой, что
чем
После этого мы должны доказать, что p (n0) = a, чтобы быть уверенным (потому что это не всегда так)
Но основной трюк будет делать сумму
только в начале, и найти следующую сумму элементов х, просто используя
и так далее для других сумм (используя выше в выражении a: = a + p (j + x) -p (j)). Это означает, что в цикле нет необходимости в сумме одного элемента x ...
источник
Python 2 ,
128124 байтаПопробуйте онлайн!
источник
Javascript 93 байта
источник