Es gibt einen bekannten Unterschied zwischen den Permutationen von n Elementen und den Zahlen 0 bis n! -1, so dass die lexikografische Reihenfolge der Permutationen und der entsprechenden Zahlen gleich ist. Zum Beispiel mit 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)
Es ist auch bekannt, dass die Permutationen von n Elementen eine Gruppe bilden (die symmetrische Gruppe der Ordnung n!), So dass insbesondere eine Permutation von n Elementen, die auf eine zweite Permutation von n Elementen angewendet wird, eine Permutation von n Elementen ergibt .
Zum Beispiel ergibt (1, 0, 2), angewendet auf (a, b, c), (b, a, c), so dass (1, 0, 2), angewendet auf (2, 1, 0), (1, 2) ergibt , 0).
Schreiben Sie ein Programm, das drei ganzzahlige Argumente akzeptiert: n, p1 und p2; interpretiert p1 und p2 als Permutationen von n Elementen; wendet das erste auf das zweite an; und gibt die entsprechende ganze Zahl aus. Beispielsweise:
$ ./perm.sh 3 2 5
3
quelle
A.
gestern einen Blick in die Dokumentation geworfen, war aber zu müde, um zu versuchen, sie in der richtigen Reihenfolge für die Frage O zusammenzusetzen :-)Ruby - 77 Zeichen
quelle
ARGV.map{|x|x.to_i}
->$*.map &:to_i
speichert noch ein paar Zeichen. Und Sie können die zweite Zeile durch ersetzenl=[*[*0...n].permutation]
.Python 2.6, 144 Zeichen
quelle