Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Mungkin dalam Go?

Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Mungkin dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-26 02:55:10492semak imbas

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

Menjana Semua Kemungkinan Kata Laluan Aksara N dalam Go

Dalam Python, seseorang boleh menggunakan fungsi itertools.product() untuk menjana semua kemungkinan kata laluan dengan panjang tetap. Contohnya, untuk mencipta kata laluan 2 aksara menggunakan aksara A-E, seseorang boleh menggunakan:

from itertools import product
for permutation in product('ABCDE', repeat=2):
    print(permutation)

Walau bagaimanapun, dalam Go, tugas menjana kata laluan boleh dicapai melalui pendekatan yang berbeza:

Operasi yang diingini pada asasnya ialah produk Cartesian n-ary bagi satu set dengan dirinya sendiri. Sebagai contoh, untuk mencipta semua kata laluan 3 aksara, kita memerlukan Prod(set,set,set). Ini boleh dibina secara berulang.

Pada mulanya, kami mencipta produk n-1 kami, kemudian untuk setiap produk dan setiap elemen set asal, kami menambahkan elemen itu. Mari kita tunjukkan dengan penjanaan kata laluan 2 aksara hingga 3 aksara:

"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)}

Dalam Go, kita boleh melaksanakan ini sebagai:

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
}

Penyelesaian ini boleh dioptimumkan lagi dengan memanfaatkan penilaian malas, mengurangkan ingatan penggunaan. Berikut ialah pautan taman permainan untuk rujukan: http://play.golang.org/p/6LhApeJ1bv

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Mungkin dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn