Ons zonnestelsel bestaat uit de Zon en alle objecten die er rond draaien, zijnde de objecten die er rechtstreeks rond draaien of die rond andere objecten draaien die zelf rond de Zon draaien. Van de objecten die rechtstreeks rond de Zon draaien, zijn de acht grootste de planeten die samen het planetenstelsel van de Zon vormen. Alle andere objecten van het zonnestelsel zijn beduidend kleiner, zoals de dwergplaneten en de zogenaamde small Solar System Bodies (SSSBs) zoals kometen en asteroïden.

zonnestelsel
De Zon en de acht planeten in ons zonnestelsel.

De acht planeten van het zonnestelsel worden als volgt gerangschikt volgens oplopende (gemiddelde) afstand tot de Zon: Mercurius, Venus, Aarde, Mars, Jupiter, Saturnus, Uranus en Neptunus. Bij haar ontdekking in 1930 werd Pluto oorspronkelijk geclassificeerd als de negende planeet van de Zon. Dit veranderde echter in 2006 toen ze werd gedegradeerd tot dwergplaneet nadat een formele definitie voor planeten1 werd ingevoerd. Doorgaans staat Pluto verder van de zon dan Neptunus. Eris, ontdekt in 2005, is de zwaarste gekende dwergplaneet en staat op haar verste punt drie keer zo ver van de Zon als Pluto. Als we nu aan de opeenvolgende letters van de reeks JHMLCNVTURISEYAPO de waarden -8 tot en met 8 toekennen, dan krijgen we:

S+U+N  =  3+0-3  =  0
M+E+R+C+U+R+Y  =  -6+4+1-4+0+1+5  =  1
V+E+N+U+S  =  -2+4-3+0+3  =  2
E+A+R+T+H  =  4+6+1-1-7  =  3
M+A+R+S  =  -6+6+1+3  =  4
J+U+P+I+T+E+R  =  -8+0+7+2-1+4+1  =  5
S+A+T+U+R+N  =  3+6-1+0+1-3  =  6
U+R+A+N+U+S  =  0+1+6-3+0+3  =  7
N+E+P+T+U+N+E  =  -3+4+7-1+0-3+4  =  8
P+L+U+T+O  =  7-5+0-1+8  =  9
E+R+I+S  =  4+1+2+3  =  10

Opgave

Een letterreeks is een string (str) die bestaat uit een oneven aantal verschillende letters. Aan alle functies uit deze opgave moet een letterreeks doorgegeven worden, waarbij de functies telkens moeten nagaan dat de gegeven string enkel bestaat uit letters, een oneven lengte heeft, en geen letters bevat die meermaals voorkomen (waarbij geen onderscheid gemaakt wordt tussen hoofdletters en kleine letters). Als dat niet het geval is, dan moeten de functies een AssertionError opwerpen met de boodschap ongeldige letterreeks. Het opwerpen van deze AssertionError krijgt telkens voorrang op eventuele andere exceptions die expliciet door de functies opgeworpen worden.

Voorts worden aan sommige functies één of meer woorden doorgegeven, waarbij er mag van uitgegaan worden dat deze woorden enkel bestaan uit letters zonder dat dit expliciet moet gecontroleerd worden. De woordwaarde van een woord is een geheel getal dat bekomen wordt door de waarden van de individuele letters van het woord bij elkaar op te tellen. De letterwaarde wordt bepaald aan de hand van een letterreeks met lengte $$2n + 1$$ ($$n \in \mathbb{N}$$), waarvan de opeenvolgende letters de waarden $$-n$$ tot en met $$n$$ toegewezen krijgen. Bij het bepalen van de woordwaarde wordt geen onderscheid gemaakt tussen hoofdletters en kleine letters.

Zorg er bij de implementatie van bovenstaande functies voor dat er optimaal hergebruikgemaakt wordt van reeds geïmplementeerde functionaliteit.

Voorbeeld

>>> letterwaarde('EARTH')
{'A': -1, 'H': 2, 'R': 0, 'E': -2, 'T': 1}
>>> letterwaarde('Venus')
{'U': 1, 'S': 2, 'N': 0, 'E': -1, 'V': -2}
>>> letterwaarde('Churyumov-Gerasimenk')
Traceback (most recent call last):
AssertionError: ongeldige letterreeks

>>> woordwaarde('SUN', 'JHMLCNVTURISEYAPO')
0
>>> woordwaarde('mercury', 'JHMLCNVTURISEYAPO')
1
>>> woordwaarde('Venus', 'JHMLCNVTURISEYAPO')
2
>>> woordwaarde('EARTH', 'ABCDEFGHIJKLM')
Traceback (most recent call last):
AssertionError: ontbrekende letters

>>> alignering(['SUN', 'mercury', 'Venus'], 'JHMLCNVTURISEYAPO')
True
>>> alignering(['SUN', 'mercury', 'EARTH'], 'JHMLCNVTURISEYAPO')
False
>>> alignering(['Sun', 'mercury', 'Venus', 'EARTH', 'MARS', 'Jupiter', 'saturn', 'URANUS', 'Neptune', 'pluto'], 'JHMLCNVTURISEYAPO')
True

>>> planeten = ['MARS', 'saturn', 'Jupiter', 'URANUS', 'Venus', 'mercury', 'EARTH', 'Sun', 'Neptune', 'pluto']
>>> rangschik1(planeten, 'JHMLCNVTURISEYAPO')
>>> planeten
['Sun', 'mercury', 'Venus', 'EARTH', 'MARS', 'Jupiter', 'saturn', 'URANUS', 'Neptune', 'pluto']

>>> planeten = ('MARS', 'saturn', 'Jupiter', 'URANUS', 'Venus', 'mercury', 'EARTH', 'Sun', 'Neptune', 'pluto')
>>> rangschik2(planeten, 'JHMLCNVTURISEYAPO')
('Sun', 'mercury', 'Venus', 'EARTH', 'MARS', 'Jupiter', 'saturn', 'URANUS', 'Neptune', 'pluto')

Epiloog

De Aarde is de enige planeet die niet naar een god vernoemd werd. Als dat niet mondain is!

mondain
De Aarde is de enige planeet die niet naar een god vernoemd werd. Als dat niet mondain is!