Эта задача кода заставит вас вычислить количество способов достижения начиная с используя карты вида (с - неотрицательное целое число) и делая это за минимальное количество шагов.
(Обратите внимание, это относится к последовательности OEIS A307092 .)
пример
Так, например, потому что требуются три карты, и есть две отдельные последовательности из трех карт, которые отправят от до :
В результате или .
Пример значений
f(2) = 1 (via [])
f(3) = 1 (via [0])
f(4) = 1 (via [1])
f(5) = 1 (via [1,0])
f(12) = 2 (via [0,2] or [2,1])
f(13) = 2 (via [0,2,0] or [2,1,0], shown above)
f(19) = 1 (via [4,0])
f(20) = 2 (via [1,2] or [3,1])
f(226) = 3 (via [2,0,2,1,0,1], [3,2,0,0,0,1], or [2,3,0,0,0,0])
f(372) = 4 (via [3,0,1,0,1,1,0,1,1], [1,1,0,2,0,0,0,1,1], [0,2,0,2,0,0,0,0,1], or [2,1,0,2,0,0,0,0,1])
Вызов
Задача состоит в том, чтобы создать программу, которая принимает целое число в качестве входных данных и выводит количество различных путей от до через минимальное количество карт вида .
Это код-гольф , поэтому побеждает меньше байтов.
code-golf
sequence
combinatorics
Питер Кейджи
источник
источник
^
символ обозначает возведение в степень. Это может быть также XOR (например, C использует^
для побитового XOR).x -> x + x^j
Ответы:
Желе , 16 байт
Попробуйте онлайн!
Полная программа, принимающая в качестве аргументаN и возвращающая количество способов достижения N используя минимальную длину пути. Неэффективно для большего N .
источник
JavaScript (ES6),
111 ... 8480 байтВозвращает true, а не1 для п = 2 .
Попробуйте онлайн!
комментарии
источник
Haskell ,
7875 байтЭта реализация использует поиск по принципу «дыхание первым» в «дереве» итеративно всех необходимых отображений
x -> x + x^j
.Попробуйте онлайн!
объяснение
источник
05AB1E , 17 байт
Попробуйте онлайн!
источник
Python 2 , 72 байта
Попробуйте онлайн!
источник
Perl 5 (
-lp
), 79 байтTIO
источник
CJam (27 байт)
Онлайн демо
Предупреждение: это очень быстро загружает память.
Вскрытие:
Бонус
2
s (для обработки особого случая ввода2
, посколькуwhile
циклы дороже, чемdo-while
циклы) означает, что размер списка растет очень быстро, а использование показателей степени вплоть доn-1
означает, что значения больших чисел в списке растут очень быстро.источник
Haskell , 65 байт
Попробуйте онлайн!
Гольф недостаток в ширину первого поиска . Я также пытался вернуться назад
n
, но это было дольше:73 байта
Попробуйте онлайн!
источник
R ,
7877 байтПопробуйте онлайн!
Использование упрощенного поиска в ширину
Развернутый код с объяснением:
Укороченная версия с огромным распределением памяти (не подходит для больших случаев):
R ,
7069 байтПопробуйте онлайн!
-1 байт благодаря @RobinRyder
источник
!(a<-sum(x==n))
может быть!{a=sum(x==n)}
за -1 байт в обоих случаях.Pyth , 24 байта
Попробуйте онлайн!
Это должно привести к правильному выводу, но это очень медленно (372 тестовых случая истекло на TIO). Я мог бы сделать его короче, заменив
.lQ2
сQ
, но это будет сделать во время выполнения ужасающим.Примечание. Не выводит данные о недоступных номерах.( n ≤ 1 )
объяснение
источник