Introdução
Por definição, identificadores únicos devem ser únicos. Ter vários identificadores iguais faz com que se recupere dados inesperados. Porém, com dados chegando simultaneamente de várias fontes, pode ser difícil garantir exclusividade. Escreva uma função que unifique uma lista de identificadores.
Este é possivelmente o pior quebra-cabeça que já escrevi, mas você entendeu.
Exigências
Dada uma lista de zero ou mais números inteiros positivos, aplique as seguintes regras a cada número, do primeiro ao último:
- Se o número for o primeiro desse tipo, mantenha-o.
- Se o número foi encontrado anteriormente, substitua-o pelo número inteiro positivo mais baixo que não foi encontrado em nenhum lugar da lista de entrada inteira ou em nenhuma saída existente.
Para a solução:
- A solução pode ser um programa ou uma função.
- A entrada pode ser uma sequência, uma matriz, passada como argumentos ou uma entrada do teclado.
- A saída pode ser uma sequência, uma matriz ou impressa na tela.
- Todos os números na lista de saída são distintos.
Suposições
- A lista de entrada está limpa. Ele contém apenas números inteiros positivos.
- Um número inteiro positivo tem o intervalo de 1 a 2 31 -1.
- Menos de 256 MB de memória está disponível para as variáveis do seu programa. (Basicamente, não são permitidas matrizes de 2.147.483.648 elementos.)
Casos de teste
Input: empty
Output: empty
Input: 5
Output: 5
Input: 1, 4, 2, 5, 3, 6
Output: 1, 4, 2, 5, 3, 6
Input: 3, 3, 3, 3, 3, 3
Output: 3, 1, 2, 4, 5, 6
Input: 6, 6, 4, 4, 2, 2
Output: 6, 1, 4, 3, 2, 5
Input: 2147483647, 2, 2147483647, 2
Output: 2147483647, 2, 1, 3
Pontuação
Apenas um simples código de golfe. A contagem de bytes mais baixa nesse período na próxima semana vence.
6, 6, ...
dar 6, 1, ...
?
6, 6, 4, 4, 2, 2
caso de teste confirma a interpretação de Adám: a saída esperada é 6, 1, 4, 3, 2, 5
e não 6, 1, 4, 2, 3, 5
.
6, 6, 1, 2, 3, 4, 5
→6, 7, 1, 2, 3, 4, 5