PROG0560 - Rövarspråket
Rövarspråket (English: The Robber Language) is a Swedish language game. It became popular after the books about Kalle Blomkvist by Astrid Lindgren, where the children use it as a code, both at play and in solving actual crimes.
The principle is easy enough. Every group of successive consonants is doubled, and the letter o is inserted in between the two repetitions of the group. In case a group of successive consonants contains uppercase letters, they are converted into their corresponding lowercase variants in the second repetition of the group. All vowels and non-letter characters are left intact.
Consider for example the term robber language, where we have underlined the six groups of successive consonants. If we convert this term into Rövarspråket, we get
rorobbobberor lolangonguagoge
where we have underlined the groups of successive consonants once more. Needless to say, the code is not very useful in written form, but it can be tough when spoken by a trained (and thus quick) user. On the other hand, for an untrained speaker, a word or phrase can often be something of a tongue-twister or a shibboleth.
Today, the books of Astrid Lindgren — and the subsequent films — are so well known in Sweden and Norway, that the language has become integrated in the culture of schoolchildren. Most Scandinavians are familiar with it.
Assignment
In this assignment we define the vowels as the letters a, e, i, o and u. All other letters of the alphabet are the consonants, including the letter y which sometimes is considered to be a vowel in the English language. Your task:
- Write a function encode that takes an English sentence and must return the sentence translated into Rövarspråket.
- Write a function decode that takes a sentence in Rövarspråket and must return the sentence translated back into plain English.
Example
>>> encode('robber language') 'rorobbobberor lolangonguagoge' >>> encode('Kalle Blomkvist') 'Kokallolle Bloblomkvomkvistost' >>> encode('Astrid Lindgren') 'Astrostridod Lolindgrondgrenon' >>> decode('rorobbobberor lolangonguagoge') 'robber language' >>> decode('Kokallolle Bloblomkvomkvistost') 'Kalle Blomkvist' >>> decode('Astrostridod Lolindgrondgrenon') 'Astrid Lindgren'
The following animation illustrates how the text fragment Kalle Blomkvist can be translated into Rövarspråket. We refer to the specific tips & tricks on this assignment for a more detailed explanation about the strategy used.
The following animation illustrates how the translated version of the text fragment might be translated back into plain English.
Rövarspråket (Zweeds voor dieventaaltje) is een Zweeds taalspelletje. Het is erg populair geworden dankzij de boeken van schrijfster Astrid Lindgren over Kalle Blomkvist, waarin kinderen het als een soort codetaal gebruiken tijdens hun spelletjes.
Het principe is heel eenvoudig. Elke groep van opeenvolgende medeklinkers wordt verdubbeld, met de letter o tussen de twee herhalingen van de groep. Indien een groep van opeenvolgende medeklinkers hoofdletters bevat, dan worden deze bij de tweede herhaling omgezet naar hun corresponderende kleine letters. Alle klinkers en andere lettertekens blijven ongewijzigd.
Neem bijvoorbeeld het woord dieventaaltje. Daarin hebben we reeds de vier groepen opeenvolgende medeklinkers onderlijnd. Als we dit woord omzetten naar Rövarspråket, dan krijgen we
dod-ie-vov-e-ntont-aa-ltjoltj-e
waarbij we de groepen opeenvolgende medeklinkers nog eens extra onderlijnd hebben. Het spreekt voor zich dat een geschreven vorm van Rövarspråket niet zeer nuttig is. De codetaal is echter zeer moeilijk te doorgronden als ze wordt gesproken door iemand die erin getrained is om ze zeer snel uit te spreken. Anderzijds is een woord of een zin die moet uitgesproken worden in Rövarspråket vaak een echte tongbreker of sjibbolet voor iemand die er niet echt in thuis is.
De boeken van Astrid Lindgren — en de verfilmingen van die boeken — zijn zo bekend in Zweden en Noorwegen, dat Rövarspråket er zowat cultureel erfgoed geworden is die behoort tot de algemene kennis van schoolkinderen. De meeste Scandinaviërs zullen er dan ook zeer vertrouwd mee zijn.
Opgave
In deze opgave definiëren we de klinkers als de letters a, e, i, o en u. Alle overige letters van het alfabet vormen de medeklinkers, dus inclusief de letter y die in het Engels soms ook als klinker beschouwd wordt. Gevraagd wordt:
- Schrijf een functie codeer waaraan een zin moet doorgegeven worden. De functie moet de zin vertaald naar Rövarspråket teruggeven.
- Schrijf een functie decodeer waaraan een zin in Rövarspråket moet doorgegeven worden. De functie moet de originele zin teruggeven.
Voorbeeld
>>> codeer('dieventaaltje') 'dodievoventontaaltjoltje' >>> codeer('Kalle Blomkvist') 'Kokallolle Bloblomkvomkvistost' >>> codeer('Astrid Lindgren') 'Astrostridod Lolindgrondgrenon' >>> decodeer('dodievoventontaaltjoltje') 'dieventaaltje' >>> decodeer('Kokallolle Bloblomkvomkvistost') 'Kalle Blomkvist' >>> decodeer('Astrostridod Lolindgrondgrenon') 'Astrid Lindgren'
Onderstaande animatie illustreert bijvoorbeeld hoe het tekstfragment Kalle Blomkvist kan omgezet worden naar Rövarspråket. Voor meer uitleg bij de gebruikte strategie verwijzen we naar de specifieke tips & tricks voor deze opgave.
Onderstaande animatie illustreert hoe de vertaalde versie van het tekstfragment in Rövarspråket terug kan omgezet worden naar de oorspronkelijke tekst.
Added by: | Peter Dawyndt |
Date: | 2015-09-29 |
Time limit: | 10s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | PY_NBC |