Identificeer deze beroemde personen aan de hand van hun initialen (op basis van hun volledige naam) en verklaar de buitenaardse wiskunde die hier gebruikt wordt. Wiens initialen komen op de plaats van het vraagteken?
Zoals gesuggereerd door de titel van deze opgave, de achtergrondafbeelding van de figuur en de verwijzing naar "buitenaardse" wiskunde, houdt dit raadsel verband met asteroïden ("rotsen" of in het Engels "rocks") die naar (fictieve) beroemde personen ("legendes") vernoemd werden. De bizarre sommen uit de opgave zijn correct wanneer ze toegepast worden op de officiële volgnummers die de International Astronomical Union’s Minor Planet Center1 aan deze asteroïden heeft toegekend.
In volgorde verwijzen de initialen uit het raadsel naar de volgende personen, met hun initialen aangeduid in het groen en de volgnummers en namen van de asteroïden die naar hen vernoemd zijn tussen ronde haakjes:
William Shakespeare (2985 Shakespeare) + Johann Wolfgang von Goethe (3047 Goethe) = Alfred Bernhard Nobel (6032 Nobel)
Albert Einstein (2001 Einstein) + Charles Robert Darwin (1991 Darwin) = Wilhelm Richard Wagner (3992 Wagner)
Edmund Percival Hillary (3130 Hillary) + Hendrik Johannes Cruijff (14282 Cruijff) = Thomas Sean Connery (13070 Seanconnery) + Sigismund Schlomo Freud (4342 Freud)
Rembrandt Harmenszoon van Rijn (4511 Rembrandt) + Johannes Chrysostomus Wolfgangus Theophilus Mozart (1034 Mozartia) = Galileo Galilei (697 Galilea) + Tutankhamun (4848 Tutenchamun)
Bilbo Baggins (2991 Bilbo) + Johannes Gensfleisch zur Laden zum Gutenberg (777 Gutemberga) = Norma Jeane Mortenson (3768 Monroe)
Carl Edward Sagan (2709 Sagan) + Edwin Eugene Aldrin Jr (6470 Aldrin) = Louis Daniel Armstrong (9179 Satchmo)
Thomas Alva Edison (742 Edison) + Christopher Columbus (327 Columbia) = Max Karl Ernst Ludwig Planck (1069 Planckia)
Dmitri Ivanovich Mendeleev (2769 Mendeleev) + Christian Andreas Doppler (3905 Doppler) = Paul Cézanne (6674 Cézanne)
De persoon wiens initialen thuishoren op de plaats van het vraagteken is prof. James Moriarty — de aartsvijand van Sherlock Holmes — want Johann Wolfgang von Goethe (3047 Goethe) + Albert Einstein (2001 Einstein) = James Moriarty (5048 Moriarty). Dit antwoord past ook binnen het thema van dit raadsel, want prof. James Moriarty is de auteur van het fictieve boek The Dynamics of an Asteroid2.
We werken met tekstbestanden met informatie over asteroïden die naar beroemde personen vernoemd werden. Elke regel van zo'n bestand beschrijft één asteroïde aan de hand van vier informatievelden die telkens door een puntkomma (;) van elkaar gescheiden worden: i) het unieke volgnummer van de asteroïde volgens de International Astronomical Union’s Minor Planet Center3, ii) de unieke naam van de asteroïde, iii) de volledige naam van de persoon waarnaar de asteroïde vernoemd werd en iv) een korte beschrijving van die persoon. Dit zijn bijvoorbeeld enkele regels uit zo'n bestand (asteroiden.txt4):
... 316020;Linshuhow;Jeremy Shu-How Lin;basketball player 316201;Malala;Malala Yousafzai;a Pakistani activist for female education 326290;Akhenaten;Akhenaten;a pharaoh of the 18th Dynasty of Egypt 327695;Yokoono;Yoko Ono;musician 337044;Bobdylan;Robert Allen Zimmerman;musician 342843;Davidbowie;David Robert Jones;musician 347940;Jorgezuluaga;Jorge I. Zuluaga Callejas;Colombian astronomer 365443;Holiday;Billie Holiday;jazz musician 374354;Pesquet;Thomas Gautier Pesquet;French astronaut 495181;Rogerwaters;George Roger Waters;musician, one of Pink Floyd founders 495253;Hanszimmer;Hans Florian Zimmer;a German composer 560354;Chrisnolan;Christopher Edward Nolan;film director
Gevraagd wordt:
Schrijf een functie initialen waaraan de naam (str) van een persoon moet doorgegeven worden. De functie moet de initialen (str) van de persoon teruggeven, bestaande uit alle letters in de naam van de persoon die niet direct voorafgegaan worden door een letter.
Schrijf een functie lees_asteroiden waaraan de locatie (str) moet doorgegeven worden van een tekstbestand met informatie over asteroïden die naar beroemde personen vernoemd werden. De functie moet een dictionary (dict) teruggeven die de volgnummers (int) van alle asteroïden uit het bestand afbeeldt op een tuple (tuple) met twee strings (str): i) de unieke naam van de asteroïde en ii) de volledige naam van de persoon waarnaar de asteroïde vernoemd werd. We noemen dit de dictionary-voorstelling van de asteroïden uit het bestand.
Schrijf een functie groeperen waaraan de dictionary-voorstelling $$\mathcal{A}$$ van de asteroïden uit een bestand moet doorgegeven worden. De functie moet een nieuwe dictionary (dict) teruggeven, die de initialen (str) van elke persoon uit $$\mathcal{A}$$ afbeeldt op een verzameling (set) met de volgnummers (int) van alle asteroïden uit $$\mathcal{A}$$ die vernoemd zijn naar personen met die initialen. Bij het bepalen van initialen wordt de volledige naam van een persoon gebruikt.
Schrijf een functie rocklegendes waaraan drie argumenten moeten doorgegeven worden: de initialen $$i_1$$ en $$i_2$$ (str) van twee personen, en de dictionary-voorstelling $$\mathcal{A}$$ van de asteroïden uit een bestand. De functie moet een verzameling (set) teruggeven met alle asteroïden uit $$\mathcal{A}$$ waarvan het volgnummer kan geschreven worden als de som van het volgnummer van een asteroïde uit $$\mathcal{A}$$ die vernoemd werd naar een persoon met initialen $$i_1$$ en het volgnummer van een asteroïde uit $$\mathcal{A}$$ die vernoemd werd naar een persoon met initialen $$i_2$$. De functie heeft ook nog een optionele parameter personen waaraan een Booleaanse waarde (bool) kan doorgegeven worden die bepaalt of de asteroïden in de verzameling beschreven worden met hun naam (False; standaardwaarde) of met de volledige naam van de persoon waarnaar ze vernoemd werden (True).
De tekstbestanden uit deze opgave gebruiken de UTF-8 tekencodering. Dit is ondertussen de standaard tekencodering op de meeste computers (ook op die van Dodona). Als je toch problemen zou ondervinden bij het inlezen van bestanden, dan kan je de tekstcodering ook expliciet meegeven bij het openen van de bestanden: encoding='utf-8'.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand asteroiden.txt5 zich in de huidige directory bevindt.
>>> initialen('William Shakespeare')
'WS'
>>> initialen('Johann Wolfgang von Goethe')
'JWvG'
>>> initialen('Muḥammad ibn Mūsā al-Khwārizmī')
'MiMaK'
>>> asteroiden = lees_asteroiden('asteroiden.txt6')
>>> asteroiden[2985]
('Shakespeare', 'William Shakespeare')
>>> asteroiden[3047]
('Goethe', 'Johann Wolfgang von Goethe')
>>> asteroiden[11156]
('Al-Khwarismi', 'Muḥammad ibn Mūsā al-Khwārizmī')
>>> init2aster = groeperen(asteroiden)
>>> init2aster['WS']
{2985, 31556}
>>> init2aster['JWvG']
{3047}
>>> init2aster['MiMaK']
{11156, 13498}
>>> rocklegendes('WS', 'JWvG', asteroiden)
{'Nobel'}
>>> rocklegendes('DFJA', 'JS', asteroiden, True)
{'Charles IV', 'David Morrison', 'Gregor Johann Mendel'}
>>> rocklegendes('JP', 'JS', asteroiden, personen=True)
{'Andrew Ferrari', 'Grace Patricia Kelly', 'James Francis Cagney Jr.', 'Lynn Rene Anderson'}
Vreemd genoeg veroorzaakte asteroïde 2309 Mr. Spock wat commotie toen haar ontdekker — James Gibson — onthulde dat hij ze eigenlijk naar zijn kat vernoemd had (hij noemde zijn kat Spock omdat ze "onverstoorbaar, logisch, intelligent was en spitse oren had"). Sindsdien wordt het vernoemen van asteroïden naar huisdieren officieel afgeraden door de International Astronomical Union7, maar voor mensen zijn er vooralsnog geen beperkingen — er werden bijvoorbeeld asteroïden vernoemd naar Carlos Santana, James Bond, de vier Beatles en de zes leden van Monty Python.
Wist je trouwens dat Brian Harold May8 — de gitarist van de band Queen9 — in 2007 een doctoraat in de sterrenkunde behaalde aan Imperial College London10. Van 2008–2013 was hij kanselier van de Liverpool John Moores University11. Hij was "wetenschappelijk medewerker" in het team dat bij NASA werkte aan de New Horizons12 missie naar Pluto. Hij is mede-oprichter van de Internationale Dag van de Planetoïde13 en asteroïde 52665 Brianmay14 werd naar hem vernoemd.