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