primitive password cracker

Chris Angelico rosuav at gmail.com
Thu Jan 7 19:39:16 EST 2021


On Fri, Jan 8, 2021 at 11:31 AM Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>> Another way to approach this problem is using recursion, e.g.
>> def find_combinations(items, n, comb, result):
> if n == 0:
> result.append(comb)
> else:
> for item in items:
> find_combinations(items, n - 1, comb + [item], result)
>> words = []
> find_combinations(['a', 'b', 'c'], 3, [], words)
> print(words)
>
True, but I'd much rather write it as a generator:
def permute(items, n):
 if not n:
 yield ""
 return
 # Optional performance enhancement:
 if n == 1: return (yield from items)
 for item in items:
 for rest in permute(items, n - 1):
 yield item + rest
words = list(permute("abc", 3))
I'm not sure how performance would go, but this is a lot cleaner.
ChrisA


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /