Go ですべての可能な n 文字のパスワードを生成する
Go で指定されたセットの文字を使用して、指定された長さのすべての可能なパスワードを生成するには、n 進デカルト積の概念を使用する必要があります。基本的に、これには、セットとそれ自体のデカルト積を n 回構築することが含まれます。
このアプローチは反復的です。 n-1 デカルト積が最初に構築されます。次に、初期セットの各プロダクトおよび各要素に対して、その要素がプロダクトに追加されます。たとえば、文字「a」と「b」を使用したすべての 3 文字のパスワードの生成を考えてみます。
次の Go 関数 NAryProduct は、この反復を実装します。構築:
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 }
使用例:
fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
提供されたソリューションは、以前に計算されたセットの再計算を回避することでさらに最適化できることに注意してください。
以上がGo で考えられるすべての n 文字のパスワードを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。