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
Susan Sarandonoriginal
2024-11-26 02:55:10511parcourir

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)

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
}

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!

Déclaration:
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