De vierkleurenstelling is een stelling uit de wiskunde die zegt dat het mogelijk is om elke willekeurige landkaart waarin de landen elk een geheel vormen (dus zonder exclaves), met behulp van slechts vier kleuren zo kunnen ingekleurd worden dat geen twee aangrenzende landen dezelfde kleur krijgen. Twee landen gelden hierbij als aangrenzend als ze een stuk grens gemeen hebben, niet als ze slechts met een punt aan elkaar verbonden zijn. Dat het met minder dan vier kleuren niet mogelijk is, zie je direct in onderstaande kaart met Luxemburg, Duitsland, Frankrijk en Belgiƫ. Elk land grenst aan alle andere landen, dus zijn er minstens vier kleuren nodig.

luxemburg

Opgave

Definieer een klasse Landkaart waarmee ingekleurde landkaarten kunnen voorgesteld worden. De objecten van deze klasse moeten minstens over de volgende methoden beschikken:

Telkens wanneer de naam van een land als argument aan een methode doorgegeven wordt, moet de methode nagaan of die naam voorkwam in de lijst van landen uit het eerste tekstbestand dat werd doorgegeven bij het aanmaken van het object van de klasse Landkaart. Indien dit niet het geval is, dan moet de methode een AssertionError opwerpen met de tekst onbekend land.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden kleuren1.txt1, kleuren2.txt2 en buurlanden.txt3 zich in de huidige directory bevinden.

>>> kaart = Landkaart('kleuren1.txt', 'buurlanden.txt')
>>> kaart.aantalLanden()
208
>>> kaart.aantalKleuren()
5
>>> kaart.kleur('Belgium')
'rood'
>>> kaart.buren('Belgium')
{'Netherlands', 'Germany', 'Luxembourg', 'France'}
>>> kaart.zijnBuren('Belgium', 'Germany')
True
>>> kaart.zijnBuren('Belgium', 'Italy')
False
>>> kaart.ongeldigeBuren()
[]

>>> kaart = Landkaart('kleuren2.txt', 'buurlanden.txt')
>>> kaart.ongeldigeBuren()
[('Angola', 'Democratic Republic of the Congo', 'blauw'), ('Democratic Republic of the Congo', 'Uganda', 'blauw')]

>>> kaart.kleur('Oz')
Traceback (most recent call last):
AssertionError: onbekend land
>>> kaart.buren('Oz')
Traceback (most recent call last):
AssertionError: onbekend land
>>> kaart.zijnBuren('Belgium', 'Oz')
Traceback (most recent call last):
AssertionError: onbekend land
>>> kaart.zijnBuren('Oz', 'Belgium')
Traceback (most recent call last):
AssertionError: onbekend land