Het alfabet bestaat uit 26 karakters, terwijl het toetsenbord van een mobiele telefoon of een GPS doorgaans veel minder toetsen bevat. Om op dergelijke toestellen toch makkelijk woorden te kunnen intoetsen, werd oorspronkelijk gebruikgemaakt van de zogenaamde MultiTap techniek. Het principe is eenvoudig: op elke toets worden drie of meer letters afgebeeld (2=ABC, 3=DEF, 4=GHI, 5=JKL, 6=MNO, 7=PQRS, 8=TUV, 9=WXYZ). Om de gewenste letter te krijgen, moet je de toets waarop de letter wordt afgebeeld één of meer keer indrukken, afhankelijk van de positie van de letter op de toets.

multitab_keyboard
multitab_keyboard

Stel dat je bijvoorbeeld de letter A wilt typen. Dan moet je één keer op toets 2 drukken (voorgesteld als "2"). Wil je echter een B typen, dan moet je twee keer kort na elkaar op toets 2 drukken (voorgesteld als "22"). Om na elkaar twee letters te typen die op dezelfde toets worden afgebeeld, moet de gebruiker een korte pauze inlassen alvorens dezelfde toets opnieuw in te drukken. We zullen een spatie gebruiken om een dergelijke pauze voor te stellen. Op die manier staat "2 2" voor AA, terwijl "22" staat voor B.

We houden het bij eenvoudige boodschappen die enkel bestaan uit letters (a-z) en spaties. Spaties worden ingegeven door op toets 0 te drukken. Het woord "de" wordt dan gecodeerd als "3 33", het woord "het" wordt gecodeerd als "44338", de tekst "foo  bar" (met twee spaties) wordt gecodeerd als "333666 6660022 2777", en de tekst "inleiding informatica" wordt gecodeerd als "44466555334443444664044466333666777628444222 2". Merk dus op dat tussen twee opeenvolgende spaties geen pauze moet ingelast worden, of met andere woorden dat tussen twee opeenvolgende nullen geen spatie moet geplaatst worden (zie onderlijnd fragment).

Opgave

  1. Declareer als volgt een globale variabele toetsen

    toetsen = {0:' ', 2:'ABC', 3:'DEF', 4:'GHI', 5:'JKL', 
               6:'MNO', 7:'PQRS', 8:'TUV', 9:'WXYZ'}
  2. Maak optimaal gebruik van de variabele toetsen om een functie letter2cijfers te schrijven, waaraan een letter of een spatie als argument kan doorgegeven worden. Deze functie moet als resultaat de MultiTap cijferreeks teruggeven die correspondeert met de gegeven letter. Zo moet de functie voor de letter B de string 22 teruggeven, en moet de functie voor een gegeven spatie een string die enkel bestaat uit het cijfer 0 teruggeven. De functie moet zowel met hoofdletters als kleine letters kunnen werken. Probeer het aantal voorwaarden dat deze functie moet testen zo klein mogelijk te houden.

  3. Maak optimaal gebruik van de variabele toetsen om een functie cijfers2letter te schrijven, waaraan een MultiTap cijferreeks als stringargument moet doorgegeven worden. Deze functie moet als resultaat de corresponderende hoofdletter of een spatie teruggeven. Zo moet de functie voor de cijferreeks 333 de hoofdletter F teruggeven, en moet de functie voor het cijfer 0 een spatie teruggeven. Probeer het aantal voorwaarden dat deze functie moet testen zo klein mogelijk te houden.

  4. Gebruik de functie letter2cijfers om een functie codeerMultiTap te schrijven, die een gegeven tekst omzet naar de corresponderende MultiTap cijferreeks. Zo moet de functie als resultaat de string  "44466555334443444664044466333666777628444222 2" teruggeven voor de gegeven tekst "inleiding informatica".

  5. Gebruik de functie cijfers2letter om een functie decodeerMultiTap te schrijven, die een gegeven MultiTap cijferreeks omzet naar de corresponderende tekst, waarin alle letters hoofdletters zijn. Zo moet de functie als resultaat de tekst "INLEIDING INFORMATICA" teruggeven voor de gegeven string "44466555334443444664044466333666777628444222 2".

Voorbeeld

>>> letter2cijfers('B')
'22'
>>> cijfers2letter('333')
'F'
>>> codeerMultiTap('inleiding informatica')
'44466555334443444664044466333666777628444222 2'
>>> decodeerMultiTap('44466555334443444664044466333666777628444222 2')
'INLEIDING INFORMATICA'