チャレンジ
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 2014