Op de meeste telefoontoestellen staat er naast een cijfer vaak ook een reeks letters elke toets van het toestel. Doorgaans wordt de volgende afbeelding tussen cijfers en letters gebruikt: 2=ABC, 3=DEF, 4=GHI, 5=JKL, 6=MNO, 7=PQRS, 8=TUV, 9=WXYZ. Op de toetsen 0 en 1 worden geen letters afgebeeld. Dit is ook de afbeelding die we in deze opgave zullen gebruiken. Deze letters werden in het verleden voor verschillende doeleinden gebruikt.
Zo werden deze letters (voornamelijk in de Verenigde Staten) gebruikt als een manier om telefoonnummers makkelijk te kunnen onthouden. Een bedrijf dat bloemen verkocht, kon dan bijvoorbeeld het telefoonnummer 1-800-356-9377 aanvragen en in zijn advertenties gebruikmaken van het beter te onthouden telefoonwoord 1-800-FLOWERS.
Meer recent worden de letters op de toetsen gebruikt om tekst in te geven op mobiele telefoontoestellen. Om een woord in te geven, worden bij toestellen die T9 (Tekst op 9 toetsen) gebruiken, achtereenvolgens de toetsen die corresponderen met elke letter van het woord ingegeven. Wil je bijvoorbeeld de tekst Hallo intypen, dan druk je achtereenvolgens één keer op de volgende toetsen: 4 (GHI), 2 (ABC), 5 (JKL), 5 (JKL) en ten slotte 6 (MNO). Het T9-systeem zal daarna in het ingebouwde woordenboek zoeken naar alle mogelijke woorden die met deze cijfercombinatie kunnen gevormd worden. Indien er meerder mogelijkheden zijn, dan moet de gebruiker het bedoelde woord uit de lijst kiezen. Dit werkt doorgaans een stuk sneller dan het kiezen van de individuele letters via MultiTap.
Voor deze opgave moet je een woordenboek samenstellen dat gebruikt kan worden door een mobiele telefoon die het T9-systeem gebruikt. Hiervoor ga je als volgt te werk.
Schrijf een functie sleutel
waaraan een woord dat enkel
bestaat uit letters kan doorgegeven worden. De functie moet een string
van cijfers teruggeven, die correspondeert met de reeks toetsen die moet
ingegeven worden om het woord in te voeren op een mobiele telefoon die
werkt met het T9-systeem. De functie mag hierbij geen onderscheid maken
tussen hoofdletters en kleine letters.
Schrijf een functie woordenboek waaraan een container (bv. een lijst, een tuple of een verzameling) van woorden kan doorgegeven worden. De functie moet een dictionary teruggeven, die elke cijfercombinatie die resulteert in één van de gegeven woorden afbeeldt op de verzameling van alle gegeven woorden die door deze combinatie kunnen gevormd worden.
>>> sleutel('FLOWERS')
'3569377'
>>> sleutel('levensgang')
'5383674264'
>>> sleutel('zendgebied')
'9363432433'
>>> sleutel('gesitueerd')
'4374883373'
>>> woordenboek(['verwijdert' , 'wanddiktes' , 'nieuwsbron' , 'verwildert' , 'gehamsterd' , 'binoculair' , 'zandfilter'])
{'2466285247': {'binoculair'}, '9263345837': {'zandfilter', 'wanddiktes'}, '8379453378': {'verwildert', 'verwijdert'}, '6438972766': {'nieuwsbron'}, '4342678373': {'gehamsterd'}}