We hebben de twee partners van een bekend duo vermomd door hun namen van elkaar af te trekken. Als het verschil van David en Goliath gelijk is aan -C -N J * C -T -H, welke duo's zijn dit dan?

  1. A -T I B F

  2. -P -N R D -M N

  3. D * C N -T L

  4. -J Q -O G E -C -H -Y

  5. -A C -K J D E

  1. Mario en Luigi

  2. Batman en Robin

  3. Laurel en Hardy

  4. Itchy en Scratchy

  5. Bonnie en Clyde

Opgave

We geven elke letter (str; hoofdletters en kleine letters) een waarde (int) die overeenkomt met zijn positie in het alfabet (A=1, B=2, C=3, …, Z=26). De asterisk (*) beschouwen we als een extra letter met waarde nul (0).

Het verschil van twee letters is een string (str) die bepaald wordt door eerst de waarden van die twee letters van elkaar af te trekken. Dit levert een waarde tussen -26 en 26 op, die we voorstellen als:

Een woord is een string (str) die bestaat uit één of meer letters (hoofdletters of kleine letters; geen asterisks). Om het verschil van twee woorden te bepalen, vullen we eerst het kortste woord achteraan aan met asterisken (*) tot beide woorden even lang zijn. Het verschil is dan een tuple (tuple) met de verschillen van de twee letters op overeenkomstige posities in de twee woorden. De lengte van dit tuple is dus gelijk aan de lengte van het langste woord.

Gevraagd wordt:

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand woorden.txt1 zich in de huidige directory bevindt.

>>> verschil2waarde('*')
0
>>> verschil2waarde('A')
1
>>> verschil2waarde('-t')
-20

>>> waarde2verschil(0)
'*'
>>> waarde2verschil(1)
'A'
>>> waarde2verschil(-20)
'-T'

>>> vermomming('Mario', 'Luigi')
('A', '-T', 'I', 'B', 'F')
>>> vermomming('Batman', 'Robin')
('-P', '-N', 'R', 'D', '-M', 'N')
>>> vermomming('David', 'Goliath')
('-C', '-N', 'J', '*', 'C', '-T', '-H')

>>> partner('Mario', ('A', '-T', 'I', 'B', 'F'))
'LUIGI'
>>> partner('Batman', ('-P', '-N', 'R', 'D', '-M', 'N'))
'ROBIN'
>>> partner('David', ('-C', '-N', 'J', '*', 'C', '-T', '-H'))
'GOLIATH'

>>> opsporen(('A', '-T', 'I', 'B', 'F'), 'woorden.txt2')
{('MARIO', 'LUIGI')}
>>> opsporen(('-P', '-N', 'R', 'D', '-M', 'N'), 'woorden.txt3')
{('BATMAN', 'ROBIN')}
>>> opsporen(('-C', '-N', 'J', '*', 'C', '-T', '-H'), 'woorden.txt4')
{('DAVID', 'GOLIATH')}
>>> opsporen(('A', '-Q', 'I', '-A', '*', '*'), 'woorden.txt5')
{('BARREN', 'ARISEN'), ('CARSON', 'BRITON'), ('HANSEL', 'GRETEL')}

Epiloog

De titel van deze opgave verwijst naar de film Hidden Figures6 (2016) die het waargebeurde verhaal vertelt van de wetenschapsters Katherine Johnson7 en haar twee collega's Dorothy Vaughan8 en Mary Jackson9. Deze drie vrouwen werkten in de West Area Computing Unit van het NASA Langley Research Center10 — een team dat uitsluitend uit vrouwelijke Afro-Amerikaanse wetenschappers bestond en dat een belangrijk aandeel had in de ruimtewedloop. Dankzij hun berekeningen slaagde de Amerikaanse ruimtevaarder John Glenn11 er in 1962 in om als eerste Amerikaan in een baan om de aarde te vliegen.

Hidden Figures
Officiële filmposter van Hidden Figures (2016).
Katherine Johnson
Deze cartoon van Steve Breen voor de San Diego Union Tribune was een mooi eerbetoon aan Katherine Johnson bij haar dood in februari 2020.