Visto che non ti piace il loop per la ricerca del carattere non usato, te l'ho tolto.
Giusto; in quel modo le routine sono molto più veloci.
Ancora non è il metodo ideale - in generale, non nel caso specifico - perché se dovessi eseguire l'operazione più di una volta, dovresti reinizializzare i dati iniziali, che in questo caso sono solo due stringhe, quella numerica e quella letterale, perché vengono man mano accorciate se non azzerate.
Anche questo non è un problema, a meno che tu non debba eseguire tutta l'operazione centinaia/migliaia di volte al minuto, ad esempio e, soprattutto, che i dati a disposizione siano appunto solo due stringhe non lunghe di caratteri.
Il metodo "giusto", o meglio il più veloce, è usare un array (che tra l'altro potrebbe contenere qualunque cosa).
Esempio:
Ho un array composto da 30 elementi: Elems(30)
(riempio l'array soltanto una volta, all'inizio).
Imposto una variabile globale (a livello di modulo) sul numero di elementi:
Private mNumElems As Int = 30
Cerco un elemento in modo casuale:
Index = Rnd(0, mNumElems)
Trovato = Elems(Index)
Eseguo lo "swapping" (scambio) tra l'elemento dell'array trovato e l'ultimo nell'array:
Elems(Index) = Elems(mNumElems - 1) ' "sposto" l'ultimo elemento nel posto di quello appena trovato
Elems(mNumElems - 1) = Trovato ' metto l'elemento trovato nell'ultimo posto dell'array
Decremento di 1 mNumElems, così al prossimo "giro", la Rnd non lo terrà più in considerazione, quindi non verrà utilizzato di nuovo:
mNumElems = mNumElems - 1
In questo modo, il prossimo elemento verrà ancora prelevato con:
Index = Rnd(0, mNumElems)
Trovato = Elems(Index)
ma mNumElems varrà 29, il 30°, già usato, non potrà venire "puntato", preso di nuovo. Inoltre, l'array continuerà ad avere 30 elementi, senza doverlo riempire di nuovo (appunto come dovresti fare con le due stringhe che invece vengono "accorciate").
Dovendo eseguire tutta l'operazione più volte, non dovrò caricare di nuovo l'array iniziale, dovrò solo reimpostare mNumElems su 30.
E' un algoritmo molto noto, non ho inventato alcunché!!!