In het lettertype JetBrains Mono1 wordt letter E met 4 rechte lijnen geschreven, letter R met 2 rechte en 1 kromme lijn, letter G met 1 rechte en 1 kromme lijn, en letter O met 1 kromme lijn. Alle letters van het woord ERGONOMIE worden in dat lettertype met 21 rechte en 4 kromme lijnen geschreven.
Alle letters van het woord SUDOKU worden in het lettertype JetBrains Mono met 5 rechte en 5 kromme lijnen geschreven.
De beschrijving van een lettertype wordt opgeslagen in een tekstbestand. Elke regel van het bestand bevat drie informatievelden die van elkaar gescheiden worden door een spatie: i) één enkel karakter, ii) het aantal rechte lijnen in het karakter en iii) het aantal kromme lijnen in het karakter. Elk karakter komt hoogstens één keer in het bestand voor.
Dit bestand beschrijft bijvoorbeeld alle hoofdletters van het lettertype JetBrains Mono (lettertype.txt2):
A 3 0 B 1 2 C 0 1 D 1 1 E 4 0 … X 2 0 Y 3 0 Z 3 0
Gevraagd wordt:
Schrijf een functie lees_lettertype waaraan de locatie (str) van een tekstbestand met de beschrijving van een lettertype moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven, die elk karakter (str) uit het bestand afbeeldt op een tuple met het aantal rechte lijnen (int) en het aantal kromme lijnen (int) in het karakter.
Schrijf een functie aantal_rechte_lijnen waaraan twee argumenten moeten doorgegeven worden: i) een woord $$w$$ (str) en ii) de beschrijving van een lettertype $$\mathcal{L}$$ (dict). De functie moet teruggeven met hoeveel (int) rechte lijnen het woord $$w$$ geschreven wordt in lettertype $$\mathcal{L}$$.
Schrijf een functie aantal_kromme_lijnen waaraan twee argumenten moeten doorgegeven worden: i) een woord $$w$$ (str) en ii) de beschrijving van een lettertype $$\mathcal{L}$$ (dict). De functie moet teruggeven met hoeveel (int) kromme lijnen het woord $$w$$ geschreven wordt in lettertype $$\mathcal{L}$$.
Schrijf een functie enkel_rechte_lijnen waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand met een reeks woorden (één woord per regel) en ii) de beschrijving van een lettertype $$\mathcal{L}$$ (dict). De functie moet een verzameling (set) teruggeven met alle woorden (str) uit de gegeven reeks die enkel met rechte lijnen geschreven worden in lettertype $$\mathcal{L}$$.
Schrijf een functie enkel_kromme_lijnen waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand met een reeks woorden (één woord per regel) en ii) de beschrijving van een lettertype $$\mathcal{L}$$ (dict). De functie moet een verzameling (set) teruggeven met alle woorden (str) uit de gegeven reeks die enkel met kromme lijnen geschreven worden in lettertype $$\mathcal{L}$$.
Schrijf een functie gebalanceerde_lijnen waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand met een reeks woorden (één woord per regel) en ii) de beschrijving van een lettertype $$\mathcal{L}$$ (dict). De functie moet een verzameling (set) teruggeven met alle woorden (str) uit de gegeven reeks die met evenveel rechte als kromme lijnen geschreven worden in lettertype $$\mathcal{L}$$.
Een dictionary $$\mathcal{L}$$ (dict) die als tweede argument aan de functies aantal_rechte_lijnen, aantal_kromme_lijnen, enkel_rechte_lijnen, enkel_kromme_lijnen en gebalanceerde_lijnen wordt doorgegeven, moet opgebouwd zijn zoals de dictionaries die door de functie lees_lettertype wordt teruggegeven. Bij het tellen van lijnen moeten deze functies enkel rekening houden met karakters van woord $$w$$ die als sleutel voorkomen in dictionary $$\mathcal{L}$$. De overige karakters van woord $$w$$ moeten genegeerd worden. Deze functies moeten ook onderscheid maken tussen hoofdletters en kleine letters.
In onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden lettertype.txt3 en woordenboek.txt4 zich in de huidige directory bevinden.
>>> lettertype = lees_lettertype('lettertype.txt5')
>>> lettertype['E']
(4, 0)
>>> lettertype['R']
(2, 1)
>>> lettertype['G']
(1, 1)
>>> lettertype['O']
(0, 1)
>>> aantal_rechte_lijnen('ERGONOMIE', lettertype)
21
>>> aantal_kromme_lijnen('ERGONOMIE', lettertype)
4
>>> enkel_rechte_lijnen('woordenboek.txt6', lettertype)
{'LAVEMENT', 'INTIMITEITEN', 'ZEVENENHALF', 'VETZAK', 'ZAKENMAN'}
>>> enkel_kromme_lijnen('woordenboek.txt7', lettertype)
{'COCCUS', 'COUSCOUS'}
>>> gebalanceerde_lijnen('woordenboek.txt8', lettertype)
{'SCULPTUUR', 'STADSBOS', 'BOORPROCES', 'SUDOKU'}