> 백엔드 개발 > Golang > Go에서 가능한 모든 N자 비밀번호를 어떻게 생성할 수 있나요?

Go에서 가능한 모든 N자 비밀번호를 어떻게 생성할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-26 02:55:10
원래의
546명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿