Go での可能なすべての N 文字パスワードの生成
Python では、 itertools.product() 関数を使用して、可能なすべての N 文字パスワードを生成できます固定長のパスワード。たとえば、文字 A ~ E を使用して 2 文字のパスワードを作成するには、
from itertools import product for permutation in product('ABCDE', repeat=2): print(permutation)
を使用できます。ただし、Go では、パスワードを生成するタスクは別のアプローチで実行できます:
目的の演算は本質的に、それ自体とのセットの n 値デカルト積です。たとえば、すべての 3 文字のパスワードを作成するには、 Prod(set,set,set) が必要です。これは繰り返し構築できます。
最初に n-1 個の積を作成し、次に元のセットの各積と各要素に対してその要素を追加します。 2 文字から 3 文字のパスワードを生成する例を示します。
"ab" = {a,b} -> {(a,a),(a,b),(b,a),(b,b)} -> {(a,a,a),(a,a,b),(a,b,a),(a,b,b),(b,a,a),(b,a,b),( b,b,a),(b,b,b)}
Go では、これを次のように実装できます。
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 }
このソリューションは、遅延評価を活用することでさらに最適化できます。減らすメモリの使用量。参照用のプレイグラウンドのリンクは次のとおりです: http://play.golang.org/p/6LhApeJ1bv
以上がGo で考えられるすべての N 文字のパスワードを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。