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

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

Susan Sarandon
Libérer: 2024-11-26 02:55:10
original
549 Les gens l'ont consulté

How Can I Generate All Possible N-Character Passwords in Go?

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

En Python, on peut utiliser la fonction itertools.product() pour générer tous les mots de passe possibles. mots de passe d'une longueur fixe. Par exemple, pour créer des mots de passe à 2 caractères en utilisant les caractères A-E, on pourrait utiliser :

from itertools import product
for permutation in product('ABCDE', repeat=2):
    print(permutation)
Copier après la connexion

Cependant, dans Go, la tâche de génération de mots de passe peut être réalisée par une approche différente :

L’opération souhaitée est essentiellement un produit cartésien n-aire d’un ensemble avec lui-même. Par exemple, pour créer tous les mots de passe à 3 caractères, nous avons besoin de Prod(set,set,set). Cela peut être construit de manière itérative.

Dans un premier temps, nous créons notre produit n-1, puis pour chaque produit et chaque élément de l'ensemble d'origine, nous ajoutons cet élément. Montrons avec une génération de mot de passe de 2 à 3 caractères :

"ab" = {a,b} -> {(a,a),(a,b),(b,a),(b,b)} -> {(une,une,une),(une,une,b),(une,b,une),(une,b,b),(b,une,une),(b,une,b),( b,b,a),(b,b,b)}

Dans Go, nous pouvons implémenter cela comme :

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

Cette solution peut être encore optimisée en tirant parti de l'évaluation paresseuse, réduisant l'utilisation de la mémoire. Voici un lien vers un terrain de jeu pour référence : http://play.golang.org/p/6LhApeJ1bv

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