ホームページ > バックエンド開発 > Golang > Go で考えられるすべての N 文字のパスワードを生成するにはどうすればよいですか?

Go で考えられるすべての N 文字のパスワードを生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-26 02:55:10
オリジナル
549 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート