挑战
对于给定的n个整数集,编写一个程序,该程序将输出其字典索引。
规则
- 输入只能是由空格分隔的一组唯一的非负整数。
- 您应该输出排列的字典索引(范围从0到n!-1)。
- 不能使用置换库或内置置换。
- 您可能不会生成输入的排列集或排列的任何子集来帮助您找到索引。
- 您也不能将给定的排列递增或递减到下一个/上一个(按字典顺序)排列。
- 如果您找到某种无需使用阶乘就可以完成的奖励积分(-10字节)。
- 对于n = 100,运行时间应少于1分钟
- 字节数最短的代码获胜
- 优胜者选择星期二(2014年7月22日)
有关排列的更多信息
- 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
1
在选出优胜者之前,我们还有更多时间吗?三天时间太少了。
—
xnor