Welke persoon zit hierin verborgen?

puzzel
Welke persoon zit hierin verborgen?

Antwoord: MENDELEEV1 (Engelse spelling van de naam)

De cirkels uit de puzzel staan gerangschikt in een $$26 \times 26$$ rooster met 26 rijen en 26 kolommen. Als we de rijen van het rooster van boven naar onder aanduiden met opeenvolgende hoofdletters en de kolommen van links naar rechts met opeenvolgende kleine letters, dan kan de positie van elke cirkel in het rooster voorgesteld worden door twee letters: de hoofdletter waarmee de rij aangeduid wordt, gevolgd door de kleine letter waarmee de kolom aangeduid wordt. De positie van een cirkel op de hoofddiagonaal wordt echter slechts door één letter voorgesteld: de hoofdletter waarmee de rij aangeduid wordt (en die dus ook correspondeert met de letter van de kolom).

puzzel
Dit is hoe de puzzel kan opgelost worden. De cirkels op de posities die corresponderen met een symbool voor chemische elementen uit het periodiek systeem staan in het rood weergegeven. Die cirkels mag je negeren: enkel de andere cirkels zijn belangrijk om het antwoord te vinden en hebben we in het groen weergegeven. De groene cirkels worden oplopend genummerd vanaf 1 door de cijfers die in de puzzel in die cirkels staan (weergegeven in de kleine zwarte cirkels bij de groene cirkels). Dit bepaalt de volgorde waarin we de voorstellingen van de posities van de groene cirkels achter elkaar moeten zetten: de groene cirkel met cijfer 1 staat op positie M, die met cijfer 2 op positie En, die met cijfer 3 op positie De, die met cijfer 4 op positie Le, en die met cijfer 5 op positie Ev. Als we al deze posities achter elkaar zetten dan krijgen we dus MENDELEEV.

Als je nu goed kijkt dan zie je dat de rode cirkels corresponderen met posities die voorgesteld worden door één of twee letters van symbolen voor chemische elementen uit het periodiek systeem2: een tabel waarin alle bekende chemische elementen systematisch gerangschikt zijn. Deze rode cirkels moeten genegeerd worden: enkel de groene cirkels zijn belangrijk om het antwoord te vinden.

Als je nu in de puzzel kijkt welke cijfers er in de vijf groene cirkels staan (we hebben ze in kleine zwarte cirkels bij de groene cirkels geplaatst) dan zie je dat de groene cirkels oplopend genummerd worden vanaf 1. Dit bepaalt de volgorde waarin we de voorstellingen van de posities van de groene cirkels achter elkaar moeten zetten: de groene cirkel met cijfer 1 staat op positie M, die met cijfer 2 op positie En, die met cijfer 3 op positie De, die met cijfer 4 op positie Le, en die met cijfer 5 op positie Ev. Als we al deze posities achter elkaar zetten dan krijgen we dus MENDELEEV.

Opgave

Een puzzelbestand is een tekstbestand met 26 regels waarop telkens 26 cijfers (09) staan. Dit is bijvoorbeeld het puzzelbestand dat correspondeert met de puzzel uit de inleiding (puzzel.txt3):

00300080000450000528300000
37001006505000000500000000
60238400000773300910400000
07003000000000000020000010
00000000000002000540550000
00006200000290000700000000
70033000000000000000000000
00006526000000100040000000
00000000200006000800000000
00000000000000000000000000
00000000002000000100000000
50004000500000000600290000
00990070000019600003000000
42079006700001760000000000
00000010000000100060000000
57070000000030350808100000
00000000000000000000000000
45008316000002000000800000
04408080900026000470000000
21803001400380000040000000
00000000000000000000600000
00000000000000000000070000
00000000000000000000001000
00003000000000000000000000
07000000000000000000000040
00000000000004000300000000

Daarin correspondeert elk cijfer 0 met een positie waarop geen cirkel staat in de puzzel en elk ander cijfer met een positie waarop een cirkel staat in de puzzel met daarin dat cijfer. Een puzzelbestand correspondeert dus met een weergave van de puzzel waarbij we ook cirkels met cijfer 0 zouden tekenen op posities waar nullen staan in het bestand.

puzzel (verborgen cirkels)
Weergave van de puzzel uit de inleiding waarbij we ook cirkels met cijfer 0 getekend hebben op posities waar nullen staan in het bestand. De rijen worden van boven naar onder oplopend genummerd vanaf 0. De kolommen worden van links naar rechts oplopend genummerd vanaf 0.

In de weergave hierboven hebben we de rijen van boven naar onder oplopend genummerd vanaf 0. We hebben ook de kolommen van links naar rechts oplopend genummerd vanaf 0. Daardoor kunnen we elke positie in het $$26 \times 26$$ rooster van een puzzel voorstellen als een coördinaat: een tuple $$(r, k)$$ met twee getallen $$r, k \in \mathbb{N}$$ (int; $$0 \leq r, k < 26$$). Door rijen en kolommen zoals in de inleiding aan te duiden met letters, kunnen we elke positie in het rooster ook symbolisch voorstellen als één letter (str; voor posities op de hoofddiagonaal) of twee letters (str; voor posities buiten de hoofddiagonaal).

Gevraagd wordt:

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden symbolen.csv7 en puzzel.txt8 zich in de huidige directory bevinden.

>>> symbool2coordinaat('Ac')
(0, 2)
>>> symbool2coordinaat('B')
(1, 1)
>>> symbool2coordinaat('MG')
(12, 6)

>>> coordinaat2symbool((0, 2))
'AC'
>>> coordinaat2symbool((1, 1))
'B'
>>> coordinaat2symbool((12, 6))
'MG'

>>> ongeldige_symbolen = symbolen('symbolen.csv9', 2)
>>> ongeldige_symbolen
{'AC', 'AG', 'AL', 'AM', 'AR', 'AS', 'AT', 'AU', 'B', 'BA', 'BE', 'BH', 'BI', 'BK', 'BR', 'C', 'CA', 'CD', 'CE', 'CF', 'CL', 'CM', 'CN', 'CO', 'CR', 'CS', 'CU', 'DB', 'DS', 'DY', 'ER', 'ES', 'EU', 'F', 'FE', 'FL', 'FM', 'FR', 'GA', 'GD', 'GE', 'H', 'HE', 'HF', 'HG', 'HO', 'HS', 'I', 'IN', 'IR', 'K', 'KR', 'LA', 'LI', 'LR', 'LU', 'LV', 'MC', 'MD', 'MG', 'MN', 'MO', 'MT', 'N', 'NA', 'NB', 'ND', 'NE', 'NH', 'NI', 'NO', 'NP', 'O', 'OG', 'OS', 'P', 'PA', 'PB', 'PD', 'PM', 'PO', 'PR', 'PT', 'PU', 'RA', 'RB', 'RE', 'RF', 'RG', 'RH', 'RN', 'RU', 'S', 'SB', 'SC', 'SE', 'SG', 'SI', 'SM', 'SN', 'SR', 'TA', 'TB', 'TC', 'TE', 'TH', 'TI', 'TL', 'TM', 'TS', 'U', 'V', 'W', 'XE', 'Y', 'YB', 'ZN', 'ZR'}

>>> alle_coordinaten('puzzel.txt10')
{(0, 2): 3, (0, 6): 8, (0, 11): 4, (0, 12): 5, (0, 17): 5, (0, 18): 2, (0, 19): 8, (0, 20): 3, (1, 0): 3, (1, 1): 7, (1, 4): 1, (1, 7): 6, (1, 8): 5, (1, 10): 5, (1, 17): 5, (2, 0): 6, (2, 2): 2, (2, 3): 3, (2, 4): 8, (2, 5): 4, (2, 11): 7, (2, 12): 7, (2, 13): 3, (2, 14): 3, (2, 17): 9, (2, 18): 1, (2, 20): 4, (3, 1): 7, (3, 4): 3, (3, 18): 2, (3, 24): 1, (4, 13): 2, (4, 17): 5, (4, 18): 4, (4, 20): 5, (4, 21): 5, (5, 4): 6, (5, 5): 2, (5, 11): 2, (5, 12): 9, (5, 17): 7, (6, 0): 7, (6, 3): 3, (6, 4): 3, (7, 4): 6, (7, 5): 5, (7, 6): 2, (7, 7): 6, (7, 14): 1, (7, 18): 4, (8, 8): 2, (8, 13): 6, (8, 17): 8, (10, 10): 2, (10, 17): 1, (11, 0): 5, (11, 4): 4, (11, 8): 5, (11, 17): 6, (11, 20): 2, (11, 21): 9, (12, 2): 9, (12, 3): 9, (12, 6): 7, (12, 12): 1, (12, 13): 9, (12, 14): 6, (12, 19): 3, (13, 0): 4, (13, 1): 2, (13, 3): 7, (13, 4): 9, (13, 7): 6, (13, 8): 7, (13, 13): 1, (13, 14): 7, (13, 15): 6, (14, 6): 1, (14, 14): 1, (14, 18): 6, (15, 0): 5, (15, 1): 7, (15, 3): 7, (15, 12): 3, (15, 14): 3, (15, 15): 5, (15, 17): 8, (15, 19): 8, (15, 20): 1, (17, 0): 4, (17, 1): 5, (17, 4): 8, (17, 5): 3, (17, 6): 1, (17, 7): 6, (17, 13): 2, (17, 20): 8, (18, 1): 4, (18, 2): 4, (18, 4): 8, (18, 6): 8, (18, 8): 9, (18, 12): 2, (18, 13): 6, (18, 17): 4, (18, 18): 7, (19, 0): 2, (19, 1): 1, (19, 2): 8, (19, 4): 3, (19, 7): 1, (19, 8): 4, (19, 11): 3, (19, 12): 8, (19, 18): 4, (20, 20): 6, (21, 21): 7, (22, 22): 1, (23, 4): 3, (24, 1): 7, (24, 24): 4, (25, 13): 4, (25, 17): 3}

>>> geldige_coordinaten('puzzel.txt11', ongeldige_symbolen)
{(3, 4): 3, (4, 13): 2, (4, 21): 5, (11, 4): 4, (12, 12): 1}

>>> verborgen_naam('puzzel.txt12', ongeldige_symbolen)
'MENDELEEV'