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
Brailleschrift waarbij het woord ⠏⠗⠑⠍⠊⠑⠗ (premier, Frans voor "eerste") kan gelezen worden.

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.

braille
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.

Opgave

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.

Tip

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:

Voorbeeld

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"'