Objectif
Générez la liste brouillée d'origine, à partir des mouvements qu'un tri d'insertion ferait pour le trier. La liste d'origine aura tous les nombres de 0
à N-1
(inclus) où N
est la taille de l'entrée.
Contribution
Une liste contenant les mouvements nécessaires pour trier la liste. Chaque valeur représente le nombre d'emplacements déplacés par le numéro d'origine (brouillé) pour se trouver dans sa bonne position, gardez à l'esprit que ce processus se déroule de gauche à droite.
La valeur à la position (indexée 0) i
dans la liste d'entrée sera comprise entre 0
et i
inclusive.
Vous n'avez pas besoin de gérer des entrées invalides, tout comportement est acceptable dans ce cas (crash, boucle infinie, etc.).
Production
La liste brouillée
Pas à pas pour générer les mouvements
Scrambled List | Moves to sort
[4,0,2,1,3,5] | [0, , , , , ] #4 stay in place
[4,0,2,1,3,5] | [0,1, , , , ] #0 is moved 1 slot to the left
[0,4,2,1,3,5] | [0,1,1, , , ] #2 is moved 1 slot
[0,2,4,1,3,5] | [0,1,1,2, , ] #1 is moved 2 slot
[0,1,2,4,3,5] | [0,1,1,2,1, ] #3 is moved 1 slot
[0,1,2,3,4,5] | [0,1,1,2,1,0] #5 is in the right place already
[0,1,2,3,4,5]
Donc, pour l'entrée que [0,1,1,2,1,0]
votre programme doit produire [4,0,2,1,3,5]
.
Gardez à l'esprit que les mouvements ne sont pas à la position dans la liste triée (finale), mais dans le segment trié (la section en gras)
Cas de test
[0,0,0] -> [0,1,2]
[0,1,0,1] -> [1,0,3,2]
[0,0,0,0,0,5] -> [1,2,3,4,5,0]
[0,1,2,3] -> [3,2,1,0]
[0,1,1,1] -> [3,0,1,2]
[0,1,1,2,1,0] -> [4,0,2,1,3,5]
Gagnant
C'est le golf de code , donc la réponse la plus courte l'emporte.