Heim > Backend-Entwicklung > Golang > Wie generiere ich in Go alle möglichen n-stelligen Passwörter?

Wie generiere ich in Go alle möglichen n-stelligen Passwörter?

Linda Hamilton
Freigeben: 2024-11-23 22:25:14
Original
413 Leute haben es durchsucht

How to Generate All Possible n-Character Passwords in Go?

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“:

  • Das kartesische Ein-Zeichen-Produkt von {'a', 'b'} ist { 'a', 'b'}.
  • Das zweistellige kartesische Produkt ist {('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')}.
  • Das 3-stellige kartesische Produkt ist {('a', 'a', 'a'), ( 'a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b', 'a', 'a'), ('b', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', '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
}
Nach dem Login kopieren

Beispielverwendung:

fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage