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.txt 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.txt')
{('MARIO', 'LUIGI')}
>>> opsporen(('-P', '-N', 'R', 'D', '-M', 'N'), 'woorden.txt')
{('BATMAN', 'ROBIN')}
>>> opsporen(('-C', '-N', 'J', '*', 'C', '-T', '-H'), 'woorden.txt')
{('DAVID', 'GOLIATH')}
>>> opsporen(('A', '-Q', 'I', '-A', '*', '*'), 'woorden.txt')
{('BARREN', 'ARISEN'), ('CARSON', 'BRITON'), ('HANSEL', 'GRETEL')}

Epiloog

De titel van deze opgave verwijst naar de film Hidden Figures (2016) die het waargebeurde verhaal vertelt van de wetenschapsters Katherine Johnson en haar twee collega's Dorothy Vaughan en Mary Jackson. Deze drie vrouwen werkten in de West Area Computing Unit van het NASA Langley Research Center — 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 Glenn er in 1962 in om als eerste Amerikaan in een baan om de aarde te vliegen.

Hidden FiguresKatherine Johnson