Dada uma lista de números inteiros, imprima o número de permutações dos números inteiros, com permutações indistinguíveis contadas uma vez. Se houver n
números inteiros e cada grupo de números indistinguíveis tiver comprimento n_i
, isso én! / (n_1! * n_2! * ...)
Regras
A entrada será uma forma de lista como argumento para uma função ou programa com 1 a 12 números inteiros não negativos.
A saída estará imprimindo ou retornando o número de permutações, conforme descrito acima.
Não há brechas padrão ou funções internas (gerando permutações, combinações, etc.). Fatoriais são permitidos.
Casos de teste
Entradas:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Saídas:
60
1
83160
Respostas:
Python, 48 bytes
Uma implementação recursiva.
Na fórmula,
n! / (n_1! * n_2! * ...)
se removermos o primeiro elemento (digamos que seja1
), o número de permutação para osn-1
elementos restantes éEntão, obtemos a resposta multiplicando pela
n/n1
fração recíproca de elementos que iguala o primeiro, pelo resultado recursivo para o resto da lista. A lista vazia fornece o caso base de 1.fonte
/l.count(l[0])
no final? Então você não precisa desse ponto flutuante nojento.MATL ,
141312 bytesExperimente online!
Explicação
A abordagem é muito semelhante à da resposta de @ Adnan .
fonte
05AB1E ,
151413 bytesCódigo:
Explicação:
Usa a codificação CP-1252 .
Experimente online! .
fonte
JavaScript (ES6),
6461 bytesUsa a fórmula fornecida, exceto o cálculo incremental de cada fatorial (por exemplo, os
r=r*++i
cálculos efetivosn!
).Edit: Originalmente eu aceitei qualquer número finito, mas salvei 3 bytes quando @ user81655 apontou que eu só precisava suportar números inteiros positivos (embora eu realmente aceite números inteiros não negativos).
fonte
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
fato de introduzir erros de arredondamento.Pitão, 11 bytes
Suíte de teste
Usa a fórmula padrão
n! / (count1! * count2! * ...)
, exceto que os fatoriais das contagens são encontrados contando quantas vezes cada elemento ocorre no prefixo anterior a ele e multiplicando todos esses números juntos.Explicação:
fonte
Pitão -
1412 bytesConjunto de Teste .
fonte
Ruby,
7574 bytesMeio que desejo que o
Math
módulo de Ruby tivesse uma função fatorial, para que eu não tivesse que construir o meu.fonte
CJam, 17 bytes
Teste aqui.
Explicação
fonte
Geléia, 8 bytes
Experimente online!
fonte
J, 13 bytes
Uso
Explicação
fonte