Om een boodschap om te zetten in onleesbare wartaal kan gebruikgemaakt worden van een codeertechniek die triplerotatie genoemd wordt. De triplerotatie maakt gebruik van drie natuurlijke getallen $$k_1$$, $$k_2$$ en $$k_3$$ die de sleutel tot het geheimschrift vormen. Om een gegeven boodschap te coderen, worden de karakters van de boodschap onderverdeeld in drie groepen: de letters a tot en met i vormen de eerste groep (zowel hoofdletters als kleine letters), de letters j tot en met r de tweede groep (opnieuw zowel hoofdletters als kleine letters), en alle andere karakters (inclusief cijfers, spaties en leestekens) vormen de derde groep. Binnen groep $$i$$ ($$i = 1, 2, 3$$) worden alle karakters daarna $$k_i$$ posities naar links opgeschoven, waarbij de karakters die links uitvallen aan de rechterkant geplaatst worden. Hierbij wordt elke groep dus geroteerd onafhankelijk van de andere twee groepen. Het decoderen gebeurt dan op basis van een rotatie met $$k_i$$ posities naar rechts binnen elke groep $$i$$ ($$i = 1, 2, 3$$).
Neem bijvoorbeeld de boodschap
Nobody expects the Spanish Inquisition!
die we willen coderen volgens de triplerotatie met $$k_1 = 2$$, $$k_2 = 3$$ en $$k_3 = 1$$. Voor deze boodschap wordt groep 1 gevormd door de reeks letters b, d, e, e, c, h, e, a, i, h, I, i, i, i die voorkomen op posities 3, 5, 8, 11, 12, 17, 18, 22, 24, 26, 28, 32, 34, 36 in de boodschap. We schuiven alle letters van deze groep $$k_1 = 2$$ posities naar links, waarbij de letters b en d die links uitgeschoven worden achteraan de reeks worden toegevoegd. Dit resulteert voor groep 1 in de nieuwe letterreeks e, e, c, h, e, a, i, h, I, i, i, i, b, d, die dan terug op de originele posities van groep 1 geplaatst worden. Deze stap van de procedure wordt geïllustreerd in onderstaande figuur.
Wanneer dezelfde procedure wordt uitgevoerd voor groep 2 met $$k_2 = 3$$ en voor groep 3 met $$k_3 = 1$$, dan leest de gecodeerde boodschap als
ppene xctnhes t aiSsqhoI iuinNsitb!dooy
Krijg daar maar eens kop of staart aan.
Schrijf een functie codeer die kan gebruikt worden om een gegeven zin te coderen volgens het principe van de triplerotatie. Aan deze functie moeten vier argumenten doorgegeven worden: een zin (str), en de waarden $$k_1$$, $$k_2$$ en $$k_3$$ (int) die gebruikt moeten worden bij de triplerotatie. De functie moet de gecodeerde zin (str) als resultaat teruggeven.
Schrijf een functie decodeer die kan gebruikt worden om een zin die gecodeerd werd volgens het principe van de triplerotatie terug te decoderen. Aan deze functie moeten vier argumenten doorgegeven worden: een gecodeerde zin (str), en de waarden $$k_1$$, $$k_2$$ en $$k_3$$ (int) die gebruikt werden voor de triplerotatie. De functie moet de originele zin (str) als resultaat teruggeven.
>>> codeer('Nobody expects the Spanish Inquisition!', 2, 3, 1)
'ppene xctnhes t aiSsqhoI iuinNsitb!dooy'
>>> decodeer('ppene xctnhes t aiSsqhoI iuinNsitb!dooy', 2, 3, 1)
'Nobody expects the Spanish Inquisition!'