La tarea
Escriba un programa o función cuya entrada sea una lista / matriz X de enteros, y cuya salida sea una lista de conjuntos de enteros Y , de modo que para cada elemento e en cada conjunto Y [ i ], X [ e ] = i , y tal que el número total de elementos de los sistemas en Y es igual al número de elementos en X .
(Esta es básicamente la misma operación que invertir una tabla hash / diccionario, excepto que se aplica a las matrices).
Ejemplos
Estos ejemplos suponen una indexación basada en 1, pero puede usar una indexación basada en 0 si lo prefiere.
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}]
Aclaraciones
- Puede representar un conjunto como una lista, si lo desea. Si lo hace, el orden de sus elementos no importa, pero no puede repetir elementos.
- Puede usar cualquier formato de E / S razonablemente inequívoco; por ejemplo, podría separar elementos de un conjunto con espacios y los conjuntos con líneas nuevas.
- Y debe ser finitamente largo, y al menos lo suficientemente largo como para tener todos los elementos de X como índices de matriz. Sin embargo, puede ser más largo que el elemento máximo de X (los elementos adicionales serían conjuntos vacíos).
- Todos los elementos de X serán índices de matriz válidos, es decir, enteros no negativos si usa indexación basada en 0, o enteros positivos si usa indexación basada en 1.
Condición de victoria
Como un desafío de código de golf , más corto es mejor.
[5,5,6,6]
y [6,6,5,5]
pueden ser idénticos?
[5,5,6,6]
, y [6,6,5,5]
no puede tener salida idéntica, pero la salida de [5,5,6,6]
también podría haber sido, por ejemplo, [{},{},{},{},{2,1},{4,3}]
.
[{0},{0},{0},{0},{1,2},{3,4}]
sería una salida válida para [5,5,6,6]
?