Задний план
Для этой задачи «метапоследовательность» будет определяться как последовательность чисел, где будут увеличиваться не только сами числа, но также и приращение, и приращение будет увеличиваться при увеличении значения и т. Д.
Например, метапоследовательность уровня 3 будет начинаться как:
1 2 4 8 15 26 42 64 93 130 176
потому что:
1 2 3 4 5 6 7 8 9 >-|
↓+↑ = 7 | Increases by the amount above each time
1 2 4 7 11 16 22 29 37 46 >-| <-|
| Increases by the amount above each time
1 2 4 8 15 26 42 64 93 130 176 <-|
Вызов
Учитывая положительное целое число, выведите первые двадцать элементов метапоследовательности этого уровня.
Контрольные примеры
Вход: 3
Выход:[ 1, 2, 4, 8, 15, 26, 42, 64, 93, 130, 176, 232, 299, 378, 470, 576, 697, 834, 988, 1160 ]
Вход: 1
Выход:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
Вход: 5
Выход:[ 1, 2, 4, 8, 16, 32, 63, 120, 219, 382, 638, 1024, 1586, 2380, 3473, 4944, 6885, 9402, 12616, 16664 ]
Вход: 13
Выход:[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16383, 32752, 65399, 130238, 258096, 507624 ]
Как вы можете понять, первые элементы каждой последовательности уровня являются первыми степенями 2 ...
правила
- Применяются стандартные лазейки
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах
источник
0
, 2-й уровень для ввода1
и т. Д.)?Ответы:
Желе ,
87 байтПопробуйте онлайн!
Здесь используется понимание @ alephalpha, чтомета-последовательностьN( я ) = ∑к = 0N( яК) .
источник
Wolfram Language (Mathematica) , 34 байта
Попробуйте онлайн!
Метапоследовательность уровня является суммой первых элементов каждой строки треугольника Паскаля.N n + 1
источник
Haskell , 34 байта
Использует 0-индексированные входы (
f 4
возвращает уровень 5.)Haskell , 36 байт
Попробуйте онлайн! Использует 1-индексированные входы (
f 5
возвращает уровень 5.)объяснение
scanl (+) 1
это функция, которая принимает частичные суммы списка, начиная с (и предварительно)1
.Оказывается, что уровень - это просто эта функция, примененная раз к списку .N ( n - 1 ) [ 1 , 2 , 3 , … ]
(Или, что то же самое: раз в список всех.)N
Мы используем либо,1
init
либо[1..20-n]
для учета увеличения списка на каждое приложение.источник
[1..20-n]
не будет работать дляtake 20.(iterate(scanl(+)1)[1..]!!)
будет стоить только на байт больше, чтобы это исправить(iterate(init.scanl(+)1)[1..20]!!)
.Brain-Flak ,
8482 байтаПопробуйте онлайн!
аннотированный
Попробуйте онлайн!
источник
R , 36 байт
Попробуйте онлайн!
Спасибо @Giuseppe за предложение
outer
.Это основано на подходе @alephalpha, описанном
источник
Map
вместо внешнего?Python 2 ,
695855 байтСохраненные байты благодаря ovs и Джо Кинг ; Кроме того, теперь он работает и в Python 3.
Попробуйте онлайн!
Математика
Пустьа ( т , н ) будет термином Nт ч (с индексами 0) последовательности на уровне T . Небольшой анализ приводит к следующей формуле повторения:
Работая в обратном направлении, определимa ( 0 , n ) = 1 и a ( - 1 , n ) = 0 для всех N . Эти определения упростят наш базовый случай.
Код
Мы определяем функцию,- 1 должно вести себя как постоянная последовательность всех 0 -х гг.
m(t)
которая возвращает первые 20 элементов последовательности на уровнеt
. Еслиt
неотрицательный, мы используем рекурсивную формулу выше; еслиt
есть-1
, мы возвращаем пустой список. Пустой список работает как базовый случай, потому что результат каждого рекурсивного вызова нарезается ([:n]
), а затем суммируется. Нарезка пустого списка дает пустой список, а суммирование пустого списка дает0
. Это то результат , который мы хотим, так как ярусисточник
(t>=0)*range(20)
сохраняет байт, хотя, возможно, есть еще более короткое выражение.if~t
сохраняет еще два за @xnordzaima / APL REPL, 14 байтов
Попробуйте онлайн!
источник
1∘,
→1,
(≢↑(+\1∘,)⍣⎕)20⍴1
-s
флаг).-s
прочим (разве-s
это не флаг repl?)Пари / ГП , 39 байт
Попробуйте онлайн!
Пари / ГП , 40 байт
Попробуйте онлайн!
источник
Perl 6 ,
3432 байта-2 байта благодаря Джо Кингу
Попробуйте онлайн!
объяснение
источник
$^a
вместо$_
необходимого)$_
это не определено при вызове функции. Я предпочитаю решения, которые не зависят от состояния глобальных переменных.Python 3.8 (предварительная версия) , 62 байта
Попробуйте онлайн!
объяснение
источник
R (
6347 байт)Демо онлайн . При этом используется регуляризованная неполная бета-функция , которая дает кумулятивную функцию распределения бинома, и, следовательно, просто требуется немного масштабирования, чтобы получить частичные суммы строк треугольника Паскаля.
Октава (
6646 байт)Демо онлайн . Точно такая же концепция, но немного страшнее, потому что
betainc
, в отличие от Rpbeta
, требуется, чтобы второй и третий аргументы были больше нуля.Большое спасибо Джузеппе за помощь в векторизации, со значительной экономией.
источник
Рубин, 74 байта
a=->b{c=[1];d=0;b==1?c=(1..20).to_a: 19.times{c<<c[d]+(a[b-1])[d];d+=1};c}
Безголовая версия:
Довольно ресурсоемкий - онлайн-версия не может рассчитать 13-ую последовательность.
Попробуйте онлайн
источник
Wolfram Language (Mathematica) , 42 байта
Попробуйте онлайн!
источник
JavaScript (Node.js) , 58 байт
Попробуйте онлайн!
Это тривиально записать следующую рекурсивную формулу на основе описания в вопросег( т , я ) = { г( т , я - 1 ) + г( т - 1 , я - 1 )1еслия ⋅ т > 0еслия ⋅ т = 0 [ г( т , 0 ) … г( т , 19 ) ]
источник
05AB1E ,
119 байтов0 индексированные
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
.¥
!R ,
5949 байтПопробуйте онлайн!
Рекурсивно
Reduce
с+
,init=1
иaccumulation=TRUE
чтобы избежать необходимости подмножества. Спасибо Criminally Vulgar за предложение рекурсивного подхода!источник
outer
чемsapply
для 36 байтовcumsum
время я пытался заставить его работать, но этоReduce
так здорово. Приятно иметь возможность также убрать индекс на 1, не замечая этого в комментариях.JavaScript (ES6),
6867 байтПопробуйте онлайн!
JavaScript (ES6), 63 байта
Попробуйте онлайн!
источник
J , 24 байта
Попробуйте онлайн!
ПРИМЕЧАНИЕ: Оказывается, это перевод ответа APL от dzaima, хотя я на самом деле не заметил его до того, как написал это.
объяснение
источник
Рубин, 49 байтов
Рекурсивное определение: уровень 0 равен 0,
1,1,1,1...
а каждый последующий уровень равен 1, за которым следует последовательность, первыми отличиями которой являются предыдущий уровень. Досадно, что это дало бы мне 21 значение, если бы я не вырезал явно первые 20; кажется, должен быть способ сократить это, избегая этого.источник
Сетчатка , 59 байт
Заменить вход на 19
1
с (в унарном виде). (20-е значение равно 0, потому что оно всегда удаляется при первом прохождении цикла.)Повторите цикл исходного ввода количество раз.
Удалить последний элемент и префикс а
1
.Рассчитать накопленную сумму.
Преобразовать в десятичную.
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 120 байт
Попробуйте онлайн!
На основе формулы алефальфа.
источник
Ржавчина , 135 байт
использовал идею @alephalpha, как и несколько других. нет встроенного факториала, который занимал бы по крайней мере 36 байтов (плюс работа с негативами). нет встроенного выбора, еще 16 байтов. iterator-> объявленный векторный тип, 20 байтов .. и т. д. и т. д.
Разрушенный на play.rust-lang.org
источник
min
:fn t(m:i64)->Vec<i64>{let b=|n,k|(1..=k).fold(1,|a,j|a*(n-j+1)/j);(0..20).map(|i|(0..=m).fold(0,|a,x|a+b(i,x))).collect()}
(122 байта)fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold(0,|a,x|a+(1..=x).fold(1,|a,j|a*(i-j+1)/j))).collect()}
(104 байта). Что было бы неплохо, так это объединить две складки, но я не уверен, насколько лаконичны кортежи.fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold((0,1),|a,b|(a.0+a.1,a.1*(b-i)/!b)).0).collect()}
(98 байт)R (
6059 байт)Онлайн демо
Простая реализация наблюдения
из OEIS A008949 . Аргументами
Reduce
являются (очевидно) функция, массив для сопоставления, начальное значение, ложное значение (для сгибания слева, а не справа) и истинное значение для накопления промежуточных результатов в массиве.источник
К (ок) , 17 байт
-1 байт благодаря ngn (переключение с 0 на 1)
Попробуйте онлайн!
1-индексированных
K (ок) , 18 байт
Попробуйте онлайн!
0 индексированные
источник
1+!20
->20#1
Желе , 10 байт
Попробуйте онлайн!
0 индексированные.
источник
Perl 5, 48 байт
TIO
источник
Japt , 15 байт
0 индексированные; заменить
h
наp
для 1-индексированных.Попытайся
источник
CJam (20 байтов)
Демо онлайн . Это программа, которая принимает входные данные из stdin и печатает в stdout; за тот же счет анонимный блок (функция) может быть получен как
рассечение
Это применяет определение буквально:
источник