Een geheime boodschap wordt als volgt gecodeerd. Eerst worden enkel de letters van de boodschap overgehouden en achter elkaar geschreven. Op die manier komen er geen spaties, leestekens en andere karakters meer in de boodschap voor. De letters uit deze gereduceerde boodschap worden dan eerst kolom per kolom neergeschreven in een afgesproken aantal kolommen k, en aangevuld met willekeurige letters zodat een rechthoekig rooster gevormd wordt. Zo wordt de boodschap "Always look on the bright side of life." bijvoorbeeld op de volgende manier neergeschreven over vijf kolommen:
a o e s i l o b i f w k r d e a o i e x y n g o x s t h f x l h t l x
Merk hierbij op dat alle letters uit de boodschap werden omgezet naar kleine letters, en dat de letter x gebruikt werd om ervoor te zorgen dat de letters in een rechthoekig rooster van vijf kolommen passen (aanvulling met andere letters is ook toegelaten). Op basis van het letterrooster wordt de boodschap gecodeerd door de letters in elke rij achter elkaar te schrijven, afwisselend van-links-naar-rechts en van-recht-naar-links. De boodschap die we hierboven als voorbeeld gebruikt hebben, wordt dan als volgt gecodeerd:
aoesifibolwkrdexeioayngoxxfhtslhtlx
Kan je de oorspronkelijke boodschap (inclusief de willekeurige letters die gebruikt werden als aanvulling van het rooster) afleiden uit de gecodeerde boodschap?
Schrijf een functie decodeer waaraan een gecodeerde boodschap als argument moet doorgegeven worden. Deze gecodeerde boodschap werd versleuteld op basis van de hierboven beschreven heen-en-weer codering met een gegeven aantal kolommen $$k$$, dat als tweede argument aan de functie moet doorgegeven worden. De functie moet de ontcijferde boodschap als resultaat teruggeven, waarbij de letters die gebruikt werden om het letterrooster tijdens de codering op te vullen in de ontcijferde boodschap moeten achterblijven.
>>> decodeer('aoesifibolwkrdexeioayngoxxfhtslhtlx', 5)
'alwayslookonthebrightsideoflifexxxx'
>>> decodeer('aohpdntilirndsnefxxftgonomceexxrloewftmyex', 6)
'andnowforsomethingcompletelydifferentxxxxx'