Recentemente, tive um problema para resolver no trabalho, onde tinha duas listas: uma lista principal e uma lista menor que contém um subconjunto dos itens da lista principal, potencialmente em uma ordem diferente. Eu precisava reordenar a lista mestre de forma que os itens do subconjunto aparecessem na mesma ordem sem alterar a ordem dos itens não encontrados na lista e mantendo os itens no mesmo local sempre que possível. Ok, isso provavelmente parece confuso, então eu vou detalhar:
- A lista principal define a ordem padrão dos itens.
- A lista de subconjuntos define a ordem relativa de determinados itens.
- Onde a lista principal tiver dois elementos fora de ordem, de acordo com a lista de subconjuntos, o item anterior na lista principal deverá ser movido para o índice mais antigo, onde estiver no local correto em relação a outros itens da lista de subconjuntos. (ou seja, imediatamente após o item posterior)
Sua tarefa é implementar esse algoritmo de reordenação.
Casos de teste de exemplo
Master: [1, 2, 3]
Subset: []
Result: [1, 2, 3]
Master: [9001, 42, 69, 1337, 420]
Subset: [69]
Result: [9001, 42, 69, 1337, 420]
Master: [9001, 42, 69, 1337, 420, 99, 255]
Subset: [69, 9001, 1337]
Result: [42, 69, 9001, 1337, 420, 99, 255]
Master: [1, 2, 3, 4, 5]
Subset: [2, 5]
Result: [1, 2, 3, 4, 5]
Master: [apple, banana, carrot, duck, elephant]
Subset: [duck, apple]
Result: [banana, carrot, duck, apple, elephant]
Master: [Alice, Betty, Carol, Debbie, Elaine, Felicia, Georgia, Helen, Ilene, Julia]
Subset: [Betty, Felicia, Carol, Julia]
Result: [Alice, Betty, Debbie, Elaine, Felicia, Carol, Georgia, Helen, Ilene, Julia]
Master: [snake, lizard, frog, werewolf, vulture, dog, human]
Subset: [snake, werewolf, lizard, human, dog]
Result: [snake, frog, werewolf, lizard, vulture, human, dog]
Master: [Pete, Rob, Jeff, Stan, Chris, Doug, Reggie, Paul, Alex]
Subset: [Jeff, Stan, Pete, Paul]
Result: [Rob, Jeff, Stan, Pete, Chris, Doug, Reggie, Paul, Alex]
Master: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Subset: [8, 1, 2, 12, 11, 10]
Result: [3, 4, 5, 6, 7, 8, 1, 2, 9, 12, 11, 10]
Master: [lol, rofl, lmao, roflmao, lqtm, smh, jk, wat]
Subset: [wat, lmao, rofl]
Result: [lol, roflmao, lqtm, smh, jk, wat, lmao, rofl]
Regras
- Brechas padrão, yadda yadda, E / S conveniente, blá blá.
- Embora os exemplos usem números e seqüências de caracteres, você só precisa oferecer suporte a um tipo de elemento, sejam números inteiros, seqüências de caracteres ou qualquer outra coisa com semântica de igualdade bem definida, incluindo listas heterogêneas, se for conveniente em seu idioma.
- Você pode assumir que a lista principal e a lista de subconjuntos não contêm duplicatas
- Você pode assumir que todos os itens encontrados na lista de subconjuntos são encontrados na lista principal
- Qualquer lista pode estar vazia
- Você deve, no mínimo, suportar matrizes de até 100 elementos.
- A reordenação pode ser implementada no local ou através da criação de uma nova lista / matriz.
Golfe feliz!
8 1 3 4 5 6 7 2 9 12 11 10
uma solução válida para a penúltima?