Een 7-segmentdisplay1 wordt gebruikt om cijfers (en soms ook letters) voor te stellen. Als bij toeval is het zo dat de voorstelling van de meeste cijfers de vorm aanneemt van een letter uit het alfabet als het scherm ondersteboven gehouden wordt. Deze vaststelling ligt aan de basis van rekenmachinespelling2 (ook beghilosz genoemd). Dit is een vorm van teksttransformatie waarbij woorden gespeld worden als een reeks cijfers (en letters). Nadat de reeks cijfers (en letters) werd ingegeven in een rekenmachine met een 7-segmentdisplay, die daarna wordt omgekeerd, kan het woord op het scherm uitgelezen worden.
De basisstap van rekenmachinespelling bestaat er dus in om elk cijfer af te beelden op een letter, waardoor woorden op een rekenmachine kunnen voorgesteld worden die bestaan uit een deelverzameling van de letters van het alfabet. Standaard wordt hierbij de volgende afbeelding gebruikt:
cijfer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
letter | O | I | Z | E | h | S | g | L | B |
Onderstaande figuur geeft aan dat de cijfers 250714638 — op basis van deze afbeelding — op een omgekeerde rekenmachine kunnen gelezen worden als BEghILOSZ.
Sommige rekenmachines laten het bovenste segment weg om het cijfer 6 voor te stellen, en het onderste segment om het cijfer 9 voor te stellen. In dat geval leest een omgekeerde zes als de kleine letter q en leest een omgekeerde negen als de kleine letter b. Als we het beschikbare alfabet uitbreiden naar de hexadecimale cijfers3 (algemeen beschikbaar op de meeste wetenschappelijke rekenmachines), dan kunnen we bijvoorbeeld de volgende afbeelding gebruiken:
cijfer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | b | C | d | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
letter | O | I | Z | E | h | S | g | L | B | b | Y | q | J | P | 3 | j |
Als de rekenmachine voor een spiegel gehouden wordt, dan krijgen we de volgende afbeelding:
cijfer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | b | C | d | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
letter | O | I | S | E | y | Z | a | r | B | e | A | d | J | b | 3 | z |
Een alfabet wordt voorgesteld door een string waarin elk karakter hoogstens één keer voorkomt. Gevraagd wordt:
Schrijf een functie cijfers2letters waaraan twee alfabetten van gelijke lengte moeten doorgegeven worden. De functie moet een dictionary teruggeven die elk karakter in het eerste alfabet afbeeldt op het karakter op dezelfde positie in het tweede alfabet.
Schrijf een functie beghilosz2tekst waaraan twee argumenten moeten doorgegeven worden: een string en een dictionary die karakters afbeeldt op karakters. Je mag ervan uitgaan dat elk karakter dat voorkomt in de string als sleutel voorkomt in de dictionary. De functie moet de dictionary gebruiken om elk karakter van de gegeven string te vervangen door het corresponderende karakter uit de dictionary. De string die op die manier bekomen wordt, moet omgekeerd worden en als resultaat teruggegeven worden door de functie.
Schrijf een functie letters2cijfers waaraan een dictionary moet doorgegeven worden die de karakters van een eerste alfabet afbeeldt op de karakters van een tweede alfabet. Je mag ervan uitgaan dat beide alfabetten even lang zijn, en dat er een één-op-één afbeelding bestaat tussen de letters van de twee alfabetten. De functie moet de omgekeerde afbeelding teruggeven onder de vorm van een dictionary die de karakters van het tweede alfabet afbeeldt op de corresponderende karakters van het eerste alfabet.
Schrijf een functie tekst2beghilosz waaraan twee argumenten moeten doorgegeven worden: een string en een dictionary die karakters afbeeldt op karakters. Je mag ervan uitgaan dat elk karakter dat voorkomt in de string als sleutel voorkomt in de dictionary, of dat als het karakter een letter is, minstens zijn vorm als hoofdletter of als kleine letter als voorkomt in de dictionary. De functie moet de dictionary gebruiken om elk karakter van de gegeven string af te beelden op zijn corresponderende karakter. Als het karakter een letter is die niet als dusdanig als sleutel voorkomt in de dictionary, dan moet de afbeelding gebruikt worden van de overeenkomstige hoofdletter/kleine letter. De string die op die manier bekomen wordt, moet omgekeerd worden en als resultaat teruggegeven worden door de functie.
>>> c2l = cijfers2letters('012345678', 'OIZEhSgLB')
>>> c2l
{'0': 'O', '1': 'I', '2': 'Z', '3': 'E', '4': 'h', '5': 'S', '6': 'g', '7': 'L', '8': 'B'}
>>> beghilosz2tekst('250714638', c2l)
'BEghILOSZ'
>>> beghilosz2tekst('3722145', c2l)
'ShIZZLE'
>>> beghilosz2tekst('53177187714', c2l)
'hILLBILLIES'
>>> l2c = letters2cijfers(c2l)
>>> l2c
{'O': '0', 'I': '1', 'Z': '2', 'E': '3', 'h': '4', 'S': '5', 'g': '6', 'L': '7', 'B': '8'}
>>> tekst2beghilosz('BEghILOSZ', l2c)
'250714638'
>>> tekst2beghilosz('SHIZZLE', l2c)
'3722145'
>>> tekst2beghilosz('hillbillies', l2c)
'53177187714'
In de November 2010 editie van Word Ways4, merkt de Amerikaanse wiskundige Mike Keith het volgende gelukkig toeval op:
Bible's Machine and Welding
6499 Blue Springs Pkwy
Mosheim, TN 37818
Dit is het adres van een winkel5 in het oosten van Tennessee (VSA) die vermoedelijk de eigendom is van de familie Bible. Voer de cijfers van de postcode in op een rekenmachine en draai die daarna ondersteboven.