Соревнование
Для данного набора из 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