Существует хорошо известная биекция между перестановками n элементов и числами от 0 до n! -1, так что лексикографический порядок перестановок и соответствующих чисел одинаков. Например, при 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)
Также хорошо известно, что перестановки из n элементов образуют группу (симметрическую группу порядка n!), Поэтому, в частности, одна перестановка из n элементов, примененная ко второй перестановке из n элементов, дает перестановку из n элементов ,
Например, (1, 0, 2) применяется к (a, b, c) приводит к (b, a, c), поэтому (1, 0, 2) применяется к (2, 1, 0) приводит к (1, 2) 0).
Напишите программу, которая принимает три целочисленных аргумента: n, p1 и p2; интерпретирует p1 и p2 как перестановки n элементов; применяет первое ко второму; и выводит соответствующее целое число. Например:
$ ./perm.sh 3 2 5
3
источник
A.
вчера, но был слишком уставшим, чтобы попытаться собрать в правильном порядке вопрос O :-)Рубин - 77 символов
источник
ARGV.map{|x|x.to_i}
->$*.map &:to_i
сохраняет еще несколько символов. И вы можете заменить вторую строку наl=[*[*0...n].permutation]
.Python 2.6, 144 символа
источник