Submit | All submissions | Best solutions | Back to list |
PROG0025 - To And fro |
A secret message is coded as follows. First, only the letters of the message are kept and written one next to another. This way, there are no more spaces, punctuation marks and other characters in the message; The letters from this reduced message are then first written column per column in a fixed set of columns k, and are completed with random letters, so that a rectangle grid is formed. Consequentially, the message "Always look on the bright side of life.", for example, is written as follows over 5 columns:
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
Note that all letters from the message were converted to lowercase letters, and that the letter x is used to make sure that the letters fit a rectangle grid of five columns (it is allowed to fill the grid with other letters). Based on the letter grid, the message is coded writing the letters next to each other in each row, alternating from left to right and from right to left. The message we used above, is coded as follows:
aoesifibolwkrdexeioayngoxxfhtslhtlx
Can you trace back the original message (including the random letters that were used as fillers in the grid) from the coded message?
Assignment
Write a function decode, to which a coded message has to be passed as an argument. This coded message was encrypted using the principle described above (to-and-fro coding with a given number of columns $k$), which has to be given to the function as a second argument. As a result, the function has to return the deciphered message. The letters that were used as fillers for the letter grid should remain in the deciphered message.
Example
>>> decode('aoesifibolwkrdexeioayngoxxfhtslhtlx', 5) 'alwayslookonthebrightsideoflifexxxx' >>> decode('aohpdntilirndsnefxxftgonomceexxrloewftmyex', 6) 'andnowforsomethingcompletelydifferentxxxxx'
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?
Opgave
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.
Voorbeeld
>>> decodeer('aoesifibolwkrdexeioayngoxxfhtslhtlx', 5) 'alwayslookonthebrightsideoflifexxxx' >>> decodeer('aohpdntilirndsnefxxftgonomceexxrloewftmyex', 6) 'andnowforsomethingcompletelydifferentxxxxx'
Added by: | Peter Dawyndt |
Date: | 2011-07-19 |
Time limit: | 5s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | |
Resource: | None |