Le nombre eulérien A(n, m)
est le nombre de permutations [1, 2, ..., n]
dont exactement les m
éléments sont supérieurs à l'élément précédent. Celles-ci sont également appelées hausses . Par exemple, si n = 3
, il y en a 3! = 6 permutations de[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 ...
Ainsi, les sorties pour A(3, m)
pour m
dans [0, 1, 2, 3]
seront
A(3, 0) = 1
A(3, 1) = 4
A(3, 2) = 1
A(3, 3) = 0
Il s'agit également de la séquence OEIS A173018 .
Règles
- C'est le code-golf donc le code le plus court l'emporte.
- L'entrée
n
sera un entier non négatif etm
sera un entier dans la plage[0, 1, ..., n]
.
Cas de test
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
si vous le souhaitez, mais je demande seulement qu'elle soit valide pour 0 <= m <= n avec 0 <= n .Réponses:
Gelée , 8 octets
Essayez-le en ligne! (prend un certain temps) ou vérifiez les cas de test plus petits .
Comment ça fonctionne
la source
JavaScript (ES6),
504645 octetsBasé sur la formule récursive:
Cas de test
Afficher l'extrait de code
la source
MATL , 10 octets
Essayez-le en ligne!
Explication
Prenons comme exemple les entrées
n=3
,m=1
. Vous pouvez placer un%
symbole pour commenter le code à partir de ce point et voir ainsi les résultats intermédiaires. Par exemple, le lien affiche la pile après la première étape.la source
CJam (
2119 octets - ou 18 si l'ordre des arguments est libre)Il s'agit d'un bloc (fonction) anonyme qui prend
n m
la pile. (S'il est permis de prendrem n
la pile, alors le\
peut être enregistré). Il calcule toutes les permutations et tous les filtres, donc la suite de tests en ligne doit être plutôt limitée.Merci à Martin d'avoir signalé une approximation de
filter-with-parameter
.Dissection
Notez que les nombres eulériens sont symétriques
E(n, m) = E(n, n-m)
:, il est donc sans importance que vous comptiez les chutes ou les hausses.Efficacement: 32 octets
Suite de tests en ligne .
Cela implémente la récurrence sur des lignes entières.
la source
{e!f{2ew::>1b=}1e=}
. Ou juste pour le plaisir:{e!f{2ew::>+:-}0e=}
1e=
première solution peut être1b
.Python,
5556 octetsTous les tests sur repl.it
Applique la formule récursive sur OEIS.
Notez que
+(m+1)*a(n-1,m)
c'est joué au golf-~m*a(n-1,m)
.(Peut renvoyer des valeurs booléennes pour représenter
1
ou0
. RenvoieTrue
quandn<0 and m<=0
oum<0
.)la source
m<1 ? 1 : m==n ? 0 : formula
, de manière équivalentem%n<1 ? (m<1) : formula
; ou alternativementm<1 ? (n>=0) : formula
.Mathematica,
5956 octetsEt voici une version de 59 octets implémentant la définition plus littéralement:
la source
f[n_,m_]:=...
pour 49?Sum[Binomial[#+1,k](#2+1-k)^#(-1)^k,{k,0,#2}]&
qui pourraient être possibles pour jouer au golf plusPython, 53 octets
Récursivité depuis OEIS. Sorties booléennes
True
comme1
quandn==k
.la source
MATLAB / Octave, 40 octets
Il s'agit d'un portage de ma réponse MATL, sous la forme d'une fonction anonyme. Appelez-le comme
ans(7,4)
.Essayez-le chez Ideone .
la source
GameMaker Language, 62 octets
Il s'agit d'un script récursif
A
basé sur la formule de @ Arnauld.la source
Perl, 98 octets
Basé sur la même propriété que la réponse d'Arnauld.
la source
R, 72 octets
Fonction récursive suivant la logique sur OEIS.
Ce défi s'est avéré assez proche entre les différentes approches que j'ai essayées. Par exemple, l'utilisation de la formule wikipedia et le bouclage sur la somme ont donné 92 octets:
ou la version vectorisée pour 87 octets:
et enfin la solution de force brute (103 octets) qui génère une matrice de toutes les permutations en utilisant le
permute
package et la fonctionallPerms
. Cette approche ne fonctionne cependantn<8
que.la source
Raquette 141 octets
Non golfé:
Essai:
Production:
la source
En fait ,
2119 octetsCette réponse utilise un algorithme similaire à celui utilisé par Dennis dans sa réponse Jelly . La définition originale compte
<
pendant que je compte>
. Cela finit par être équivalent au final. Suggestions de golf bienvenues. Essayez-le en ligne!Ungolfing
la source
Swift 3 , 82
88Octetsfunc 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}
Juste la même formule récursive dans une langue qui n'est certainement pas pour le golf
la source
J, 28 octets
Utilise la formule
Usage
Explication
la source