Вызов
Напишите функцию / программу, которая выводит либо n
й-й элемент, либо первые n
элементы в хорошо известной числовой последовательности:
1, 2, 4, 8, 16 ...
Ой, подождите ... Я забыл первые несколько цифр:
1, 1, 1, 1, 2, 4, 8, 16 ...
Черт возьми, я добавлю еще несколько для хорошей меры:
1, 1, 1, 1, 2, 4, 8, 16, 33, 69, 146, 312, 673, 1463, 3202, 7050, 15605, 34705 ...
Числа являются обобщенными каталонскими числами, заданными формулой (с нулевым индексом):
где
Это OEIS A004149 .
Вы можете выбрать, хотите ли вы иметь последовательность с нулевым или единичным индексированием. Последовательность, конечно, должна быть одинаковой, поэтому вы должны переписать формулу, если она у вас одноиндексная.
a(n-1-k)
наa(n-k)
, правильно?Ответы:
Python , 51 байт
Попробуйте онлайн!
Немного упрощает формулу:
источник
Perl 6 , 44 байта
Попробуйте онлайн!
Блок анонимного кода, который возвращает ленивую бесконечную последовательность значений. Это в значительной степени реализует последовательность, как описано, с быстрым сокращением, что это zip умножает все элементы до второго элемента после обратного списка, начиная с четвертого элемента и добавляя дополнительный
1
в конце.Объяснение:
источник
05AB1E ,
141311 байтПопробуйте онлайн!
Выводит n-й элемент, 0-индексированный.
источник
JavaScript (ES6), 42 байта
Порт решения xnor .
0 индексированные.
Попробуйте онлайн!
JavaScript (ES6),
8375 байтБолее быстрое, менее рекурсивное, но значительно более длинное решение.
0 индексированные.
Попробуйте онлайн!
источник
Haskell,
494339 байтПопробуйте онлайн!
Для является 0, так
n<3
sum
max ... 1
что поднимает его1
.Изменить: -6 байт благодаря @Jo King.
источник
Wolfram Language (Mathematica) , 36 байт
Попробуйте онлайн!
1-индексироваться.
2-индексированный последовательность 4 байта короче:
Sum[#0@i#0[#-i],{i,#-4}]/. 0->1&
. Попробуйте онлайн!источник
CatalanNumber
!05AB1E ,
1713 байтНе короче, чем существующий ответ 05AB1E , но я хотел попробовать рекурсивную функциональность новой версии 05AB1E для себя.
Может быть, игра в гольф на несколько байтов.РЕДАКТИРОВАТЬ: И это действительно может, увидеть рекурсивную версию ответа @Grimy 's 05AB1E ниже, который составляет 13 байтов .£
è
£
.Объяснение:
13 байт версии @Grimy (убедитесь , что upvote своего ответа , если у вас еще нет!):
1λèλ1šÂ¨¨¨øPO
λλ1šÂ¨¨¨øPO
Объяснение:
источник
n=100
за 0,65 секунды , но когда я отключаю ленивую загрузку, вместо 60 секунд, даже дляn=25
.Python 3 , 59 байт
действительно неэффективно,
a(13)
не заканчивается на TIO.Попробуйте онлайн!
источник
Желе , 17 байт
Попробуйте онлайн!
источник
Haskell , 76 байт
Попробуйте онлайн!
источник
APL (Dyalog Extended) , 34 байта SBCS
-2 благодаря дзайме.
Анонимный префикс лямбда.
Попробуйте онлайн!
источник
Japt ,
191716 байтВыводится
n
1-й член, 1-индексированный.Попытайся
источник
Haskell , 65 байт
Попробуйте онлайн!
Вы можете использовать либо
f
для получения одного элемента последовательности, либо передать список значенийg
и получить все индексы для этого списка.источник
Forth (gforth) ,
9981 байтПопробуйте онлайн!
Вывод n-й член, а ввод 1-индексированный
Изменить: 17 байтов сохранены путем переключения на формулу Xnor. Сохранено еще 1 байт с помощью 1-индексированного
Код Объяснение
источник
Древесный уголь , 26 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Печатает 0-индексированное n-е число, хотя оно рассчитывается с использованием 1-индексации внутри. Объяснение:
Начните с
a[0] = a[1] = a[2] = a[3] = a[4] = 1
. Да, это 1-индексированный, но затем с дополнительным нулевым значением. Это код для вас.Рассчитайте дополнительные
n
условия. Это излишне, но облегчает поиск нужного терминаn<5
.Для каждого слагаемого вычислите следующий слагаемый как сумму слагаемых до настоящего времени, умноженных на обратное слагаемое до настоящего времени, за исключением трех слагаемых.
Это неоперация, используемая, чтобы обмануть Charcoal при разборе формы с двумя аргументами
Slice
, иначе мне пришлось бы использовать менее удачный способ удаления трех терминов.Выведите 4-й последний член.
источник
Pyth , 30 байт
Попробуйте онлайн!
Возвращает первоеN элементы последовательности.
Альтернатива: заменитьN -ый элемент последовательности, 0-индексированный.
<
на,@
чтобы вернутьисточник
Рубин ,
4241 байтПопробуйте онлайн!
1-индексированный (для сохранения 1 байта)
источник
Октава , 73 байта
Попробуйте онлайн!
-2 байта благодаря Стьюи Гриффину. И снова императивный подход побеждает функционально-рекурсивный подход. Это показано ниже.
Октава , 75 байт
Попробуйте онлайн!
Капча хотел проверить, что я был человеком, когда писал это. Если честно, я не уверен .
источник
n<4
.Perl 5
-MList::Util=sum
, 61 байтПопробуйте онлайн!
источник
C / C ++ ,
706967 байт-1 байт благодаря Джонатану.
Попробуйте онлайн!
источник
a(n-1-k)
бытьa(n+~k)
?a(++k)*a(n-k)
, вероятно, будет работать, и он падает еще на 2 байтаfor
. Но я чувствую запах неопределенного поведения.