La sfida
Per un dato set di n numeri interi, scrivi un programma che produrrà il suo indice lessicografico.
Le regole
- L'input deve essere solo un insieme di numeri interi non negativi univoci separati da spazi.
- Dovresti generare l'indice lessicografico (intervallo da 0 a n! -1 incluso) della permutazione.
- Non è possibile utilizzare librerie di permutazioni o incorporamenti di permutazioni.
- Non è possibile generare l'insieme di permutazioni o alcun sottoinsieme di permutazioni dell'input per aiutarti a trovare l'indice.
- Inoltre, non è possibile incrementare o decrementare la permutazione data alla permutazione successiva / precedente (lessicograficamente).
- Punti bonus (-10 byte) se trovi un modo per completarlo senza usare fattoriali.
- Il tempo di esecuzione dovrebbe essere inferiore a 1 minuto per n = 100
- Vince il codice più breve per numero di byte
- Vincitore scelto martedì (22 luglio 2014)
Maggiori informazioni sulle permutazioni
- http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html
- Funzionamento del gruppo di permutazione
- http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html
Esempi
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