Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Mungkin dalam 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!