Double Dutch — ook gekend als Tutnees of de taal van Koning Tut — is een geheimtaal die voornamelijk gebruikt wordt in landen waar Engels wordt gesproken. De regels kunnen echter makkelijk toepasbaar gemaakt worden op vrijwel elke andere taal.
In Double Dutch worden de klinkers van een woord op de normale manier uitgesproken, maar wordt elke medeklinker vervangen door een lettergreep die begint met die medeklinker. Onderstaande tabel bevat enkele voorbeelden van lettergrepen waardoor de medeklinkers kunnen vervangen worden:
letter | lettergrepen |
---|---|
b | bub |
c | cash, coch |
d | dud |
f | fuf, fud |
g | gug |
h | hash, hutch |
j | jay, jug |
letter | lettergrepen |
---|---|
k | kuck, kuk |
l | lul |
m | mum |
n | nun |
p | pub, pup |
q | quack, queue |
r | rug, rur |
letter | lettergrepen |
---|---|
s | sus |
t | tut |
v | vuv |
w | wack, wash |
x | xux |
y | yub, yuck |
z | zub, zug |
In plaats van twee opeenvolgende herhalingen van dezelfde medeklinker in een woord afzonderlijk te vertalen, vertalen we enkel de eerste medeklinker en wordt de vertaling voorafgegaan door de prefix squa om de verdubbeling aan te geven. Bij twee opeenvolgende herhalingen van dezelfde klinker gebruiken we de prefix squat en komt er een extra uitgang h bij. Zo wordt de dubbele klinker oo bijvoorbeeld uitgesproken als squat-oh in Double Dutch.
Als de letter (of de eerste letter van een herhaling van dezelfde letter) die moet vertaald worden een kleine letter is, dan bestaat de vertaling van die letter(s) enkel uit kleine letters. Als de letter (of de eerste letter van een herhaling van dezelfde letter) die moet vertaald worden een hoofletter is, dan bestaat de vertaling van die letter(s) uit een hoofdletter gevolgd door kleine letters.
Zinnen worden woord voor woord vertaald naar Double Dutch, waarbij de woorden gedefinieerd worden als de langst mogelijke opeenvolging van letters. Alle karakters van een zin die geen letter zijn, blijven gewoon staan in de vertaling.
In deze opgave beschouwen we de letters a, e, i, o en u als klinkers, en de overige letters als medeklinkers. De vertaling van alle medeklinkers naar lettergrepen wordt vastgelegd in een tekstbestand waarvan elke regel bestaat uit een medeklinker, een spatie, een koppelteken, nog een spatie en de lettergreep waardoor de medeklinker in Double Dutch moet vervangen worden. Elke medeklinker wordt dus vertaald door één vaste lettergreep. Je oplossing mag er ook van uitgaan dat geen enkel woord meer dan twee opeenvolgende herhalingen van dezelfde letter bevat. Gevraagd wordt:
Schrijf een functie medeklinkers waaraan de locatie moet doorgegeven worden van een tekstbestand dat de vertaling van alle medeklinkers naar lettergrepen vastlegt. De functie moet een dictionary teruggeven die elke medeklinker afbeeldt op de corresponderende lettergreep in Double Dutch, zoals vastgelegd door het gegeven tekstbestand. Indien het gegeven tekstbestand geen geldige vertaling van alle medeklinkers naar lettergrepen bevat, dan moet de functie een AssertionError opwerpen met de boodschap ongeldige vertaling. Dit is het geval als
een regel een letter bevat die geen medeklinker is
een regel een lettergreep bevat die niet begint met de medeklinker op die regel
niet alle medeklinkers van het alfabet voorkomen in het bestand
sommige medeklinkers van het alfabet meerdere keren voorkomen in het bestand
Schrijf een functie vertaalWoord waaraan twee argumenten moeten doorgegeven worden: i) een woord dat enkel bestaat uit letters en ii) een dictionary die elke medeklinker van het alfabet afbeeldt op een lettergreep die begint met die medeklinker. De functie moet de vertaling van het gegeven woord naar Double Dutch teruggeven, gebaseerd op de afbeelding van medeklinkers naar lettergrepen zoals vastgelegd in de gegeven dictionary.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand dutchLetters.txt1 zich in de huidige directory bevindt.
>>> dutchLetter = medeklinkers('dutchLetters.txt')
>>> dutchLetter['s']
'sus'
>>> dutchLetter['q']
'quack'
>>> dutchLetter['d']
'dud'
>>> dutchLetter['e']
Traceback (most recent call last):
KeyError: 'e'
>>> vertaalWoord('took', dutchLetter)
'tutsquatohkuck'
>>> vertaalWoord('BAMBOO', dutchLetter)
'BubAMumBubSquatoh'
>>> vertaalWoord('Yesterday', dutchLetter)
'Yubesustuterugdudayub'
>>> dutchLetter = medeklinkers('dutchLetters.txt')
>>> vertaal('I took a walk to the park yesterday.', dutchLetter)
'I tutsquatohkuck a wackalulkuck tuto tuthashe pubarugkuck yubesustuterugdudayub.'
Het lijkt erop dat de geheimtaal Double Dutch werd uitgevonden door zwarte slaven in het Amerikaanse zuiden. Aan de hand van die taal konden ze leren spellen en in bedekte termen met elkaar spreken, in tijden waarin het voor slaven ten strengste verboden was om geletterd te zijn.
Maya Angelou2 vermeldt in het eerste volume van haar autobiografie I Know Why the Caged Birds Sing3 dat ze als kind Tutnees leerde spreken. Ze vertelt dat zij en haar vriendin Louise
spent tedious hours teaching ourselves the Tut language. You (yack oh you) know (kack nug oh wug) what (wack hash a tut). Since all the other children spoke Pig Latin, we were superior because Tut was hard to speak and even harder to understand.
Vandaag de dag wordt Double Dutch voornamelijk gesproken door kinderen die het gebruiken om te communiceren zonder dat volwassenen kunnen luistervinken, door leden van van oudsher gemarginaliseerde minderheden die om dezelfde reden willen communiceren in aanwezigheid van gezagsdragers zoals de politie (pubolulitutie), of gewoonweg ter vermaak of voor de grap.