Objetivo
Gere a lista codificada original, a partir dos movimentos que uma Classificação de inserção faria para classificá-la. A lista original terá todos os números de 0
até N-1
(inclusive) onde N
está o tamanho da entrada.
Entrada
Uma lista contendo as movimentações necessárias para classificar a lista. Cada valor representa a quantidade de slots deslocados pelo número original (codificado) para estar na posição correta, lembre-se de que esse processo é da esquerda para a direita.
O valor na posição (indexada 0) i
na lista de entrada estará entre 0
e i
inclusive.
Você não precisa lidar com entradas inválidas; nesse caso, qualquer comportamento é aceitável (falha, loop infinito, etc.).
Resultado
A lista embaralhada
Passo a passo para gerar os movimentos
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]
Portanto, para a entrada que [0,1,1,2,1,0]
seu programa precisa produzir [4,0,2,1,3,5]
.
Lembre-se de que os movimentos não estão na posição na lista classificada (final), mas no segmento classificado (a seção em negrito)
Casos de teste
[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]
Ganhando
Isso é código-golfe , então a resposta mais curta vence.