Die Eulersche Zahl A(n, m)
ist die Anzahl der Permutationen, [1, 2, ..., n]
bei denen genau m
Elemente größer als das vorherige Element sind. Diese werden auch als Aufstiege bezeichnet . Zum Beispiel, wenn n = 3
es 3 gibt! = 6 Permutationen von[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 ...
So werden die Ausgänge A(3, m)
für m
in [0, 1, 2, 3]
sein
A(3, 0) = 1
A(3, 1) = 4
A(3, 2) = 1
A(3, 3) = 0
Dies ist auch die OEIS-Sequenz A173018 .
Regeln
- Das ist Code-Golf, also gewinnt der kürzeste Code.
- Die Eingabe
n
ist eine nicht negative Ganzzahl undm
eine Ganzzahl im Bereich[0, 1, ..., n]
.
Testfälle
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
Wunsch jede unterstützen , aber ich fordere nur, dass sie für 0 <= m <= n mit 0 <= n gültig ist .Antworten:
Gelee , 8 Bytes
Probieren Sie es online! (dauert eine Weile) oder überprüfen Sie die kleineren Testfälle .
Wie es funktioniert
quelle
JavaScript (ES6),
504645 BytesBasierend auf der rekursiven Formel:
Testfälle
Code-Snippet anzeigen
quelle
MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
Betrachten wir als Beispiel Eingänge
n=3
,m=1
. Sie können ein%
Symbol platzieren, um den Code von diesem Punkt an zu kommentieren und so die Zwischenergebnisse zu sehen. Beispielsweise zeigt der Link den Stapel nach dem ersten Schritt.quelle
CJam (
21 bis19 Bytes - oder 18, wenn die Argumentreihenfolge frei ist)Dies ist ein anonymer Block (Funktion), der
n m
den Stack übernimmt . (Wenn es erlaubt ist,m n
den Stapel anzunehmen,\
kann der gespeichert werden). Es berechnet alle Permutationen und Filter, also die Online-Testsuite eher eingeschränkt sein muss.Vielen Dank an Martin für den Hinweis auf eine Annäherung an
filter-with-parameter
.Präparation
Beachten Sie, dass die Eulersche Zahlen symmetrisch sind:
E(n, m) = E(n, n-m)
ist also unerheblich, ob Sie Stürze oder Anstiege zählen.Effizient: 32 Bytes
Online-Testsuite .
Dies implementiert die Wiederholung für ganze Zeilen.
quelle
{e!f{2ew::>1b=}1e=}
. Oder nur zum Spaß:{e!f{2ew::>+:-}0e=}
1e=
in der ersten Lösung kann sein1b
.Python,
5556 BytesAlle Tests bei repl.it
Wendet die rekursive Formel auf OEIS an.
Beachten Sie, dass zu
+(m+1)*a(n-1,m)
Golf gespielt wird-~m*a(n-1,m)
.(Kann boolesche Werte zurückgeben, um
1
oder darzustellen0
. GibtTrue
wannn<0 and m<=0
oder zurückm<0
.)quelle
m<1 ? 1 : m==n ? 0 : formula
, äquivalent damit umzugehenm%n<1 ? (m<1) : formula
; oder alternativm<1 ? (n>=0) : formula
.Mathematica,
5956 BytesUnd hier ist eine 59-Byte-Version, die die Definition wörtlicher implementiert:
quelle
f[n_,m_]:=...
für 49?Sum[Binomial[#+1,k](#2+1-k)^#(-1)^k,{k,0,#2}]&
, um mehr Golf zu spielenPython, 53 Bytes
Rekursion von OEIS. Gibt einen Booleschen Wert aus,
True
als1
obn==k
.quelle
MATLAB / Octave, 40 Bytes
Dies ist ein Port meiner MATL-Antwort in Form einer anonymen Funktion. Nennen Sie es als
ans(7,4)
.Probieren Sie es bei Ideone .
quelle
GameMaker-Sprache, 62 Byte
Dies ist ein rekursives Skript,
A
das auf der @ Arnauld-Formel basiert.quelle
Perl, 98 Bytes
Basierend auf derselben Eigenschaft wie Arnauld's Antwort.
quelle
R, 72 Bytes
Rekursive Funktion nach der Logik von OEIS.
Diese Herausforderung erwies sich als ziemlich eng zwischen den verschiedenen Ansätzen, die ich ausprobiert habe. Wenn Sie zum Beispiel die Wikipedia-Formel verwenden und die Summe in einer Schleife durchlaufen, erhalten Sie 92 Bytes:
oder die vektorisierte Version für 87 Bytes:
und schließlich die Brute-Force-Lösung (103 Byte), die mithilfe des
permute
Pakets und der Funktion eine Matrix aller Permutationen generiertallPerms
. Dieser Ansatz funktioniert jedoch nur bis zun<8
.quelle
Schläger 141 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
Eigentlich ,
2119 BytesDiese Antwort verwendet einen Algorithmus ähnlich dem, den Dennis in seiner Gelee-Antwort verwendet . Die ursprüngliche Definition zählt,
<
während ich zähle>
. Dies endet am Ende als gleichwertig. Golfvorschläge sind willkommen.Probieren Sie es online!Ungolfing
quelle
Schnell 3 , 82
88Bytesfunc 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}
Genau die gleiche rekursive Formel in einer Sprache, die definitiv nicht für Golf geeignet ist
quelle
J, 28 Bytes
Verwendet die Formel
Verwendung
Erläuterung
quelle