Un shuffle riffle est un type de shuffle où le pont est divisé en deux partitions et les partitions sont ensuite épissées ensemble pour créer un nouveau pont mélangé.
Les cartes sont épissées ensemble de telle sorte que les cartes conservent leur ordre relatif dans la partition à laquelle elles appartiennent . Par exemple, si la carte A est avant la carte B dans le jeu et que les cartes A et B sont dans la même partition, la carte A doit être avant la carte B dans le résultat final, même si le nombre de cartes entre elles a augmenté. Si A et B sont dans des partitions différentes, ils peuvent être dans n'importe quel ordre, quel que soit leur ordre de départ, dans le résultat final.
Chaque mélange de fusils peut ensuite être considéré comme une permutation du jeu de cartes d'origine. Par exemple la permutation
1,2,3 -> 1,3,2
est un remaniement rapide. Si vous divisez le jeu comme ça
1, 2 | 3
nous voyons que chaque carte dans 1,3,2
a le même ordre relatif à toutes les autres cartes dans sa partition. 2
est toujours après 1
.
D'un autre côté, la permutation suivante n'est pas un shuffle riffle.
1,2,3 -> 3,2,1
Nous pouvons le voir parce que pour les deux partitions (non triviales)
1, 2 | 3
1 | 2, 3
il y a une paire de cartes qui ne maintiennent pas leur ordre relatif. Dans la première partition 1
et 2
changez leur ordre, tandis que dans la deuxième partition 2
et 3
changez leur ordre.
Cependant, nous voyons que cela 3, 2, 1
peut être fait en composant deux shuffles de fusil,
1, 3, 2 + 2, 3, 1 = 3, 2, 1
En fait, un fait assez simple à prouver est que toute permutation peut être effectuée en combinant un certain nombre de permutations de shuffle de riffle.
Tâche
Votre tâche consiste à créer un programme ou une fonction qui prend une permutation (de taille N ) en entrée et génère le plus petit nombre de permutations de réarrangement de riffle (de taille N ) pouvant être combinées pour former la permutation d'entrée. Vous n'avez pas besoin de sortir les réorganisations de fusils elles-mêmes, juste combien il y en a.
Il s'agit de code-golf donc les réponses seront notées en octets avec moins d'octets mieux.
Vous pouvez sortir 1 ou 0 pour une permutation d'identité.
Cas de test
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
être 2
? Nous nous séparons d'abord au milieu et gagnons 3,1,4,2
, puis nous nous séparons à nouveau au milieu et utilisons la même permutation