Alice et Bob aiment jouer à un jeu de cartes, avec un jeu de cartes numérotées avec des entiers non négatifs consécutifs.
Alice a cependant une façon très particulière de mélanger le jeu. Tout d'abord, elle prend la carte du dessus du paquet et la place au bas du paquet. Elle retire ensuite la carte suivante et commence une pile avec elle. Ensuite, elle fait de nouveau défiler la carte du haut vers le bas et place la nouvelle carte du haut dans la pile. Elle répète ce processus jusqu'à ce qu'elle ait vidé le jeu, auquel cas la pile est le nouveau jeu.
deck | pile
-----------+-----------
3 1 4 0 2 |
1 4 0 2 3 |
4 0 2 3 | 1
0 2 3 4 | 1
2 3 4 | 0 1
3 4 2 | 0 1
4 2 | 3 0 1
2 4 | 3 0 1
4 | 2 3 0 1
| 4 2 3 0 1
4 2 3 0 1 |
Figure 1: Alice effectue son mélange sur le jeu de 5 cartes "3, 1, 4, 0, 2". Les dos des cartes sont tous tournés vers la gauche.
Un jour, Bob annonce qu'il prend une semaine de vacances. Alice, n'ayant personne avec qui jouer, enrôle son amie Eve. Maintenant, Eve est un tricheur sans vergogne, alors quand elle voit le remaniement particulier d'Alice, elle se rend compte qu'elle peut au préalable empiler le jeu à son avantage!
Quand Eve rentre à la maison après le premier jour, elle fait une analyse du jeu et découvre que ses meilleures chances sont quand les cartes sont dans l'ordre 0, 1, 2, 3, 4, 5, ... Elle n'a pas attrapez le nombre de cartes dans le jeu, cependant, elle élabore un schéma farfelu pour écrire du code sur son bras qui, une fois exécuté, prend la taille du jeu et affiche l'ordre dans lequel Eve doit mettre les cartes, de sorte que lorsque Alice mélange le jeu, le jeu final est dans l'ordre 0, 1, 2, 3, ...
Peu importe Eve dans quelle langue le code est (elle les connaît tous), ou si le code est une fonction prenant un argument entier et renvoyant un tableau, ou un programme complet prenant une entrée via un argument de ligne de commande ou STDIN et écrire les résultats à STDOUT. Elle a cependant besoin du code le plus court possible pour minimiser les chances qu'Alice le voie et la rattrape.
Aussi immoral que cela puisse être, pouvez-vous aider Eve?
Exemples d'entrées et sorties:
in out
1 0
2 0 1
5 2 4 0 3 1
10 2 9 4 8 0 7 3 6 1 5
52 6 51 25 50 12 49 24 48 1 47 23 46 11 45 22 44 5 43 21 42 10 41 20 40 2 39 19
38 9 37 18 36 4 35 17 34 8 33 16 32 0 31 15 30 7 29 14 28 3 27 13 26
shuffle(shuffle(range(5))) == range(5)
...