Braille is een speciaal voor blinden ontwikkeld lees- en schrijfalfabet. Het werd ontwikkeld en geperfectioneerd door de Fransman Louis Braille1 (1809–1852) — die zelf op driejarige leeftijd blind was geworden — tot het in 1829 als bruikbare methode kon ingezet worden op het Parijse blindeninstituut waar hij verbleef. In 1854 werd het officieel als alfabet geaccepteerd.
Braille maakt gebruik van een reliëfalfabet waarbij letters en andere aanduidingen door middel van puntjes in het papier gedrukt worden. Daardoor ontstaan kleine verhogingen die met de vingertoppen kunnen gelezen worden. De zes puntjes die samen een brailleteken vormen, worden gerangschikt in een rooster van 2 bij 3 puntjes. Ze worden van linksboven naar linksonder genummerd als 1, 2 en 3, en van rechtsboven naar rechtsonder als 4, 5 en 6.
Dit resulteert in deze 64 brailletekens die werden toegevoegd aan de UTF-8 tekencodering2 (Unicode), zoals aangegeven in onderstaand overzicht. Merk op dat in de linkerbovenhoek een UTF-8 brailleteken staat waarin geen enkel puntje in het papier gedrukt wordt (waardoor het onzichtbaar is).
⠀ () |
⠁ (1) |
⠂ (2) |
⠃ (12) |
⠄ (3) |
⠅ (13) |
⠆ (23) |
⠇ (123) |
⠈ (4) |
⠉ (14) |
⠊ (24) |
⠋ (124) |
⠌ (34) |
⠍ (134) |
⠎ (234) |
⠏ (1234) |
⠐ (5) |
⠑ (15) |
⠒ (25) |
⠓ (125) |
⠔ (35) |
⠕ (135) |
⠖ (235) |
⠗ (1235) |
⠘ (45) |
⠙ (145) |
⠚ (245) |
⠛ (1245) |
⠜ (345) |
⠝ (1345) |
⠞ (2345) |
⠟ (12345) |
⠠ (6) |
⠡ (16) |
⠢ (26) |
⠣ (126) |
⠤ (36) |
⠥ (136) |
⠦ (236) |
⠧ (1236) |
⠨ (46) |
⠩ (146) |
⠪ (246) |
⠫ (1246) |
⠬ (346) |
⠭ (1346) |
⠮ (2346) |
⠯ (12346) |
⠰ (56) |
⠱ (156) |
⠲ (256) |
⠳ (1256) |
⠴ (356) |
⠵ (1356) |
⠶ (2356) |
⠷ (12356) |
⠸ (456) |
⠹ (1456) |
⠺ (2456) |
⠻ (12456) |
⠼ (3456) |
⠽ (13456) |
⠾ (23456) |
⠿ (123456) |
Toen braille werd aangepast aan andere talen dan het Frans, ontstonden meerdere varianten van het brailleschrift. In een brailleschrift wordt elk karakter voorgesteld door een unieke combinatie van één of meer brailletekens: zo wordt de kleine letter c bijvoorbeeld voorgesteld door het brailleteken ⠉, de hoofdletter C door de combinatie van twee brailletekens ⠠⠉ en het cijfer 3 door de combinatie van twee brailletekens ⠼⠉. Merk op dat het laatste brailleteken van deze drie karakters telkens gelijk is aan ⠉.
Als een karakter wordt voorgesteld door een combinatie van twee of meer brailletekens, dan vormt geen enkele prefix van die combinatie op zichzelf de voorstelling van een karakter. Uit bovenstaande voorbeelden kunnen we dan bijvoorbeeld afleiden dat het brailleteken ⠠ (eerste teken van de combinatie die de letter C voorstelt) en het brailleteken ⠼ (eerste teken van de combinatie die het cijfer 3 voorstelt) op zichzelf geen voorstellingen zijn van een karakter in het brailleschrift. Ze kunnen echter wel als prefix optreden in andere combinaties: zo kan ⠠⠙ bijvoorbeeld de hoofdletter D voorstellen en ⠼⠙ het cijfer 4.
Een brailleschrift wordt opgeslaan in een tekstbestand met UTF-8 tekencodering. Daarbij bestaat elke regel uit één ASCII-karakter gevolgd door één of meer brailletekens die het ASCII-karakter coderen in braille.
⠀ a⠁ b⠃ c⠉ d⠙ e⠑ … (⠐⠣ )⠐⠜ /⠸⠌ \⠸⠡ -⠤
Merk op dat de eerste regel van bovenstaand tekstbestand bestaat uit een spatie, gevolgd door het UTF-8 brailleteken waarin geen enkel puntje in het papier gedrukt wordt. Beide karakters zijn onzichtbaar, maar staan er wel degelijk.
Bij het openen van een tekstbestand bestand.txt kan je de gebruikte tekencodering meegeven aan de parameter encoding van de ingebouwde functie open:
>>> open('bestand.txt', 'r', encoding='utf-8')
Gevraagd wordt:
Schrijf een functie karakter2braille waaraan de locatie (str) van een tekstbestand met een brailleschrift moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven, die elke ASCII-karakter (str) uit het bestand afbeeldt op de combinatie van brailletekens (str) die het ASCII-karakter coderen in het brailleschrift.
Schrijf een functie braille2karakter waaraan de locatie (str) van een tekstbestand (str) met een brailleschrift moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven, die elke combinatie van brailletekens (str) uit het brailleschrift afbeeldt op het corresponderende ASCII-karakter (str) dat erdoor gecodeerd wordt.
Schrijf een functie codeer waaraan twee argumenten moeten doorgegeven worden: i) een string $$s$$ (str) en ii) een dictionary (dict) voor een brailleschrift zoals teruggegeven door de functie karakter2braille. De functie mag ervan uitgaan dat $$s$$ enkel bestaat uit ASCII-karakters die voorkomen in het brailleschrift en moet de voorstelling van $$s$$ in braille (str) teruggeven.
Schrijf een functie decodeer waaraan twee argumenten moeten doorgegeven worden: i) een string $$s$$ (str) die een bericht in braille voorstelt en ii) een dictionary $$d$$ (dict) voor een brailleschrift zoals teruggegeven door de functie braille2karakter. De functie mag ervan uitgaan dat de string $$s$$ gebruikmaakt van het brailleschrift dat wordt voorgesteld door dictionary $$d$$ en moet het oorspronkelijke bericht (str) teruggeven.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand braille.txt3 zich in de huidige directory bevindt.
>>> k2b = karakter2braille('braille.txt4')
>>> k2b['c']
'⠉'
>>> k2b['C']
'⠠⠉'
>>> k2b['3']
'⠼⠉'
>>> k2b['"']
'⠘⠦'
>>> b2k = braille2karakter('braille.txt5')
>>> b2k['⠉']
'c'
>>> b2k['⠠⠉']
'C'
>>> b2k['⠼⠉']
'3'
>>> b2k['⠘⠦']
'"'
>>> codeer('braille', k2b)
'⠃⠗⠁⠊⠇⠇⠑'
>>> codeer('Louis Braille', k2b)
'⠠⠇⠕⠥⠊⠎⠀⠠⠃⠗⠁⠊⠇⠇⠑'
>>> codeer('100cm', k2b)
'⠼⠁⠼⠚⠼⠚⠉⠍'
>>> codeer('6\\'10"', k2b)
'⠼⠋⠄⠼⠁⠼⠚⠘⠦'
>>> decodeer('⠃⠗⠁⠊⠇⠇⠑', b2k)
'braille'
>>> decodeer('⠠⠇⠕⠥⠊⠎⠀⠠⠃⠗⠁⠊⠇⠇⠑', b2k)
'Louis Braille'
>>> decodeer('⠼⠁⠼⠚⠼⠚⠉⠍', b2k)
'100cm'
>>> decodeer('⠼⠋⠄⠼⠁⠼⠚⠘⠦', b2k)
'6\\'10"'