首頁  >  文章  >  後端開發  >  如何在 Go 中產生所有可能的 N 字元密碼?

如何在 Go 中產生所有可能的 N 字元密碼?

Susan Sarandon
Susan Sarandon原創
2024-11-26 02:55:10493瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn