Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menjana Semua Kata Laluan-n-Watak Kemungkinan dalam Go?

Bagaimana untuk Menjana Semua Kata Laluan-n-Watak Kemungkinan dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-23 22:25:14358semak imbas

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

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':

  • Produk Cartesian 1 aksara {'a', 'b'} ialah { 'a', 'b'}.
  • Produk Cartesian 2 aksara ialah {('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')}.
  • Produk Cartesan 3 aksara ialah {('a', 'a', ' a'), ('a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b' , 'a', 'a'), ('b', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', '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!

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