Existe uma bijeção bem conhecida entre as permutações de n elementos e os números de 0 a n! -1, de modo que a ordem lexicográfica das permutações e dos números correspondentes seja a mesma. Por exemplo, com n = 3:
0 <-> (0, 1, 2)
1 <-> (0, 2, 1)
2 <-> (1, 0, 2)
3 <-> (1, 2, 0)
4 <-> (2, 0, 1)
5 <-> (2, 1, 0)
Também é sabido que as permutações de n elementos formam um grupo (o grupo simétrico de ordem n!) - portanto, em particular, que uma permutação de n elementos aplicada a uma segunda permutação de n elementos produz uma permutação de n elementos .
Por exemplo, (1, 0, 2) aplicado a (a, b, c) produz (b, a, c), então (1, 0, 2) aplicado a (2, 1, 0) produz (1, 2 0).
Escreva um programa que use três argumentos inteiros: n, p1 e p2; interpreta p1 e p2 como permutações de n elementos; aplica o primeiro ao segundo; e gera o número inteiro correspondente. Por exemplo:
$ ./perm.sh 3 2 5
3
fonte
A.
ontem, mas estava cansado demais para tentar montar na ordem correta para a pergunta O :-)Ruby - 77 caracteres
fonte
ARGV.map{|x|x.to_i}
->$*.map &:to_i
salva mais alguns caracteres. E você pode substituir a segunda linha porl=[*[*0...n].permutation]
.Python 2.6, 144 caracteres
fonte