El número de Eulerian A(n, m)
es el número de permutaciones [1, 2, ..., n]
en las que exactamente los m
elementos son mayores que el elemento anterior. Estos también se llaman subidas . Por ejemplo, si n = 3
, hay 3! = 6 permutaciones 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 ...
Entonces las salidas para A(3, m)
para m
en [0, 1, 2, 3]
serán
A(3, 0) = 1
A(3, 1) = 4
A(3, 2) = 1
A(3, 3) = 0
Además, esta es la secuencia OEIS A173018 .
Reglas
- Este es el código de golf, por lo que gana el código más corto.
- La entrada
n
será un número entero no negativo ym
será un número entero en el rango[0, 1, ..., n]
.
Casos de prueba
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 lo desea, pero solo requiero que sea válida para 0 <= m <= n con 0 <= n .Respuestas:
Jalea , 8 bytes
Pruébalo en línea! (lleva un tiempo) o verifique los casos de prueba más pequeños .
Cómo funciona
fuente
JavaScript (ES6),
504645 bytesBasado en la fórmula recursiva:
Casos de prueba
Mostrar fragmento de código
fuente
MATL , 10 bytes
Pruébalo en línea!
Explicación
Considere como ejemplo las entradas
n=3
,m=1
. Puede colocar un%
símbolo para comentar el código desde ese punto en adelante y así ver los resultados intermedios. Por ejemplo, el enlace muestra la pila después del primer paso.fuente
CJam (
2119 bytes - o 18 si el orden de los argumentos es libre)Este es un bloque anónimo (función) que toma
n m
en la pila. (Si se permite tomarm n
la pila, entonces\
se puede guardar). Calcula todas las permutaciones y filtros, por lo que el conjunto de pruebas en línea debe ser bastante limitado.Gracias a Martin por señalar una aproximación a
filter-with-parameter
.Disección
Tenga en cuenta que los números de Eulerian son simétricos:
E(n, m) = E(n, n-m)
por lo tanto, es irrelevante si cuenta caídas o subidas.Eficientemente: 32 bytes
Conjunto de pruebas en línea .
Esto implementa la recurrencia en filas enteras.
fuente
{e!f{2ew::>1b=}1e=}
. O solo por diversión:{e!f{2ew::>+:-}0e=}
1e=
en la primera solución puede ser1b
.Python,
5556 bytesTodas las pruebas en repl.it
Aplica la fórmula recursiva en OEIS.
Tenga en cuenta que
+(m+1)*a(n-1,m)
se juega al golf-~m*a(n-1,m)
.(Puede devolver valores booleanos para representar
1
o0
. DevuelveTrue
cuandon<0 and m<=0
om<0
.)fuente
m<1 ? 1 : m==n ? 0 : formula
, de manera equivalentem%n<1 ? (m<1) : formula
; o alternativamentem<1 ? (n>=0) : formula
.Mathematica,
5956 bytesY aquí hay una versión de 59 bytes que implementa la definición más literalmente:
fuente
f[n_,m_]:=...
por 49?Sum[Binomial[#+1,k](#2+1-k)^#(-1)^k,{k,0,#2}]&
que podrían ser posibles para jugar más golfPython, 53 bytes
Recursión de OEIS. Salidas booleanas
True
como1
cuandon==k
.fuente
MATLAB / Octave, 40 bytes
Este es un puerto de mi respuesta MATL, en forma de una función anónima. Llámalo como
ans(7,4)
.Pruébalo en Ideone .
fuente
Lenguaje GameMaker, 62 bytes
Este es un script recursivo
A
basado en la fórmula de @ Arnauld.fuente
Perl, 98 bytes
Basado en la misma propiedad que la respuesta de Arnauld.
fuente
R, 72 bytes
Función recursiva que sigue la lógica en OEIS.
Este desafío resultó ser bastante cercano entre los diferentes enfoques que probé. Por ejemplo, usar la fórmula de wikipedia y recorrer la suma dio como resultado 92 bytes:
o la versión vectorizada para 87 bytes:
y finalmente la solución de fuerza bruta (103 bytes) que genera una matriz de todas las permutaciones usando el
permute
paquete y la funciónallPerms
. Sinn<8
embargo, este enfoque solo funciona .fuente
Raqueta 141 bytes
Sin golf:
Pruebas:
Salida:
fuente
En realidad ,
2119 bytesEsta respuesta usa un algoritmo similar al que Dennis usa en su respuesta Jelly . La definición original cuenta
<
mientras yo cuento>
. Esto termina siendo equivalente al final. Sugerencias de golf bienvenidas. Pruébalo en línea!No golfista
fuente
Swift 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}
La misma fórmula recursiva en un idioma que definitivamente no es para el golf
fuente
J, 28 bytes
Usa la fórmula
Uso
Explicación
fuente