Logica per selezionare un set specifico dal set cartesiano

Sto facendo uno strumento per forzare le brute password come esercizio di apprendimento e voglio che sia ripristinabile.

Quindi, quello che voglio è poter dire, questo è l’insieme di possibili caratteri, se ho calcolato il set cartesiano di tutte le possibili combinazioni di questo set alla lunghezza n, qual’è l’insieme al punto x?

Tuttavia, voglio farlo senza calcolare l’intero set. Ho visto la logica simile in un unico posto online, ma non sono riuscito a generalizzare questo per adattarlo.

Qualsiasi aiuto sarebbe fantastico, grazie! Sono fluente in C # se questo aiuta.

Modifica: ecco la domanda che ho menzionato prima: Come selezionare un articolo specifico dal prodotto cartesiano senza calcolare ogni altro articolo

Modifica: ecco un esempio di cosa intendo:

Char set = [abcd] Length n = 4 Permutations: [aaaa] [aaab] [aaac] [aaad] [aaba] .... [dddd] 

Quindi, se cerco il set a 4, otterrei [aaad]. Ma se sto cercando l’elemento 7000, ci vuole molto tempo per arrivare a quel punto.

Questo implementa la risposta alla domanda che colleghi:

 static string Get(string chars, int n, int i) { string ret = ""; int sizes = 1; for (int j = 0; j < n; j++) { ret = chars[(i / sizes) % chars.Length] + ret; sizes *= chars.Length; } return ret; } 

Esempio:

 string chars = "abcd"; int n = 3; for (int i = 0; i < Math.Pow(chars.Length, n); i++) Console.WriteLine(i + "\t" + Get(chars, n, i)); 
 0 aaa 1 aab 2 aac 3 aad ... 61 ddb 62 ddc 63 ddd