Quinquagintus Tricartius had een groot probleem. Bij de heraanleg van zijn atrium bestelde hij per ongeluk in plaats van vierkante tegels alleen maar driekwartstegels. Deze zien er uit als een L en beslaan ¾ van een \(2 \times 2\) vierkant. Hoe kon hij nu alsnog zijn atrium betegelen zonder nieuwe tegels te moeten kopen? Gelukkig kwam zijn goede vriend, Julius Caesar, op bezoek. Deze aanschouwde de opengebroken vloer, het afvoerputje en de tegels, en zag onmiddelijk een oplossing. “Triviaal,” sprak Julius, “Divide et impera!” En inderdaad, met een verdeel-en-heers algoritme betegelde Quinquagintus zijn vloer perfect.

Het is namelijk mogelijk om ieder vierkant rooster met 1 gat (het afvoerputje) waarbij de dimensie een macht van twee is, op te vullen met L-vormige tegels zodat het vakje van het afvoerputje het enige vakje is waar geen tegel op ligt. Zie hieronder voor een voorbeeld waar het afvoerputje op positie \((2, 2)\) ligt.

Opgave

Implementeer de klasse DriekwartsBetegeling, die Quinquagintus kan gebruiken om de gekozen betegeling door te geven aan zijn slaven. Hiervoor schrijf je volgende methoden:

Als cadeautje krijg je hieronder skeletcode waarin zich reeds de headers van bovenstaande klasse en methoden bevinden, samen met een handige methode om een betegeling af te drukken in prachtige ASCII-art.

Voorbeelden

>>> betegeling01 = DriekwartsBetegeling(1)
>>> betegeling01.zijde()
2
>>> betegeling01.plaats_tegel(0, 0, 0)
>>> print(betegeling01)
+--+--+
| 0| 1|
+--+  +
| 1  1|
+--+--+
>>> betegeling01 = DriekwartsBetegeling(2)
>>> betegeling01.plaats_tegels((1, 1))
>>> print(betegeling01)
+--+--+--+--+
| 3  3| 4  4|
+  +--+--+  +
| 3| 0| 1| 4|
+--+--+  +--+
| 5| 1  1| 2|
+  +--+--+  +
| 5  5| 2  2|
+--+--+--+--+