Maison > développement back-end > Golang > Comment générer tous les mots de passe à n caractères possibles dans Go ?

Comment générer tous les mots de passe à n caractères possibles dans Go ?

Linda Hamilton
Libérer: 2024-11-23 22:25:14
original
412 Les gens l'ont consulté

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

Générer tous les mots de passe possibles à n caractères dans Go

Pour générer tous les mots de passe possibles d'une longueur spécifiée en utilisant les caractères d'un ensemble donné dans Go , le concept de produit cartésien n-aire doit être utilisé. Essentiellement, cela implique de construire un produit cartésien d'un ensemble avec lui-même n fois.

L'approche est itérative. Le produit cartésien n-1 est d'abord construit. Ensuite, pour chaque produit et chaque élément de l'ensemble initial, l'élément est ajouté au produit. Par exemple, considérons la génération de tous les mots de passe à 3 caractères en utilisant les caractères « a » et « b » :

  • Le produit cartésien à 1 caractère de {'a', 'b'} est { 'a', 'b'}.
  • Le produit cartésien à 2 caractères est {('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')}.
  • Le produit cartésien à 3 caractères est {('a', 'a', ' a'), ('a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b' , 'a', 'a'), ('b', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', 'b') }.

La fonction Go suivante, NAryProduct, implémente cette construction itérative :

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
}
Copier après la connexion

Exemple utilisation :

fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
Copier après la connexion

Notez que la solution fournie peut être encore optimisée en évitant le recalcul des ensembles précédemment calculés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal