L'obiettivo
Scrivi un programma o una funzione il cui input è un elenco / array X di numeri interi e il cui output è un elenco di set di numeri interi Y , in modo tale che per ciascun elemento e in ciascun set Y [ i ], X [ e ] = i e tale che il numero totale di elementi negli insiemi di Y è uguale al numero di elementi in X .
(Questa è sostanzialmente la stessa operazione di invertire un hashtable / dizionario, tranne invece che si applica agli array.)
Esempi
Questi esempi presuppongono l'indicizzazione basata su 1, ma è possibile utilizzare l'indicizzazione basata su 0 se si preferisce.
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}]
chiarimenti
- Se lo desideri, puoi rappresentare un set come elenco. Se lo fai, l'ordine dei suoi elementi non ha importanza, ma potresti non ripetere gli elementi.
- È possibile utilizzare qualsiasi formato I / O inequivocabile; ad esempio, è possibile separare gli elementi di un set con spazi e i set stessi con nuove righe.
- Y dovrebbe essere finemente lungo e almeno abbastanza lungo da avere tutti gli elementi di X come indici di array. Tuttavia, potrebbe essere più lungo dell'elemento massimo di X (gli elementi extra sarebbero insiemi vuoti).
- Gli elementi di X saranno tutti indici di array validi, cioè numeri interi non negativi se si utilizza l'indicizzazione basata su 0 o numeri interi positivi se si utilizza l'indicizzazione basata su 1.
Condizione di vittoria
Come una sfida di code-golf , più breve è meglio.
[5,5,6,6]
e [6,6,5,5]
possono essere identici?
[5,5,6,6]
e [6,6,5,5]
non può avere un output identico, ma anche l'output per [5,5,6,6]
potrebbe essere stato, ad esempio [{},{},{},{},{2,1},{4,3}]
.
[{0},{0},{0},{0},{1,2},{3,4}]
un output valido per [5,5,6,6]
?