Istnieje dobrze znany biject między permutacjami n elementów i liczbami od 0 do n! -1, tak że porządek leksykograficzny permutacji i odpowiadających im liczb jest taki sam. Na przykład 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)
Dobrze wiadomo również, że permutacje n elementów tworzą grupę (symetryczna grupa rzędu n!) - w szczególności, że jedna permutacja n elementów zastosowana do drugiej permutacji n elementów daje permutację n elementów .
Na przykład (1, 0, 2) zastosowane do (a, b, c) daje (b, a, c), więc (1, 0, 2) zastosowane do (2, 1, 0) daje (1, 2) , 0).
Napisz program, który pobiera trzy argumenty całkowite: n, p1 i p2; interpretuje p1 i p2 jako permutacje n elementów; stosuje pierwszy do drugiego; i wyprowadza odpowiednią liczbę całkowitą. Na przykład:
$ ./perm.sh 3 2 5
3
źródło
A.
Wczoraj rzuciłem okiem na dokumentację , ale byłem zbyt zmęczony, by spróbować ułożyć we właściwej kolejności dla pytania O :-)Ruby - 77 znaków
źródło
ARGV.map{|x|x.to_i}
->$*.map &:to_i
zapisuje kolejne kilka znaków. I możesz zastąpić drugą linięl=[*[*0...n].permutation]
.Python 2.6, 144 znaki
źródło