Menjana Semua Kemungkinan Kata Laluan-n-Watak dalam Go
Untuk menjana semua kemungkinan kata laluan dengan panjang tertentu menggunakan aksara daripada set yang diberikan dalam Go , konsep produk Cartesian n-ary perlu digunakan. Pada asasnya, ini melibatkan membina produk Cartesian bagi satu set dengan dirinya sendiri n kali.
Pendekatannya adalah berulang. Produk Cartesian n-1 mula-mula dibina. Kemudian, untuk setiap produk dan setiap elemen set awal, elemen itu ditambahkan pada produk. Sebagai contoh, pertimbangkan penjanaan semua kata laluan 3 aksara menggunakan aksara 'a' dan 'b':
Pergi berikut fungsi, NAryProduct, melaksanakan pembinaan berulang ini:
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 }
Contoh penggunaan:
fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
Perhatikan bahawa penyelesaian yang disediakan boleh lebih lanjut dioptimumkan dengan mengelakkan pengiraan semula set yang dikira sebelum ini.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Semua Kata Laluan-n-Watak Kemungkinan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!