Liczba Eulera A(n, m)
jest liczbą permutacji, [1, 2, ..., n]
w których dokładnie m
elementy są większe niż poprzedni element. Są to również zwane wzrostami . Na przykład, jeśli n = 3
są 3! = 6 permutacji z[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 ...
Tak wyjść na A(3, m)
na m
w [0, 1, 2, 3]
będzie
A(3, 0) = 1
A(3, 1) = 4
A(3, 2) = 1
A(3, 3) = 0
Jest to również sekwencja OEIS A173018 .
Zasady
- To jest golf golfowy, więc wygrywa najkrótszy kod.
- Wejście
n
będzie nieujemną liczbą całkowitą im
będzie liczbą całkowitą z zakresu[0, 1, ..., n]
.
Przypadki testowe
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
razie potrzeby, ale wymagam tylko, aby było ważne dla 0 <= m <= n z 0 <= n .Odpowiedzi:
Galaretka , 8 bajtów
Wypróbuj online! (zajmuje to chwilę) lub sprawdź mniejsze przypadki testowe .
Jak to działa
źródło
JavaScript (ES6),
504645 bajtówNa podstawie rekurencyjnej formuły:
Przypadki testowe
Pokaż fragment kodu
źródło
MATL , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Rozważmy jako przykład wejść
n=3
,m=1
. Możesz umieścić%
symbol, aby skomentować kod od tego momentu i zobaczyć wyniki pośrednie. Na przykład link pokazuje stos po pierwszym kroku.źródło
CJam (
2119 bajtów - lub 18, jeśli porządek argumentów jest bezpłatny)Jest to anonimowy blok (funkcja), który przyjmuje
n m
stos. (Jeśli dozwolone jest wzięciem n
stosu,\
można go zapisać). Oblicza wszystkie permutacje i filtry, więc zestaw testów online musi być raczej ograniczony.Podziękowania dla Martina za wskazanie przybliżenia do
filter-with-parameter
.Sekcja
Zauważ, że liczby Eulera są symetryczne:
E(n, m) = E(n, n-m)
więc nie ma znaczenia, czy liczysz upadki, czy wzrosty.Wydajnie: 32 bajty
Zestaw testów online .
To implementuje powtarzalność w całych rzędach.
źródło
{e!f{2ew::>1b=}1e=}
. Lub dla zabawy:{e!f{2ew::>+:-}0e=}
1e=
W pierwszym roztworze może być1b
.Python,
5556 bajtówWszystkie testy w repl.it
Stosuje formułę rekurencyjną w OEIS.
Zauważ, że
+(m+1)*a(n-1,m)
gra w golfa-~m*a(n-1,m)
.(Może zwracać wartości boolowskie do reprezentowania
1
lub0
. ZwracaTrue
kiedyn<0 and m<=0
lubm<0
.)źródło
m<1 ? 1 : m==n ? 0 : formula
równorzędniem%n<1 ? (m<1) : formula
; lub alternatywniem<1 ? (n>=0) : formula
.Mathematica,
5956 bajtówA oto 59-bajtowa wersja implementująca definicję bardziej dosłownie:
źródło
f[n_,m_]:=...
za 49?Sum[Binomial[#+1,k](#2+1-k)^#(-1)^k,{k,0,#2}]&
, które mogą być możliwe do golfa więcejPython, 53 bajty
Rekursja z OEIS. Zwraca wartość logiczną
True
jak w1
momencien==k
.źródło
MATLAB / oktawa, 40 bajtów
Jest to część mojej odpowiedzi MATL w postaci anonimowej funkcji. Nazwij to jak
ans(7,4)
.Wypróbuj w Ideone .
źródło
GameMaker Language, 62 bajty
To jest skrypt rekurencyjny
A
oparty na formule @ Arnauld.źródło
Perl, 98 bajtów
Na podstawie tej samej właściwości, co odpowiedź Arnaulda.
źródło
R, 72 bajty
Funkcja rekurencyjna zgodnie z logiką OEIS.
To wyzwanie okazało się dość bliskie między różnymi podejściami, które wypróbowałem. Na przykład użycie formuły wikipedia i zapętlenie sumy dało 92 bajty:
lub wektoryzowana wersja dla 87 bajtów:
i wreszcie rozwiązanie brutalnej siły (103 bajty), które generuje macierz wszystkich permutacji przy użyciu
permute
pakietu i funkcjiallPerms
. Takie podejście działa jednak tylko don<8
.źródło
Rakieta 141 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło
faktycznie ,
2119 bajtówTa odpowiedź wykorzystuje algorytm podobny do tego, który Dennis stosuje w swojej odpowiedzi na żelki . Oryginalna definicja się liczy,
<
a ja liczę>
. To ostatecznie jest równoważne. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!Ungolfing
źródło
Szybki 3 , 82
88Bajtówfunc 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}
Po prostu ta sama rekurencyjna formuła w języku, który zdecydowanie nie jest dla golfa
źródło
J, 28 bajtów
Korzysta ze wzoru
Stosowanie
Wyjaśnienie
źródło