Dada una lista de enteros, genera el número de permutaciones de los enteros, con permutaciones indistinguibles contadas una vez. Si hay n
números enteros, y cada grupo de números indistinguibles tiene longitud n_i
, esto esn! / (n_1! * n_2! * ...)
Reglas
La entrada será alguna forma de lista como argumentos para una función o el programa con 1 a 12 enteros no negativos.
La salida imprimirá o devolverá el número de permutaciones como se describió anteriormente.
No hay lagunas estándar ni funciones integradas (que generan permutaciones, combinaciones, etc.). Se permiten los factoriales.
Casos de prueba
Entradas:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Salidas:
60
1
83160
Respuestas:
Python, 48 bytes
Una implementación recursiva.
En la fórmula,
n! / (n_1! * n_2! * ...)
si eliminamos el primer elemento (digamos que es1
), el número de permutación para losn-1
elementos restantes esEntonces, obtenemos la respuesta multiplicando por
n/n1
, la fracción recíproca de elementos que iguala al primero, por el resultado recursivo para el resto de la lista. La lista vacía da el caso base de 1.fuente
/l.count(l[0])
al final? Entonces no necesitas ese punto flotante asqueroso.MATL ,
141312 bytesPruébalo en línea!
Explicación
El enfoque es muy similar al de la respuesta de @ Adnan .
fuente
05AB1E ,
151413 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 .
Pruébalo en línea! .
fuente
JavaScript (ES6),
6461 bytesUtiliza la fórmula dada, excepto que calcula cada factorial de forma incremental (por ejemplo, el
r=r*++i
cálculo efectivon!
).Editar: Originalmente acepté cualquier número finito, pero ahorré 3 bytes cuando @ user81655 señaló que solo necesitaba admitir enteros positivos (aunque en realidad acepto enteros no negativos).
fuente
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
embargo, no me gusta porque introduce errores de redondeo.Pyth, 11 bytes
Banco de pruebas
Utiliza la fórmula estándar
n! / (count1! * count2! * ...)
, excepto que los factores de los recuentos se encuentran contando cuántas veces se produce cada elemento en el prefijo que conduce a eso, y luego multiplicando todos esos números.Explicación:
fuente
Pyth -
1412 bytesTest Suite .
fuente
Ruby,
7574 bytesDesearía que el
Math
módulo de Ruby tuviera una función factorial para que no tuviera que construir la mía.fuente
CJam, 17 bytes
Pruébalo aquí.
Explicación
fuente
Jalea, 8 bytes
Pruébalo en línea!
fuente
J, 13 bytes
Uso
Explicación
fuente