En gribouillant avec des nombres, j'ai trouvé une permutation intéressante que vous pouvez générer à partir d'une liste de nombres. Si vous répétez cette même permutation suffisamment de fois, vous vous retrouverez toujours dans le tableau d'origine. Utilisons la liste suivante:
[1, 2, 3, 4, 5]
par exemple
Inversez le tableau. Maintenant, notre tableau est
[5, 4, 3, 2, 1]
Réorganisez (échangez) chaque paire. Notre liste comprend 2 paires:,
[5, 4]
et[3, 2]
. Malheureusement, nous ne pouvons pas regrouper le1
en une paire, nous allons donc le laisser seul. Après avoir échangé chaque paire, le nouveau tableau est:[4, 5, 2, 3, 1]
Répétez les étapes 1 et 2 jusqu'à ce que nous revenions au tableau d'origine. Voici les 4 prochaines étapes:
Step 2: Start: [4, 5, 2, 3, 1] Reversed: [1, 3, 2, 5, 4] Pairs Swapped: [3, 1, 5, 2, 4] Step 3: Start: [3, 1, 5, 2, 4] Reversed: [4, 2, 5, 1, 3] Pairs Swapped: [2, 4, 1, 5, 3] Step 4: Start: [2, 4, 1, 5, 3] Reversed: [3, 5, 1, 4, 2] Pairs Swapped: [5, 3, 4, 1, 2] Step 5: Start: [5, 3, 4, 1, 2] Reversed: [2, 1, 4, 3, 5] Pairs Swapped: [1, 2, 3, 4, 5] # No more steps needed because we are back to the original array
Si la longueur de la liste, n est impaire, il faudra toujours exactement n étapes pour revenir au tableau d'origine. Si n est pair, il faudra toujours 2 étapes pour revenir au tableau d'origine, à moins que n ne soit 2, auquel cas cela prendra 1 étape (car inverser et permuter est la même chose).
Votre tâche pour aujourd'hui (si vous l'acceptez) est de visualiser cet ensemble d'étapes pour des listes de longueurs arbitraires. Vous devez écrire un programme ou une fonction qui prend en entrée un seul entier positif n et effectue cet ensemble d'étapes pour la liste [1, n]
. Vous devez sortir chaque étape intermédiaire en cours de route, que cela signifie imprimer chaque étape ou les renvoyer sous forme de liste d'étapes. Je ne suis pas très pointilleux sur le format de sortie, tant qu'il est clair que vous générez chaque étape. Cela signifie (par exemple) l'un de ces éléments:
Sortie de chaque étape sous forme de liste dans STDOUT
Renvoyer une liste de listes
Renvoyer une liste de représentations de chaîne de chaque étape
Retour / sortie d'une matrice
serait acceptable.
Vous devez également sortir le tableau d'origine, que cela vienne à la fin ou au début. (techniquement, les deux sont corrects)
Vous devrez gérer le cas de bord de 2 en 1 étape au lieu de 2 , alors assurez-vous que votre solution fonctionne avec une entrée de 2 (et 1 est un autre cas de bord potentiel).
Comme d'habitude, il s'agit de code-golf , donc les lacunes standard s'appliquent et essayez de rendre votre solution plus courte que toute autre dans la langue de votre choix (ou même essayez de battre une autre langue qui est généralement plus courte que la vôtre si vous vous sentez bien) pour un défi).
Test IO
1:
[1]
2:
[1, 2]
3:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
4:
[3, 4, 1, 2]
[1, 2, 3, 4]
5:
[4, 5, 2, 3, 1]
[3, 1, 5, 2, 4]
[2, 4, 1, 5, 3]
[5, 3, 4, 1, 2]
[1, 2, 3, 4, 5]
7:
[6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 6]
[4, 6, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 7, 5]
[7, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
9:
[8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 8]
[6, 8, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 9, 7]
[9, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Et pour faire bonne mesure, voici un cas de test géant:
27:
[26, 27, 24, 25, 22, 23, 20, 21, 18, 19, 16, 17, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 11, 8, 13, 10, 15, 12, 17, 14, 19, 16, 21, 18, 23, 20, 25, 22, 27, 24, 26]
[24, 26, 22, 27, 20, 25, 18, 23, 16, 21, 14, 19, 12, 17, 10, 15, 8, 13, 6, 11, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 11, 4, 13, 6, 15, 8, 17, 10, 19, 12, 21, 14, 23, 16, 25, 18, 27, 20, 26, 22, 24]
[22, 24, 20, 26, 18, 27, 16, 25, 14, 23, 12, 21, 10, 19, 8, 17, 6, 15, 4, 13, 2, 11, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 11, 1, 13, 2, 15, 4, 17, 6, 19, 8, 21, 10, 23, 12, 25, 14, 27, 16, 26, 18, 24, 20, 22]
[20, 22, 18, 24, 16, 26, 14, 27, 12, 25, 10, 23, 8, 21, 6, 19, 4, 17, 2, 15, 1, 13, 3, 11, 5, 9, 7]
[9, 7, 11, 5, 13, 3, 15, 1, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 26, 14, 24, 16, 22, 18, 20]
[18, 20, 16, 22, 14, 24, 12, 26, 10, 27, 8, 25, 6, 23, 4, 21, 2, 19, 1, 17, 3, 15, 5, 13, 7, 11, 9]
[11, 9, 13, 7, 15, 5, 17, 3, 19, 1, 21, 2, 23, 4, 25, 6, 27, 8, 26, 10, 24, 12, 22, 14, 20, 16, 18]
[16, 18, 14, 20, 12, 22, 10, 24, 8, 26, 6, 27, 4, 25, 2, 23, 1, 21, 3, 19, 5, 17, 7, 15, 9, 13, 11]
[13, 11, 15, 9, 17, 7, 19, 5, 21, 3, 23, 1, 25, 2, 27, 4, 26, 6, 24, 8, 22, 10, 20, 12, 18, 14, 16]
[14, 16, 12, 18, 10, 20, 8, 22, 6, 24, 4, 26, 2, 27, 1, 25, 3, 23, 5, 21, 7, 19, 9, 17, 11, 15, 13]
[15, 13, 17, 11, 19, 9, 21, 7, 23, 5, 25, 3, 27, 1, 26, 2, 24, 4, 22, 6, 20, 8, 18, 10, 16, 12, 14]
[12, 14, 10, 16, 8, 18, 6, 20, 4, 22, 2, 24, 1, 26, 3, 27, 5, 25, 7, 23, 9, 21, 11, 19, 13, 17, 15]
[17, 15, 19, 13, 21, 11, 23, 9, 25, 7, 27, 5, 26, 3, 24, 1, 22, 2, 20, 4, 18, 6, 16, 8, 14, 10, 12]
[10, 12, 8, 14, 6, 16, 4, 18, 2, 20, 1, 22, 3, 24, 5, 26, 7, 27, 9, 25, 11, 23, 13, 21, 15, 19, 17]
[19, 17, 21, 15, 23, 13, 25, 11, 27, 9, 26, 7, 24, 5, 22, 3, 20, 1, 18, 2, 16, 4, 14, 6, 12, 8, 10]
[8, 10, 6, 12, 4, 14, 2, 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, 27, 13, 25, 15, 23, 17, 21, 19]
[21, 19, 23, 17, 25, 15, 27, 13, 26, 11, 24, 9, 22, 7, 20, 5, 18, 3, 16, 1, 14, 2, 12, 4, 10, 6, 8]
[6, 8, 4, 10, 2, 12, 1, 14, 3, 16, 5, 18, 7, 20, 9, 22, 11, 24, 13, 26, 15, 27, 17, 25, 19, 23, 21]
[23, 21, 25, 19, 27, 17, 26, 15, 24, 13, 22, 11, 20, 9, 18, 7, 16, 5, 14, 3, 12, 1, 10, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 10, 3, 12, 5, 14, 7, 16, 9, 18, 11, 20, 13, 22, 15, 24, 17, 26, 19, 27, 21, 25, 23]
[25, 23, 27, 21, 26, 19, 24, 17, 22, 15, 20, 13, 18, 11, 16, 9, 14, 7, 12, 5, 10, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 18, 15, 20, 17, 22, 19, 24, 21, 26, 23, 27, 25]
[27, 25, 26, 23, 24, 21, 22, 19, 20, 17, 18, 15, 16, 13, 14, 11, 12, 9, 10, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
Amusez-vous au golf!
1 2 3 4 5
, non 1 2 4 3 5
.
array[0]
ce ne sera que 1 au début et à la fin du processus n = 999
. En regardant le motif, il semble que pour chaque n impair , le premier élément monte 1, n-1, 3, n - 3, 5, n - 5, 7...
jusqu'à n - 2, 3, n, 1
, ce qui prendra toujours n étapes. Je ne vois aucune raison pour que ce modèle change avec un n plus grand .
1, n, 2, n-2, 4, n-4, 6, n-6, 8, n-8, ...
et il est facile de montrer par induction qu'un élément à la position paire x se déplace vers nx après une étape , et un élément en position impaire x se déplace vers n-x + 2 . Donc, si n = 2k + 1 , alors après la 2k- ème étape, 1 sera à 2k , et à l'étape suivante à n-2k = 1 .