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.
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 |
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.
Schrijf een functie letterwaarde waaraan een letterreeks (str) moet doorgegeven worden. Voor een gegeven letterreeks van lengte $$2n + 1$$ ($$n \in \mathbb{N}$$) moet de functie een dictionary (dict) teruggeven die de opeenvolgende letters (str) van de letterreeks afbeeldt op de waarden $$-n$$ tot en met $$n$$ (int). De sleutels van deze dictionary moeten allemaal hoofdletters zijn.
Schrijf een functie woordwaarde waaraan twee argumenten moeten doorgegeven worden: een woord (str) en een letterreeks (str). De functie moet de woordwaarde (int) van het gegeven woord teruggeven, waarbij de waarde van de letters bepaald wordt op basis van de gegeven letterreeks. Als het gegeven woord letters bevat die niet voorkomen in de gegeven letterreeks (zonder onderscheid te maken tussen hoofdletters en kleine letters), dan moet de functie een AssertionError opwerpen met de boodschap ontbrekende letters.
Schrijf een functie alignering waaraan twee argumenten moeten doorgegeven worden: een reeks (list of tuple) van $$m \in \mathbb{N}_0$$ woorden (str) en een letterreeks (str). De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of de woorden achtereenvolgens woordwaarde $$0, 1, \ldots, m - 1$$ hebben. Hierbij moet de woordwaarde bepaald worden aan de hand van de gegeven letterreeks.
Schrijf een functie rangschik1 waaraan twee argumenten moeten doorgegeven worden: een lijst (list) van woorden (str) en een letterreeks (str). De functie moet de woorden in de gegeven lijst (list) volgens oplopende woordwaarde rangschikken. Hierbij moet de woordwaarde bepaald worden aan de hand van de gegeven letterreeks. Woorden met dezelfde woordwaarde moeten alfabetisch gerangschikt worden, zonder daarbij onderscheid te maken tussen hoofdletters en kleine letters.
Schrijf een functie rangschik2 waaraan twee argumenten moeten doorgegeven worden: een reeks (list of tuple) woorden (str) en een letterreeks (str). De functie moet een tuple teruggeven waarin de woorden (str) uit de gegeven reeks volgens oplopende woordwaarde gerangschikt zijn. Hierbij moet de woordwaarde bepaald worden aan de hand van de gegeven letterreeks. Woorden met dezelfde woordwaarde moeten alfabetisch gerangschikt worden, zonder daarbij onderscheid te maken tussen hoofdletters en kleine letters.
Zorg er bij de implementatie van bovenstaande functies voor dat er optimaal hergebruikgemaakt wordt van reeds geïmplementeerde functionaliteit.
>>> 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')
De Aarde is de enige planeet die niet naar een god vernoemd werd. Als dat niet mondain is!