Maison >développement back-end >Golang >Comment générer tous les mots de passe à n caractères possibles dans 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 » :
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 }
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]
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!