Existe una biyección bien conocida entre las permutaciones de n elementos y los números 0 a n! -1, de modo que el orden lexicográfico de las permutaciones y los números correspondientes es el mismo. Por ejemplo, con 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)
También es bien sabido que las permutaciones de n elementos forman un grupo (el grupo simétrico de orden n!), Por lo que, en particular, que una permutación de n elementos aplicada a una segunda permutación de n elementos produce una permutación de n elementos .
Por ejemplo, (1, 0, 2) aplicado a (a, b, c) rinde (b, a, c), entonces (1, 0, 2) aplicado a (2, 1, 0) rinde (1, 2 , 0).
Escriba un programa que tome tres argumentos enteros: n, p1 y p2; interpreta p1 y p2 como permutaciones de n elementos; aplica el primero al segundo; y genera el entero correspondiente. Por ejemplo:
$ ./perm.sh 3 2 5
3
fuente
A.
ayer, pero estaba demasiado cansada para intentar reunirla en el orden correcto para la pregunta O :-)Ruby - 77 caracteres
fuente
ARGV.map{|x|x.to_i}
->$*.map &:to_i
guarda otros pocos caracteres. Y puede reemplazar la segunda línea conl=[*[*0...n].permutation]
.Python 2.6, 144 caracteres
fuente