Rotatie is een zwakke vorm van encryptie die erin bestaat om elke letter van een woord te 'roteren'. Een letter roteren is zoveel als het verschuiven van de letter over een vast aantal posities $$r \in \mathbb{N}$$ in het alfabet. Wanneer $$r > 0$$ dan spreekt men van een rotatie naar rechts, en voor $$r < 0$$ spreekt men van een rotatie naar links. Hierbij wordt het alfabet als een circulaire lijst beschouwd, wat erop neerkomt dat na de letter z terug de letter a volgt (bij schuiven naar rechts), en dat de letter a dus voorafgegaan wordt door de letter z (bij schuiven naar links).

De rotatie van het woord monty over drie posities levert het woord prqwb. Hierbij zie je bijvoorbeeld dat drie posities rechts van de letter m in het alfabet de letter p staat, en dat door het circulair beschouwen van de lijst de letter b drie posities rechts van de letter y staat. Twee woorden worden geroteerde woorden genoemd indien er een $$r$$-rotatie ($$r \in \mathbb{N}$$) bestaat die het eerste woord omzet in het tweede woord. Zo zijn cobra en freud voorbeelden van geroteerde woorden, omdat een 3-rotatie van het woord cobra het woord freud oplevert. Merk op dat ook een (-3)-rotatie of een 23-rotatie van het woord freud het woord cobra oplevert. De eigenschap van de geroteerde woorden is met andere woorden symmetrisch.

Opgave

Voor deze opdracht werken we enkel met woorden die uitsluitend uit kleine letters bestaan. Je opdracht bestaat erin om uit een lijst van woorden alle geroteerde woorden te vissen. Hiervoor ga je als volgt te werk:

Voorbeeld

>>> rotatie('hal', 1)
'ibm'
>>> rotatie('monty', 3)
'prqwb'
>>> rotatie('python', 33)
'wfaovu'
>>> rotatie('shrubbery', -3)
'peoryybov'

>>> woordstam('hal')
'ate'
>>> woordstam(woord='monty', beginletter='x')
'xzyej'
>>> woordstam('python')
'ajeszy'
>>> woordstam('shrubbery', beginletter='f')
'fuehoorel'

>>> geroteerdeWoorden(['bubba', 'primero', 'fyffe', 'pippo', 'sulphur'])
{('primero', 'sulphur'), ('bubba', 'fyffe', 'pippo')}
>>> geroteerdeWoorden(['beowulf', 'harahan', 'leveler', 'rhesian'])
{('harahan', 'leveler')}