Это не очень широко известно, но то, что мы называем последовательностью Фибоначчи, АКА
1, 1, 2, 3, 5, 8, 13, 21, 34...
на самом деле называется последовательность Duonacci . Это потому, что для получения следующего числа вы суммируете предыдущие 2 числа. Существует также последовательность Трибоначи ,
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...
потому что следующее число является суммой предыдущих 3 чисел. И последовательность Quadronacci
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...
И все любимые, последовательность Пентаначи :
1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...
И последовательность Гексаначчи, последовательность Септаначчи, последовательность Октоначи и так далее, и так далее, вплоть до последовательности N-Боначи.
Последовательность N-Боначи всегда будет начинаться с N 1 с подряд.
Соревнование
Вы должны написать функцию или программу, которая принимает два числа N и X и печатает первые числа X N-Боначи. N будет целым числом больше 0, и вы можете смело предполагать, что числа N-Bonacci не превысят тип номера по умолчанию на вашем языке. Вывод может быть в любом удобочитаемом формате, и вы можете принять ввод любым разумным способом. (Аргументы командной строки, аргументы функций, STDIN и т. Д.)
Как обычно, это Code-golf, поэтому применяются стандартные лазейки и выигрывает самый короткий ответ в байтах!
Образец ввода-вывода
#n, x, output
3, 8 --> 1, 1, 1, 3, 5, 9, 17, 31
7, 13 --> 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
1, 20 --> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
30, 4 --> 1, 1, 1, 1 //Since the first 30 are all 1's
5, 11 --> 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
1, 1, 2, 4, 7
третьей позицией0 + 1 + 1
? ... и так один с другими?Ответы:
Boolfuck, 6 байтов
Тип номера по умолчанию в Boolfuck немного. Предполагая, что это также распространяется на входные числа N и X, и учитывая, что N> 0, есть только два возможных входа - 10 (который ничего не выводит) и 11 (который выводит 1).
,
читает немного в текущую ячейку памяти. N игнорируется, поскольку должно быть 1. Если X равно 0, тело цикла (окруженное[]
) пропускается. Если X равен 1, он выводится и затем переворачивается на 0, поэтому цикл не повторяется.источник
Python 2, 79 байт
Попробуйте онлайн
источник
exec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Пиф, 13
Тестирование
Вводит новую строку, разделенную
n
первым.Объяснение:
источник
Haskell, 56 байт
Пример использования:
3 # 8
->[1,1,1,3,5,9,17,31]
.Как это устроено
источник
tail l
вместоinit l
?n
элементы в списке. Нет разницы между удалением с конца и добавлением вперед и наоборот, то есть удалением с фронта и добавлением в конец, потому что первоначальный список состоит только из1
s.++[]
на:
!Python 2, 55 байт
Отслеживает длинное
n
окно последовательности в спискеl
, обновляемое путем добавления суммы и удаления первого элемента. Печатает первый элемент каждой итерации дляx
итераций.Другой подход хранения всех элементов и суммирования последних
n
значений дал одинаковую длину (55).источник
Javascript ES6 / ES2015,
107978580 байтСпасибо @ user81655, @Neil и @ETHproductions за сохранение некоторых байтов
попробуйте это онлайн
Тестовые случаи:
источник
for
всегда лучше, чемwhile
,x.split('')
->[...x]
,~~a
->+a
,n-=1
->n--
, если вы заключаете все тело функции в то, чтоeval
вам не нужно писатьreturn
. Кроме того, даже короче, чем[...'1'.repeat(i)]
есть,Array(i).fill(1)
и вы можете удалить~~
изa
иb
. И вы можете удалитьf=
.(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")
. Я изменил порядок операторов, объединилn--
вn-i
и удалилl
из аргументов, чтобы сохранить несколько дополнительных байтов.eval
экономию;(i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}
по-прежнему 85 байтов.l.slice(-i).reduce((a,b)=>a+b)
=>eval(l.slice(-i).join`+`)
ES6, 66 байт
К сожалению
map
, не позволит вам получить доступ к массиву результатов в обратном вызове.источник
Желе, 12 байт
Попробуйте онлайн!
Как это устроено
источник
C ++ 11, 360 байт
Привет, мне просто нравится этот вопрос. Я знаю, что с ++ - очень сложный язык для победы в этом конкурсе. Но я брошу ни копейки в любом случае.
Я оставлю это как понятное объяснение кода выше.
источник
int
s, удалитеint
. Если какие-либо функции вызываютсяfoo
, вызывайте ихf
. Быть жестоким; игнорировать стандарт и использовать компилятор. Вот как ты играешь в гольф.Haskell , 47 байтов
Попробуйте онлайн!
<$
возможно, был введен в Prelude после публикации этого вызова.Haskell , 53 байта
Попробуйте онлайн!
Определяет двоичную функцию
?
, используемую как3?8 == [1,1,1,3,5,9,17,31]
.Вспомогательная функция
%
рекурсивно находитi
элементn
последовательности -bonacci путем суммирования предыдущихn
значений. Затем функция?
табулирует первыеx
значения%
.источник
%
»?i<=n
вi>n
.APL, 21
Это функция, которая принимает n в качестве левого аргумента и x в качестве правого аргумента.
Объяснение:
Тестовые случаи:
источник
Python 3, 59
Сохранено 20 байтов благодаря FryAmTheEggman.
Не очень хорошее решение, но пока оно будет работать.
Также вот тестовые случаи:
источник
Java, 82 + 58 = 140 байт
Функция для нахождения i- го числа n -bonacci ( 82 байта ):
Функция для вывода первого числа k n -bonacci ( 58 байт ):
источник
Brain-Flak ,
144124122 байта-20 байт благодаря нитродену
Это мой первый ответ Brain-Flak, и я уверен, что его можно улучшить. Любая помощь приветствуется.
Попробуйте онлайн!
источник
Пари / ГП , 46 байт
Производящая функция последовательности:
Попробуйте онлайн!
источник
Юлия, 78 байт
Это функция, которая принимает два целых числа и возвращает массив целых чисел. Подход прост: генерируйте массив из единиц длины
n
, затем увеличивайте массив, добавляя сумму предыдущихn
элементов, пока массив не будет иметь длинуx
.Ungolfed:
источник
MATL , 22
26байтИспользуется текущий выпуск (10.2.1) языка / компилятора.
Попробуйте онлайн!
Несколько дополнительных байтов :-( из-за ошибки в
G
функции (вставьте ввод; теперь исправлено для следующего выпуска)объяснение
источник
Perl 6 , 38 байт
Использование:
источник
C, 132 байта
Рекурсивный подход короче на пару байтов.
Ungolfed
источник
Шелуха , 9 байт
Попробуйте онлайн!
Начинается с
B
ase-1
представления N (просто списка из N ) и¡
теоретически суммирует (Σ
) последний (↑_
) N элементов и добавляет результат в список. Наконец, берет (↑
) первые X чисел в этом списке и возвращает их.источник
Рубин , 41 байт
Попробуйте онлайн!
источник
R , 68 байт
Попробуйте онлайн!
источник
K (нгн / к) ,
2624 байтаПопробуйте онлайн!
источник
Perl 6,
52 ~ 7247 ~ 67 байтТребуется модуль
MONKEY-SEE-NO-EVAL
из-за следующей ошибки:источник
PHP , 78 байт
Попробуйте онлайн!
-4 байта, используя PHP> = 7.1
[,$n,$x]
вместоlist(,$n,$x)
источник
Jq 1,5 , 67 байт
Предполагается, что входные данные предоставлены N и X, например
расширенный
Попробуйте онлайн!
источник
J, 31 байт
Ungolfed:
объяснение
Веселые времена с глаголом силы в форме герунды :
Разбивка в деталях:
] {. ...
Возьмите первые<right arg>
элементы из всего этого материала справа, который делает работу ...<left> ^: <right>
Примените глагол<left>
несколько<right>
раз ... где<right>
указано средним герундием в(-@[
](1 #~ [)
, т.]
е. правый аргумент передан в саму функцию. Так что же<left>
? ...(] , [: +/ [ {. ])
Левый аргумент всей этой фразы сначала трансформируется первым герундом, т-@[
. Е. Это означает, что левый аргумент этой фразы является отрицательным аргументом левого аргумента для всей функции. Это необходимо для того, чтобы фраза[ {. ]
взяла последние элементы из списка возврата, который мы строим. Те тогда суммируются+/
. И, наконец, добавляется в тот же список возврата] ,
.(1 #~ [)
- повторить 1 раз «левый аргумент».Попробуйте онлайн!
источник
Mathematica, 59 байт
Возможно, вы захотите
Clear@f
между вызовами функций. Аргументыn,x
, как и в случае с тестами.источник
Приборка , 36 байт
Попробуйте онлайн!
объяснение
источник
Japt , 18 байт
Попробуйте онлайн!
Объяснение:
источник