De Kuipergordel is een ring van hemellichamen voorbij de baan van Neptunus — de achtste planeet van ons zonnestelsel. Pluto — de negende planeet van ons zonnestelsel — was het eerste object dat in die gordel ontdekt werd. Correctie, ex-planeet, want in 2005 werd Pluto door de Internationale Astronomische Unie (IAU) officieel gedegradeerd tot dwergplaneet.
Zowel de ontdekking als de ondergang van Pluto als planeet zijn toe te schrijven aan de blink comparator1, een toestel dat door sterrenkundigen gebruikt wordt om twee foto's van de nachtelijke hemel met elkaar te vergelijken. Door snel heen en weer te schakelen tussen foto's die met enkele dagen verschil genomen werden, valt het oog immers makkelijker op snel bewegende objecten zoals asteroïden, kometen en planeten omdat die heen en weer lijken te springen tussen twee posities, terwijl alle andere vaste sterren stilstaan. Daarmee gelinkt is het feit dat de term planeet afkomstig is van het Griekse πλανήτης (planētēs), dat zelf weer teruggaat op πλανὰομαι (planáomai), wat ronddolen of rondzwerven betekent. Hieronder zie je bijvoorbeeld een animatie van een blink comparator die schakelt tussen twee foto's die Clyde Tombaugh genomen heeft op 23 en 29 januari 1930 in het Lowell-observatorium, en waarop hij met pijltjes zijn ontdekking van Pluto heeft aangeduid.
De sterrenkundige Michael E. Brown2 verfijnde het idee van de blink comparator door niet zichzelf maar een computer aan het werk te zetten om foto's met elkaar te vergelijken. Op die manier hebben hij en zijn medewerkers tal van nieuwe transneptunische objecten ontdekt. Meest bekend zijn de dwergplaneten Eris in de Kuipergordel en Sedna in de Oortwolk.
Brown had zichzelf eigenlijk tot doel gesteld om een tiende planeet te ontdekken in ons zonnestelsel, maar ironisch genoeg zette hij de teller niet op +1 maar op -1. Het feit dat Eris een 27% grotere massa dan Pluto bleek te hebben, zette de IAU ertoe aan om voor het eerst een formele definitie van het begrip "planeet" op te stellen. Omdat Pluto niet aan deze definitie voldeed, werd ze vanaf dan geclassificeerd onder de dwergplaneten. Dat Michael Brown ondertussen zijn bijnaam van plutokiller volledig omarmd heeft, blijkt onder andere uit zijn twitterhandle.
Onder de titel How I Killed Pluto and Why It Had It Coming4 zette hij in 2010 zijn wedervaren als de man die Pluto de nek omdraaide om in boekvorm.
In deze opgave werken we met tekstbestanden waarin foto's van de nachtelijke hemel zijn opgeslagen. Een foto bestaat uit $$m$$ regels die elk $$n$$ karakters bevatten, en stelt dus een $$m \times n$$ rooster van karakters voor. Waar geen ster wordt waargenomen op de foto staat een koppelteken (-) in het rooster. Waar wel een ster wordt waargenomen op de foto staat een sterretje (*) in het rooster. Als we de rijen van het rooster van boven naar onder nummeren vanaf nul, en de kolommen op dezelfde manier nummeren van links naar rechts, dan kunnen we de positie van een ster aanduiden met een tuple $$(r, k)$$. Daarbij staat $$r$$ (int) voor het rijnummer en $$k$$ (int) voor het kolomnummer van de ster in het rooster.
----------*-
----*-----*-
----*-------
------------
------------
-*---*------
*-----*-*---
-**---------
----*-*-----
------*-*---
*------**-*-
Hierboven zie je bijvoorbeeld twee foto's die met enkele dagen verschil werden genomen, waarbij de ene foto de andere bedekt. Klik hier om net zoals met een blink comparator te schakelen tussen deze twee foto's. Kan je de bewegende sterren waarnemen die we ook in het vet hebben aangeduid? Dat zijn onze kandidaat-planeten. Het doel van deze opgave is om deze kandidaat-planeten met de computer op te sporen. Hiervoor ga je als volgt te werk:
Schrijf een functie coordinaten waaraan de locatie (str) van een tekstbestand met een foto van de nachtelijke hemel moet doorgegeven worden. De functie moet een verzameling (set) teruggeven die de posities bevat van alle sterren die op de foto kunnen waargenomen worden.
Schrijf een functie afwijkingen waaraan de locaties (str) van twee tekstbestanden met foto's van de nachtelijke hemel moeten doorgegeven worden. De functie moet een tuple met twee verzamelingen (set) teruggeven, waarbij de eerste verzameling de posities bevat van alle sterren die op de eerste foto worden waargenomen en niet op de tweede, en de tweede verzameling de posities van alle sterren die op de tweede foto worden waargenomen en niet op de eerste.
Schrijf een functie planeten waaraan de locaties (str) van twee tekstbestanden met foto's van de nachtelijke hemel moeten doorgegeven worden. De functie moet een dictionary (dict) teruggeven waarvan de sleutels gevormd worden door de posities van de sterren die op de tweede foto worden waargenomen en niet op de eerste. Elke positie $$p$$ die als sleutel gebruikt wordt in de dictionary moet afgebeeld worden op de verzameling (set) van posities van sterren die op de eerste foto worden waargenomen en niet op de tweede en die het dichtst bij de positie $$p$$ liggen. Hierbij wordt de afstand tussen twee posities $$(r_1, k_1)$$ en $$(r_2, k_2)$$ bepaald als $$(r_1 - r_2)^2 + (k_1 - k_2)^2$$.
Schrijf een functie comparator waaraan de locaties (str) van twee tekstbestanden met foto's van de nachtelijke hemel moeten doorgegeven worden. De functie moet een string (str) teruggeven die een $$m \times n$$ rooster voorstelt bestaande uit $$m$$ regels die elk $$n$$ karakters bevatten. Hierbij zijn $$m$$ en $$n$$ respectievelijk het aantal rijen en kolommen van de twee gegeven foto's. De string die door de functie wordt teruggegeven moet de foto voorstellen die men bekomt door de twee gegeven foto's als het ware bovenop elkaar te leggen. De posities in het rooster waar een vaste ster voorkomt op beide foto's moeten nog steeds voorgesteld worden door een sterretje (*), maar de posities waar enkel een ster voorkomt op de eerste foto moeten voorgesteld worden door de letter o en de posities waar enkel een ster voorkomt op de tweede foto moeten voorgesteld worden door de letter n. De andere posities moeten nog steeds voorgesteld worden door een koppelteken (-).
Alle functies waaraan locaties van twee tekstbestanden met foto's van de nachtelijke hemel moeten doorgegeven worden, mogen ervan uitgaan dat deze foto's even groot zijn (evenveel rijen en kolommen) zonder dat ze dit zelf expliciet moeten controleren.
In onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden foto1.txt5 en foto2.txt6 zich in de huidige directory bevinden.
>>> coordinaten('foto1.txt7')
{(10, 8), (5, 5), (6, 8), (6, 6), (7, 1), (10, 7), (9, 8), (10, 10), (6, 0), (1, 4), (0, 10), (1, 10), (5, 1), (8, 6), (10, 0), (9, 6), (2, 4), (7, 2), (8, 4)}
>>> coordinaten('foto2.txt8')
{(10, 8), (4, 7), (6, 8), (7, 1), (10, 7), (10, 10), (9, 8), (6, 0), (0, 7), (1, 4), (7, 7), (8, 7), (1, 10), (5, 1), (10, 0), (9, 6), (2, 4), (7, 2), (8, 4)}
>>> afwijkingen('foto1.txt9', 'foto2.txt10')
({(8, 6), (5, 5), (0, 10), (6, 6)}, {(4, 7), (7, 7), (0, 7), (8, 7)})
>>> planeten('foto1.txt11', 'foto2.txt12')
{(4, 7): {(5, 5), (6, 6)}, (8, 7): {(8, 6)}, (7, 7): {(8, 6), (6, 6)}, (0, 7): {(0, 10)}}
>>> print(comparator('foto1.txt13', 'foto2.txt14'))
-------n--o-
----*-----*-
----*-------
------------
-------n----
-*---o------
*-----o-*---
-**----n----
----*-on----
------*-*---
*------**-*-
Als we de twee foto's uit bovenstaand voorbeeld bovenop elkaar leggen, dan bekomen we het resultaat dat hieronder grafisch wordt weergegeven. De dictionary die door de functie planeten wordt teruggegeven, stelt een afbeelding voor die we hebben aangeduid met blauwe pijlen.
Deze opgave verscheen voor het eerst op een examen van 20 januari 2016. Toeval of niet, maar op diezelfde dag publiceerde het tijdschrift The Astronomical Journal een artikel15 waarin Michael E. Brown en zijn collega Konstantin Batygin van het California Institute of Technology een voorspelling maken van waar er zich ergens aan de buitenkant van ons zonnestelselsel een nieuwe planeet moet bevinden.
Nu moeten Brown en Batygin enkel nog bevestiging zien te krijgen aan de hand van een waarneming vanop Aarde dat Planeet 9 daadwerkelijk bestaat. Net zoals de positie van Neptunus oorspronkelijk werd afgeleid uit fluctuaties in de baan van Uranus, kan het bestaan van Planeet 9 afgeleid worden uit het feit dat een aantal recent ontdekte Kuipergordelobjecten in hetzelfde vlak rond de zon draaien. Maar zonder een controleerbare waarneming blijft Planeet 9 nog steeds een theoretische ontdekking. De twee onderzoekers hopen die waarneming te crowdsourcen door zoveel mogelijk telescopen naar de planeet te laten speuren. Ze hebben de zoektocht vergemakkelijkt door de baan van de planeet in kaart te brengen, waardoor skywatchers enkel nog moeten uitzoeken waar de planeet zich ergens op deze baan bevindt.
Als de onderzoekers hun zin krijgen, dan zal ook de keuze voor de naam van de planeet worden gecrowdsourced, in tegenstelling tot de traditie dat deze naam wordt gegeven door de ontdekker en daarna wordt goedgekeurd door de IAU. De persoonlijke voorkeur van Brown en Batygin valt op de naam "George", een vette knipoog naar de ontdekker van de planeet Uranus, de Britse sterrenkundige William Herschel, die zijn planeet Georgium Sidus (de Georgiaanse Planeet) wilde vernoemen naar George III. Dat lijkt echter moeilijk te verkopen aan de IUA — om maar te zwijgen van alle andere sterrenspotters die graag een beetje meer lyriek zien in de kosmos.
Wat de uiteindelijke naam van de planeet ook wordt, het feit dat ze zou bestaan zal in ieder geval meer doen dan de teller van het aantal planeten in ons zonnestelsel terug op negen zetten. Het zal de mystiek van ons zonnestelsel weer doen toenemen, als blijkt dat er zelfs in de kleinste uithoek van ons universum nog steeds grote verrassingen op de loer liggen.
De Amerikaanse staat Illinois beschouwt Pluto nog steeds als een planeet17.