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

Linda Hamilton
リリース: 2024-11-23 22:25:14
オリジナル
356 人が閲覧しました

How to Generate All Possible n-Character Passwords in Go?

Go ですべての可能な n 文字のパスワードを生成する

Go で指定されたセットの文字を使用して、指定された長さのすべての可能なパスワードを生成するには、n 進デカルト積の概念を使用する必要があります。基本的に、これには、セットとそれ自体のデカルト積を n 回構築することが含まれます。

このアプローチは反復的です。 n-1 デカルト積が最初に構築されます。次に、初期セットの各プロダクトおよび各要素に対して、その要素がプロダクトに追加されます。たとえば、文字「a」と「b」を使用したすべての 3 文字のパスワードの生成を考えてみます。

  • {'a', 'b'} の 1 文字のデカルト積は { 'a', 'b'}.
  • 2 文字のデカルト積は {('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')}.
  • 3 文字のデカルト積は {('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 関数 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 サイトの他の関連記事を参照してください。

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