Contexte
Les gestionnaires de cartes très qualifiés sont capables d'une technique par laquelle ils coupent un paquet parfaitement en deux, puis entrelacent parfaitement les cartes. S'ils commencent avec un jeu trié et exécutent cette technique sans problème 52 fois de suite, le jeu sera restauré dans l'ordre trié. Votre défi est de prendre un jeu de cartes dans un tableau d'entiers et de déterminer s'il peut être trié en utilisant uniquement des shuffles Faro.
Définition
Mathématiquement, un shuffle de Faro est une permutation sur 2 n éléments (pour tout entier positif n ) qui amène l'élément en position i (indexé 1) à la position 2 i (mod 2 n +1). Nous aimerions également pouvoir gérer des listes de longueur impaire, alors dans ce cas, ajoutez simplement un élément à la fin de la liste (un Joker, si vous en avez un à portée de main) et Faro mélangez la nouvelle liste comme ci-dessus, mais ignorez l'élément factice ajouté lors de la vérification de l'ordre de la liste.
Objectif
Écrivez un programme ou une fonction qui prend une liste d'entiers et retourne ou génère une vérité si un certain nombre de shuffles Faro entraînerait le tri de cette liste dans un ordre non décroissant (même si ce nombre est nul - les petites listes devraient donner une vérité). Sinon, retournez ou sortez une fausse.
Exemples
[1,1,2,3,5,8,13,21] => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True
Notation
C'est le code-golf, donc la source la plus courte en octets gagne.