Змагання
Для заданого набору з n цілих чисел напишіть програму, яка виведе його лексикографічний індекс.
Правила
- Вхід повинен бути лише набором унікальних невід’ємних цілих чисел, розділених пробілами.
- Вам слід вивести лексикографічний індекс (діапазон від 0 до n! -1 включно) перестановки.
- Ніякі бібліотеки перестановки або вбудовані перестановки не можна використовувати.
- Ви не можете генерувати набір перестановок або будь-який підмножина перестановок вхідних даних, щоб допомогти вам знайти індекс.
- Ви також не можете збільшувати чи зменшувати задану перестановку до наступної / попередньої (лексикографічно) перестановки.
- Бонусні бали (-10 байт), якщо ви знайдете спосіб виконати це, не використовуючи фактичних даних.
- Час виконання має бути менше 1 хвилини для n = 100
- Виграє найкоротший код за кількістю байтів
- Вибір переможця у вівторок (22 липня 2014 р.)
Детальніше про перестановки
- http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html
- Операція перестановної групи
- http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html
Приклади
0 1 2 --> 0
0 2 1 --> 1
1 0 2 --> 2
1 2 0 --> 3
2 0 1 --> 4
2 1 0 --> 5
0 1 2 3 4 5 6 7 --> 0
0 1 2 3 4 5 7 6 --> 1
0 1 2 3 4 6 5 7 --> 2
1 3 5 17 --> 0
781 780 779 13 --> 23
81 62 19 12 11 8 2 0 --> 40319
195 124 719 1 51 6 3 --> 4181