リフルシャッフルはシャッフルの一種で、デッキが2つのパーティションに分割された後、パーティションがスプライスされて新しいシャッフルデッキが作成されます。
カードは、カードがメンバーであるパーティション内で相対的な順序を維持するように接続されます。たとえば、カードAがデッキのカードBの前にあり、カードAとBが同じパーティションにある場合、カードAが最終結果のカードBの前にある必要があります。場合はAとBが異なるパーティションにある、彼らは最終的な結果に関係なく、自分の順番の、任意の順序にすることができます。
各リフルシャッフルは、カードの元のデッキの順列として見ることができます。たとえば、順列
1,2,3 -> 1,3,2
リフルシャッフルです。このようにデッキを分割すると
1, 2 | 3
のすべてのカード1,3,2
は、パーティション内の他のすべてのカードと同じ相対的な順序を持っていることがわかります。 2
まだ後1
です。
一方、次の順列はリフルシャッフルではありません。
1,2,3 -> 3,2,1
これは、2つの(重要な)パーティションすべてに対して
1, 2 | 3
1 | 2, 3
相対的な順序を維持しないカードのペアがあります。最初のパーティション1
で2
順序を変更し、2番目のパーティション2
で3
順序を変更します。
ただし3, 2, 1
、2つのリッフルシャッフルを作成することで作成できることがわかります。
1, 3, 2 + 2, 3, 1 = 3, 2, 1
実際、証明すべき非常に単純な事実は、いくつかのリフルシャッフル順列を組み合わせて、順列を作成できることです。
仕事
あなたの仕事は、入力として(サイズNの)順列を取り、入力順列を形成するために組み合わせることができる(サイズNの)最小数のリフルシャッフル順列を出力するプログラムまたは関数を作成することです。リッフルシャッフル自体を出力する必要はありません。
これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。
恒等置換の場合、1または0を出力できます。
テストケース
1,3,2 -> 1
3,2,1 -> 2
3,1,2,4 -> 1
2,3,4,1 -> 1
4,3,2,1 -> 2
4,3,2,1
ない2
?まず、中・ゲインで分割3,1,4,2
し、我々は再び中央で分割され、同じ順列を使用