Generieren aller möglichen n-stelligen Passwörter in Go
Um alle möglichen Passwörter einer bestimmten Länge mit Zeichen aus einem bestimmten Satz in Go zu generieren , muss das Konzept des n-ären kartesischen Produkts verwendet werden. Im Wesentlichen geht es dabei darum, ein kartesisches Produkt einer Menge mit sich selbst n-mal zu konstruieren.
Der Ansatz ist iterativ. Zunächst wird das kartesische Produkt n-1 konstruiert. Dann wird für jedes Produkt und jedes Element der Anfangsmenge das Element zum Produkt hinzugefügt. Betrachten Sie beispielsweise die Generierung aller dreistelligen Passwörter mit den Zeichen „a“ und „b“:
Die folgende Go-Funktion, NAryProduct, implementiert diese iterative Konstruktion:
import ( "fmt" "strings" ) 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 }
Beispielverwendung:
fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
Beachten Sie, dass die bereitgestellte Lösung durch die Vermeidung einer Neuberechnung weiter optimiert werden kann von zuvor berechneten Mengen.
Das obige ist der detaillierte Inhalt vonWie generiere ich in Go alle möglichen n-stelligen Passwörter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!