整数のシーケンスを指定するか、より具体的には、0..N
変換の順列を次のように指定します。
- output [x] = reverse(input [input [x]])
- 繰り返す
たとえば:[2,1,0]になり[0,1,2]、逆です[2,1,0]。[0,2,1]になり[0,1,2]、逆になり[2,1,0]ます。
例1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
例2
In: 2 1 0
S#1: 2 1 0
Output: 0
例3
In: 3 0 1 2
S#1: 1 0 3 2
S#2: 3 2 1 0
S#3: 3 2 1 0
Output: 2
例4
In: 3 0 2 1
S#1: 0 2 3 1
S#2: 2 1 3 0
S#3: 2 0 1 3
S#4: 3 0 2 1
Output: 3
あなたの仕事は、整数の順列を取り、0..Nすでに起こっている順列が起こるまでステップ数を返す(または出力する)関数(またはプログラム)を定義することです。場合X変換がためにX、出力はゼロであるべきで、もしX変換するYとYするX(またはY)出力は1であるべきです。
Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps
テストケース:
4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 ->
5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps
お使いの言語が「機能」をサポートしていない場合は空白が整数のリストを区切りとして、シーケンスは、このようなとして与えられていることを仮定してもよい0 1 2か、3 1 0 2単一の行に。
おもしろ情報:
- シーケンス0,1,2,3、..、Nは常にN、...、3,2,1,0に変換されます
- シーケンスN、..、3,2,1,0は常にN、..、3,2,1,0に変換されます
- シーケンス0,1,3,2、...、N + 1、Nは常にN、...、3,2,1,0に変換されます
ボーナスタスク:数式を計算します。
オプションのルール:
- 言語の最初のインデックスが0ではなく1の場合、順列を使用できます
1..N(例とテストケースのすべての整数に1を追加するだけです)。
3,0,1,2変換する必要があります2,3,0,1