Code 391 is een techniek voor het opstellen van barcodes. Ze werd in 1974 ontwikkeld door Dr. David Allais and Ray Stevens voor het bedrijf Intermec. Bij code 39 wordt elk karakter voorgesteld door vijf verticale zwarte stroken, die van elkaar gescheiden worden door vier verticale witte stroken. Drie van de negen stroken zijn breed en de andere zes zijn smal. Barcodes van opeenvolgende karakters worden steeds van elkaar gescheiden door een smalle witte strook. Hieronder zie je bijvoorbeeld hoe het woord GEOLOGIE eruit ziet als code 39 barcode.

code 39
Code 39 barcode van het woord GEOLOGIE.

Code 39 barcodes worden in ASCII-formaat voorgesteld aan de hand van vier symbolen, die de vier combinaties van smalle/brede zwarte/witte banden voorstellen.

code 39
code 39
strook symbool
breed-zwart B
smal-zwart S
breed-wit b
smal-wit s

Zo is BsSsSbSsB bijvoorbeeld de ASCII-voorstelling van de letter A in code 39.

Opgave

Een codeersleutel is een dictionary (dict) die karakters (str) afbeeldt op hun ASCII-voorstelling in code 39 (str). Daarbij heeft elk karakter in code 39 een unieke voorstelling (voorgesteld als een string van lengte 9). Omdat code 39 geen onderscheid maakt tussen hoofdletters en kleine letters, gebruiken codeersleutels nooit kleine letters als sleutel.

Gevraagd wordt:

Voorbeeld

>>> sleutel = {
...     'U': 'SbSbSbSsS', 'Z': 'SsBsSbBsS', 'P': 'BbSsSsBsS', 'R': 'SsSbBsBsS',
...     'H': 'SsBbBsSsS', 'W': 'SbBsSsBsS', 'D': 'SbBsSsSsB', 'K': 'BsSsSsBbS',
...     '-': 'SsSbBsSsB', 'M': 'SbSsSbSbS', 'O': 'SsSbSsBsB', '7': 'SsSbSbSbS',
...     '+': 'BsSsBbSsS', '1': 'SsSsBbBsS', ' ': 'SsBsBbSsS', '.': 'SsBbSsBsS',
...     '/': 'SsSsBsBbS', 'V': 'SbSsBsBsS', 'X': 'SbSbSsSbS', 'C': 'SbSsBsSsB',
...     'Y': 'BsSsSbBsS', 'G': 'BsBsSsSbS', '4': 'SsBbSsSsB', 'Q': 'SsBsSbSsB',
...     'J': 'SsSsSsBbB', 'F': 'BsSsSbSsB', 'A': 'SsBsSsSbB', '6': 'BsSsSsSbB',
...     '2': 'BsBsSbSsS', '$': 'SsSsSbBsB', '0': 'BsSbBsSsS', 'N': 'SsBsBsSbS',
...     'I': 'BsSbSsSsB', '9': 'BbSsBsSsS', 'L': 'BsSbSsBsS', ',': 'SsSsBsSbB',
...     '5': 'BsSsBsSbS', 'B': 'BbBsSsSsS', '%': 'SsBsSsBbS', 'S': 'BsBbSsSsS',
...     '3': 'SbBsBsSsS', 'T': 'BbSsSsSsB', '*': 'SsSsBbSsB', 'E': 'SbSsSsBsB'
... }
>>> omgekeerd(sleutel)
{'SbSbSbSsS': 'U', 'SsBsSbBsS': 'Z', 'BbSsSsBsS': 'P', 'SsSbBsBsS': 'R', 'SsBbBsSsS': 'H', 'SbBsSsBsS': 'W', 'SbBsSsSsB': 'D', 'BsSsSsBbS': 'K', 'SsSbBsSsB': '-', 'SbSsSbSbS': 'M', 'SsSbSsBsB': 'O', 'SsSbSbSbS': '7', 'BsSsBbSsS': '+', 'SsSsBbBsS': '1', 'SsBsBbSsS': ' ', 'SsBbSsBsS': '.', 'SsSsBsBbS': '/', 'SbSsBsBsS': 'V', 'SbSbSsSbS': 'X', 'SbSsBsSsB': 'C', 'BsSsSbBsS': 'Y', 'BsBsSsSbS': 'G', 'SsBbSsSsB': '4', 'SsBsSbSsB': 'Q', 'SsSsSsBbB': 'J', 'BsSsSbSsB': 'F', 'SsBsSsSbB': 'A', 'BsSsSsSbB': '6', 'BsBsSbSsS': '2', 'SsSsSbBsB': '$', 'BsSbBsSsS': '0', 'SsBsBsSbS': 'N', 'BsSbSsSsB': 'I', 'BbSsBsSsS': '9', 'BsSbSsBsS': 'L', 'SsSsBsSbB': ',', 'BsSsBsSbS': '5', 'BbBsSsSsS': 'B', 'SsBsSsBbS': '%', 'BsBbSsSsS': 'S', 'SbBsBsSsS': '3', 'BbSsSsSsB': 'T', 'SsSsBbSsB': '*', 'SbSsSsBsB': 'E'}
>>> gecodeerd = code39('Sulfur, so good.', sleutel)
>>> gecodeerd
'BsBbSsSsSsSbSbSbSsSsBsSbSsBsSsBsSsSbSsBsSbSbSbSsSsSsSbBsBsSsSsSsBsSbBsSsBsBbSsSsBsBbSsSsSsSsSbSsBsBsSsBsBbSsSsBsBsSsSbSsSsSbSsBsBsSsSbSsBsBsSbBsSsSsBsSsBbSsBsS'
>>> decode39(gecodeerd, sleutel)
'SULFUR, SO GOOD.'