La tâche
Écrivez un programme ou une fonction dont l'entrée est une liste / tableau X d'entiers, et dont la sortie est une liste d'ensembles d'entiers Y , de telle sorte que pour chaque élément e dans chaque ensemble Y [ i ], X [ e ] = i , et de telle sorte que le nombre total d'éléments dans les ensembles en Y est égal au nombre d'éléments dans X .
(Il s'agit essentiellement de la même opération que l'inversion d'une table de hachage / dictionnaire, sauf si elle est appliquée aux tableaux à la place.)
Exemples
Ces exemples supposent une indexation basée sur 1, mais vous pouvez utiliser une indexation basée sur 0 à la place si vous préférez.
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}]
Clarifications
- Vous pouvez représenter un ensemble sous forme de liste, si vous le souhaitez. Si vous le faites, l'ordre de ses éléments n'a pas d'importance, mais vous ne pouvez pas répéter les éléments.
- Vous pouvez utiliser n'importe quel format d'E / S non ambigu raisonnable; par exemple, vous pouvez séparer les éléments d'un ensemble par des espaces et les ensembles eux-mêmes par des sauts de ligne.
- Y doit être finement long et au moins suffisamment long pour avoir tous les éléments de X comme index de tableau. Il peut cependant être plus long que l'élément maximal de X (les éléments supplémentaires seraient des ensembles vides).
- Les éléments de X seront tous des indices de tableau valides, c'est-à-dire des entiers non négatifs si vous utilisez une indexation basée sur 0, ou des entiers positifs si vous utilisez une indexation basée sur 1.
Condition de victoire
En tant que défi de code-golf , plus c'est court, mieux c'est.
[5,5,6,6]
et [6,6,5,5]
peuvent être identiques?
[5,5,6,6]
et [6,6,5,5]
ne peut pas avoir une sortie identique, mais la sortie pour [5,5,6,6]
aurait aussi pu, par exemple, [{},{},{},{},{2,1},{4,3}]
.
[{0},{0},{0},{0},{1,2},{3,4}]
une sortie valide pour [5,5,6,6]
?