A tarefa
Escreva um programa ou função cuja entrada seja uma lista / matriz X de números inteiros e cuja saída seja uma lista de conjuntos de números inteiros Y , de modo que para cada elemento e em cada conjunto Y [ i ], X [ e ] = i , e de tal modo que o número total de elementos nos conjuntos em Y é igual ao número de elementos em X .
(Esta é basicamente a mesma operação que reverter uma hashtable / dicionário, exceto aplicada a matrizes.)
Exemplos
Esses exemplos assumem a indexação baseada em 1, mas você pode usar a indexação baseada em 0, se preferir.
X Y
[4] [{},{},{},{1}]
[1,2,3] [{1},{2},{3}]
[2,2,2] [{},{1,2,3}]
[5,5,6,6] [{},{},{},{},{1,2},{3,4}]
[6,6,5,5] [{},{},{},{},{3,4},{1,2}]
Esclarecimentos
- Você pode representar um conjunto como uma lista, se desejar. Se você fizer isso, a ordem de seus elementos não importa, mas você não pode repetir elementos.
- Você pode usar qualquer formato de E / S inequívoco razoável; por exemplo, você pode separar elementos de um conjunto com espaços e os conjuntos com novas linhas.
- Y deve ser finitamente longo e pelo menos longo o suficiente para ter todos os elementos de X como índices de matriz. No entanto, pode ser maior que o elemento máximo de X (os elementos extras seriam conjuntos vazios).
- Os elementos de X serão todos índices de matriz válidos, ou seja, números inteiros não negativos se você usar a indexação com base em 0 ou números inteiros positivos se você usar a indexação com base em 1.
Condição de vitória
Como um desafio do código-golfe , quanto menor, melhor.
[5,5,6,6]
e [6,6,5,5]
podem ser idênticas?
[5,5,6,6]
e [6,6,5,5]
não pode ter saída idêntica, mas a saída para [5,5,6,6]
também poderia ter sido, por exemplo [{},{},{},{},{2,1},{4,3}]
,.
[{0},{0},{0},{0},{1,2},{3,4}]
uma saída válida para [5,5,6,6]
?