昨日、リフルシャッフルについてこの質問をしました。昨日の質問は少し難しすぎたようですので、この質問は関連しているものの、はるかに簡単なタスクです。
今日、あなたは順列が実際にリフルシャッフルであるかどうかを判断するように求められます。リフルシャッフルの定義は、最後の質問から変更されています。
シャッフルの最初の部分は分割です。分割では、カードのデッキを2つに分割します。2つのサブセクションは連続的で、相互に排他的かつ網羅的でなければなりません。現実の世界では、パーティションをできるだけ均等にしたいと考えていますが、この課題ではこれは考慮事項ではありません。縮退している(1つのパーティションが空である)パーティションを含むすべてのパーティションは等しく考慮されます。
それらが分割された後、カードは、それらがメンバーであるパーティション内で相対的な順序を維持するような方法で一緒に接続されます。たとえば、カード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
順序を変更します。
仕事
合理的な方法で順列が与えられた場合、それが有効なリフルシャッフルを表すかどうかを判断します。「はい、これはリフルシャッフルです」と「いいえ、これはリフルシャッフルではありません」の2つの異なる定数値を出力する必要があります。
これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数が少ない方が優れています。
テストケース
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
。
[2,3,6,1,4,5]
。
[0, ..., n-1]
なくの順列を使用でき[1, ..., n]
ますか?
0
、偽であるが[1, +∞)
、真実のために任意の整数がありますか?