Heim > Artikel > Backend-Entwicklung > Wie kann ich in Go alle möglichen N-Zeichen-Passwörter generieren?
Generieren aller möglichen N-Zeichen-Passwörter in Go
In Python kann man die Funktion itertools.product() verwenden, um alle möglichen zu generieren Passwörter mit fester Länge. Um beispielsweise zweistellige Passwörter mit den Zeichen A-E zu erstellen, könnte man Folgendes verwenden:
from itertools import product for permutation in product('ABCDE', repeat=2): print(permutation)
In Go kann die Aufgabe des Generierens von Passwörtern jedoch durch einen anderen Ansatz gelöst werden:
Die gewünschte Operation ist im Wesentlichen ein n-äres kartesisches Produkt einer Menge mit sich selbst. Um beispielsweise alle dreistelligen Passwörter zu erstellen, benötigen wir Prod(set,set,set). Dies kann iterativ konstruiert werden.
Zuerst erstellen wir unser n-1-Produkt, dann hängen wir für jedes Produkt und jedes Element des Originalsatzes dieses Element an. Lassen Sie uns die Generierung eines 2- bis 3-stelligen Passworts demonstrieren:
"ab" = {a,b} -> {(a,a),(a,b),(b,a),(b,b)} -> {(a,a,a),(a,a,b),(a,b,a),(a,b,b),(b,a,a),(b,a,b),( b,b,a),(b,b,b)}
In Go können wir dies wie folgt implementieren:
func NAryProduct(input string, n int) []string { if n <= 0 { return nil } prod := make([]string, len(input)) for i, char := range input { prod[i] = string(char) } for i := 1; i < n; i++ { next := make([]string, 0, len(input)*len(prod)) for _, word := range prod { for _, char := range input { next = append(next, word+string(char)) } } prod = next } return prod }
Diese Lösung kann durch die Nutzung einer verzögerten Auswertung weiter optimiert werden. Reduzierung der Speichernutzung. Hier ist ein Playground-Link als Referenz: http://play.golang.org/p/6LhApeJ1bv
Das obige ist der detaillierte Inhalt vonWie kann ich in Go alle möglichen N-Zeichen-Passwörter generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!