I'm trying to generate a lazily iterable collection of Vigenere cipher keys of length r. I'm aware of itertools
and the permutations()
method. However, this generates keys such as ABCD
, ABCE
, ABCF
... but it will never do something like AABC
.
So basically, I need tuples or strings of characters that aren't repetitive (that is, a repetitive key can be cut in half to get two identical halves), but can contain duplicate characters. Good example: AABABA
, not AABAAB
.
How can I create such a collection that won't generate keys like this, and is lazily iterated so I don't blow up my RAM when I want to explore keys longer than 3 characters?
EDIT: fixed up thanks to @PetrViktorin