Эйлерово число A(n, m)
есть число перестановок , [1, 2, ..., n]
в которых ровно m
элементах больше , чем предыдущий элемент. Они также называются подъемами . Например, если n = 3
есть 3! = 6 перестановок[1, 2, 3]
1 2 3
< < 2 elements are greater than the previous
1 3 2
< > 1 ...
2 1 3
> < 1 ...
2 3 1
< > 1 ...
3 1 2
> < 1 ...
3 2 1
> > 0 ...
Таким образом, выходы A(3, m)
для m
в [0, 1, 2, 3]
будут
A(3, 0) = 1
A(3, 1) = 4
A(3, 2) = 1
A(3, 3) = 0
Также это последовательность OEIS A173018 .
правила
- Это код-гольф, поэтому выигрывает самый короткий код.
- Входные данные
n
будут неотрицательным целым числом иm
будут целым числом в диапазоне[0, 1, ..., n]
.
Тестовые случаи
n m A(n, m)
0 0 1
1 0 1
1 1 0
2 0 1
2 1 1
2 2 0
3 0 1
3 1 4
3 2 1
3 3 0
4 0 1
4 1 11
4 2 11
4 3 1
4 4 0
5 1 26
7 4 1191
9 5 88234
10 5 1310354
10 7 47840
10 10 0
12 2 478271
15 6 311387598411
17 1 131054
20 16 1026509354985
42 42 0
n, m
?n = 10
.m
если это необходимо, но я требую, чтобы оно действовало только для 0 <= m <= n с 0 <= n .Ответы:
Желе , 8 байт
Попробуйте онлайн! (занимает некоторое время) или проверьте меньшие контрольные примеры .
Как это устроено
источник
JavaScript (ES6),
504645 байтНа основе рекурсивной формулы:
Контрольные примеры
Показать фрагмент кода
источник
MATL , 10 байт
Попробуйте онлайн!
объяснение
Рассмотрим в качестве примера входов
n=3
,m=1
. Вы можете поместить%
символ, чтобы закомментировать код с этого момента и, таким образом, увидеть промежуточные результаты. Например, ссылка показывает стек после первого шага.источник
CJam (
2119 байт - или 18, если порядок аргументов свободен)Это анонимный блок (функция), который принимает
n m
стек. (Если разрешено братьm n
в стек, то\
можно сохранить). Он вычисляет все перестановки и фильтры, поэтому набор онлайн-тестов должен быть довольно ограниченным.Спасибо Мартину за указание на приближение к
filter-with-parameter
.рассечение
Обратите внимание, что эйлеровы числа симметричны:
E(n, m) = E(n, n-m)
поэтому не имеет значения, уменьшается ли число или увеличивается.Эффективно: 32 байта
Набор онлайн-тестов .
Это реализует повторение на целых строках.
источник
{e!f{2ew::>1b=}1e=}
. Или просто для удовольствия:{e!f{2ew::>+:-}0e=}
1e=
первом решении может быть1b
.Python,
5556 байтВсе тесты на repl.it
Применяет рекурсивную формулу к OEIS.
Обратите внимание, что
+(m+1)*a(n-1,m)
это гольф-~m*a(n-1,m)
.(Может возвращать логические значения для представления
1
или0
. Возвращается,True
когдаn<0 and m<=0
илиm<0
.)источник
m<1 ? 1 : m==n ? 0 : formula
эквивалентноm%n<1 ? (m<1) : formula
; или альтернативноm<1 ? (n>=0) : formula
.Mathematica,
5956 байтИ вот 59-байтовая версия, реализующая это определение более буквально:
источник
f[n_,m_]:=...
за 49?Sum[Binomial[#+1,k](#2+1-k)^#(-1)^k,{k,0,#2}]&
которые могут быть возможны для игры в гольфPython, 53 байта
Рекурсия из OEIS. Выходы логические
True
как и1
когдаn==k
.источник
MATLAB / Octave, 40 байт
Это порт моего ответа MATL в форме анонимной функции. Назовите это как
ans(7,4)
.Попробуйте это в Ideone .
источник
Язык GameMaker, 62 байта
Это рекурсивный скрипт,
A
основанный на формуле @ Арно.источник
Perl, 98 байт
На основании того же свойства, что и ответ Арно.
источник
R, 72 байта
Рекурсивная функция, следующая за логикой в OEIS.
Эта проблема оказалась довольно близкой между различными подходами, которые я пробовал. Например, при использовании формулы Википедии и циклическом пересчете суммы получается 92 байта:
или векторизованная версия для 87 байтов:
и, наконец, решение методом грубой силы (103 байта), которое генерирует матрицу всех перестановок с использованием
permute
пакета и функцииallPerms
. Этот подход работает только до техn<8
пор, пока.источник
Ракетка 141 байт
Ungolfed:
Тестирование:
Выход:
источник
На самом деле ,
2119 байтовЭтот ответ использует алгоритм, аналогичный тому, который Деннис использует в своем ответе на желе . Исходное определение имеет значение,
<
пока я считаю>
. Это в конечном итоге эквивалентно. Предложения по игре в гольф приветствуются. Попробуйте онлайн!Ungolfing
источник
Свифт 3 , 82
88Бfunc A(_ n:Int,_ m:Int)->Int{return m<1 ?1:n>m ?(n-m)*A(n-1,m-1)+(m+1)*A(n-1,m):0}
Точно такая же рекурсивная формула на языке, который определенно не для гольфа
источник
J, 28 байт
Использует формулу
использование
объяснение
источник