У меня есть несколько перестановок списка:
>>> import itertools
>>> perms = list(itertools.permutations([0,1,2,3]))
>>> perms
[(0, 1, 2, 3), (0, 1, 3, 2), (0, 2, 1, 3), (0, 2, 3, 1), (0, 3, 1, 2), (0, 3, 2, 1), (1, 0, 2, 3), (1, 0, 3, 2), (1, 2, 0, 3), (1, 2, 3, 0), (1, 3, 0, 2), (1, 3, 2, 0), (2, 0, 1, 3), (2, 0, 3, 1), (2, 1, 0, 3), (2, 1, 3, 0), (2, 3, 0, 1), (2, 3, 1, 0), (3, 0, 1, 2), (3, 0, 2, 1), (3, 1, 0, 2), (3, 1, 2, 0), (3, 2, 0, 1), (3, 2, 1, 0)]
>>> len(perms)
24
Какую функцию я могу использовать (без доступа к списку perm
), чтобы получить индекс произвольной перестановки, например (0, 2, 3, 1)
-> 3
?
(Вы можете предположить, что переставленные элементы всегда представляют собой восходящий список целых чисел, начиная с нуля.)
Подсказка: может быть задействована факториальная система счисления. https://en.wikipedia.org/wiki/Factorial_number_system