O desafio
Para um determinado conjunto de n números inteiros, escreva um programa que produzirá seu índice lexicográfico.
As regras
- A entrada deve ser apenas um conjunto de números inteiros não negativos separados por espaços.
- Você deve gerar o índice lexicográfico (intervalo de 0 a n! -1, inclusive) da permutação.
- Nenhuma biblioteca de permutação ou embutidos de permutação podem ser usados.
- Você não pode gerar o conjunto de permutações ou qualquer subconjunto de permutações da entrada para ajudá-lo a encontrar o índice.
- Você também não pode aumentar ou diminuir a permutação fornecida para a permutação seguinte / anterior (lexicograficamente).
- Pontos de bônus (-10 bytes) se você encontrar uma maneira de concluir isso sem usar fatoriais.
- O tempo de execução deve ser menor que 1 minuto para n = 100
- O código mais curto pela contagem de bytes ganha
- Vencedor escolhido terça-feira (22 de julho de 2014)
Mais sobre permutações
- http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html
- Operação do grupo de permutação
- http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html
Exemplos
0 1 2 --> 0
0 2 1 --> 1
1 0 2 --> 2
1 2 0 --> 3
2 0 1 --> 4
2 1 0 --> 5
0 1 2 3 4 5 6 7 --> 0
0 1 2 3 4 5 7 6 --> 1
0 1 2 3 4 6 5 7 --> 2
1 3 5 17 --> 0
781 780 779 13 --> 23
81 62 19 12 11 8 2 0 --> 40319
195 124 719 1 51 6 3 --> 4181