Che cos'è questo strumento?
Un randomizzatore di elenchi riorganizza un insieme di elementi in una sequenza casuale oppure ne estrae un sottoinsieme casuale. La difficoltà sta nel farlo senza distorsioni: un approccio ingenuo, come l'ordinamento di un array con una funzione di confronto casuale, produce una distribuzione sbilanciata in cui alcuni ordinamenti sono molto più probabili di altri.
Questo strumento utilizza l'algoritmo di Fisher–Yates (Durstenfeld), il metodo standard per ottenere una permutazione casuale dimostrabilmente uniforme: ogni possibile ordine della lista ha la stessa probabilità di verificarsi.
Perché usarlo?
- Un mescolamento davvero imparziale — l'algoritmo di Fisher–Yates, non il comune anti-pattern del tipo (() => Math.random() - 0.5) che distorce i risultati.
- Modalità "selezione vincitori": estrae esattamente N elementi a caso invece di mescolare l'intero elenco; ideale per lotterie e omaggi.
- Rimozione facoltativa dei duplicati prima della rimescolatura, per elenchi che potrebbero contenere ripetizioni accidentali.
- Funziona con qualsiasi tipo di testo — nomi, attività, biglietti, premi — un elemento per riga.
- Informazioni riservate: la rimescolatura avviene interamente nel browser, non viene caricato nulla.
Come si usa
- Incolla il tuo elenco nella casella, una voce per riga.
- Se l'elenco potrebbe contenere elementi duplicati, è possibile selezionare l'opzione "Rimuovi i duplicati prima di mescolare".
- Per un nuovo ordine completo, basta cliccare su “Shuffle”. Per selezionare i vincitori, seleziona l’opzione “N elementi” e imposta il numero di elementi da estrarre.
- Copia il risultato — clicca di nuovo su “Mescola” in qualsiasi momento per ottenere un nuovo ordine casuale o un nuovo sorteggio.
Esempio
Input
Alice
Bob
Charlie
Diana
EthanRisultato
A randomly reordered list such as Charlie, Ethan, Alice, Diana, Bob — different every time you click Shuffle.Con la modalità "winner-picker" impostata su 2, lo stesso input potrebbe invece produrre solo Ethan e Alice: un'estrazione casuale di 2 elementi, non una porzione di 2 elementi di un unico ordine mescolato.
Perché un rimescolamento ingenuo produce risultati distorti
sort(() => Math.random() - 0.5) è un trucco comune che sembra corretto ma non lo è: si basa sul fatto che l'algoritmo di ordinamento chiami il comparatore un numero specifico di volte secondo uno schema specifico, e le implementazioni reali dell'ordinamento non lo garantiscono. L'effetto pratico è una rimescolatura in cui determinati ordinamenti compaiono più spesso di altri — abbastanza sottile da sfuggire a una rapida occhiata, ma statisticamente misurabile su un numero elevato di esecuzioni.
L'algoritmo di Fisher–Yates aggira l'intero problema: invece di chiedere a un algoritmo di ordinamento di generare casualità in modo indiretto, scambia direttamente ogni posizione con una delle restanti posizioni casuali esattamente una volta, il che è dimostrabilmente uniforme indipendentemente dall'implementazione dell'ordinamento del linguaggio sottostante.
Domande frequenti
Perché non usare semplicemente `array.sort(() => Math.random() - 0.5)`?
Quella riga di codice è un anti-pattern ben noto: il metodo sort() di JavaScript non garantisce che ogni coppia di elementi venga confrontata lo stesso numero di volte, quindi l’ordine risultante è sensibilmente sbilanciato verso determinate permutazioni — alcuni elementi finiscono con maggiore probabilità all’inizio o alla fine rispetto a quanto avverrebbe in condizioni di vera casualità. L'algoritmo di Fisher–Yates evita completamente questo problema per sua stessa natura, ed è proprio l'algoritmo che questo strumento implementa effettivamente.
L'ordine di riproduzione casuale è davvero imparziale?
Sì. L'algoritmo di Fisher–Yates percorre la lista una volta e, ad ogni passo, scambia l'elemento corrente con un elemento scelto in modo casuale e uniforme dalla porzione rimanente non ancora rimescolata. È matematicamente dimostrato che, data una buona fonte di casualità (come la funzione Math.random() di JavaScript), questo procedimento produce ogni possibile ordinamento con uguale probabilità.
Qual è la differenza tra la modalità "shuffling" e quella "winner-picker"?
La modalità "Shuffle" riorganizza tutti gli elementi dell'elenco e li mostra tutti, ma in un nuovo ordine. La modalità "Winner-picker" estrae a caso solo N elementi e mostra solo quelli: è utile quando si desidera selezionare un numero fisso di vincitori o campioni senza rivelare l'intero elenco riorganizzato.
Posso utilizzarlo per un vero e proprio concorso a premi o una lotteria?
Sì, per omaggi e estrazioni informali questo metodo funziona bene, poiché la casualità è effettivamente uniforme. Per un concorso a premi regolamentato dalla legge con premi in denaro, verifica la normativa locale: alcune giurisdizioni richiedono una procedura di estrazione specifica e verificabile.
La rimozione dei duplicati modifica il mio elenco originale?
No — la deduplicazione riguarda solo l'output rimescolato e solo quando la casella di controllo è selezionata. L'elenco di input rimane esattamente come l'hai digitato, quindi puoi attivare o disattivare l'opzione e rimescolare l'elenco senza dover digitare nuovamente nulla.