We wensen een rechthoekige ruimte te bedekken met tapijten. Zowel de ruimte als de tapijten hebben gehele afmetingen, en ook de tapijten zijn rechthoekig. We stellen daarom de ruimte zelf voor via een 2-dimensionale lijst van gehele getallen. Bevat een cel het getal 0, dan stelt dit een onbedekte cel van de ruimte voor. Bevat een cel een strikt positief geheel getal n, dan geeft dit aan dat de cel door het tapijt met rangnummer n bedekt wordt.

Programmer in de klasse Tatami:

Voorbeeld

Tabblad 1

t = Tatami(6, 4)
t @= (3, 0, 3, 2)
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[1, 1, 0, 0]
#[1, 1, 0, 0]
#[1, 1, 0, 0]
t @= (3, 2, 2, 1)
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[1, 1, 2, 0]
#[1, 1, 2, 0]
#[1, 1, 0, 0]
for a in [(3, 1, 1, 2), (2, 3, 1, 3), (3, 1, 3, 2)]:
	t @= a
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[1, 1, 2, 0]
#[1, 1, 2, 0]
#[1, 1, 0, 0]

t = Tatami(6, 4)
t @= (3, 1, 2, 3)
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[0, 0, 0, 0]
#[0, 1, 1, 1]
#[0, 1, 1, 1]
#[0, 0, 0, 0]
t @= (1, 2, 1, 1)
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 2, 0]
#[0, 0, 0, 0]
#[0, 1, 1, 1]
#[0, 1, 1, 1]
#[0, 0, 0, 0]
for a in [(2, 1, 1, 1), (0, 2, 3, 3), (1, 0, 1, 3)]:
	t @= a
print(t) #uitvoer zonder #-teken !
#[0, 0, 0, 0]
#[0, 0, 2, 0]
#[0, 3, 0, 0]
#[0, 1, 1, 1]
#[0, 1, 1, 1]
#[0, 0, 0, 0]

Tabblad 2

>>> t = Tatami(8,6)
for tapijt in [(0, 0, 2, 3), (0, 3, 2, 3), (2, 0, 2, 3), (2, 3, 2, 3), (4, 0, 2, 3), (4, 3, 2, 3), (6, 0, 2, 3)]:
	t @= tapijt
print(t) #uitvoer zonder #-teken !
#[1, 1, 1, 2, 2, 2]
#[1, 1, 1, 2, 2, 2]
#[3, 3, 3, 4, 4, 4]
#[3, 3, 3, 4, 4, 4]
#[5, 5, 5, 6, 6, 6]
#[5, 5, 5, 6, 6, 6]
#[7, 7, 7, 0, 0, 0]
#[7, 7, 7, 0, 0, 0]
print(t.conflicten()) #{(3, 4, 5, 6), (1, 2, 3, 4)}

t = Tatami(8,5)# doctest: +NEWCONTEXT
for tapijt in [(0, 0, 2, 1), (0, 1, 2, 1), (0, 2, 2, 1), (0, 3, 1, 2), (1, 3, 1, 2), (2, 0, 2, 1), (2, 1, 1, 2), (2, 3, 2, 1), (2, 4, 2, 1), (3, 1, 1, 2), (4, 0, 2, 1), (4, 1, 2, 1), (4, 2, 1, 2)]:
	t @= tapijt
print(t) #uitvoer zonder #-teken !
#[1, 2, 3, 4, 4]
#[1, 2, 3, 5, 5]
#[6, 7, 7, 8, 9]
#[6, 10, 10, 8, 9]
#[11, 12, 13, 13, 0]
#[11, 12, 0, 0, 0]
#[0, 0, 0, 0, 0]
#[0, 0, 0, 0, 0]
print(t.conflicten()) #{(6, 10, 11, 12), (3, 5, 7, 8), (1, 2, 6, 7)}

Tabblad 3

m = Tatami(8, 6)
opl = m.opvullen(2, 3)
print(sorted(opl))
#[[[1, 1, 1, 2, 2, 2], [1, 1, 1, 2, 2, 2], [3, 3, 3, 4, 4, 4], [3, 3, 3, 4, 4, 4], [5, 5, 5, 6, 6, 6], [5, 5, 5, 6, 6, 6], [7, 7, 7, 8, 8, 8], [7, 7, 7, 8, 8, 8]], [[1, 1, 1, 2, 2, 2], [1, 1, 1, 2, 2, 2], [3, 3, 4, 4, 5, 5], [3, 3, 4, 4, 5, 5], [3, 3, 4, 4, 5, 5], [6, 6, 7, 7, 8, 8], [6, 6, 7, 7, 8, 8], [6, 6, 7, 7, 8, 8]], [[1, 1, 2, 2, 3, 3], [1, 1, 2, 2, 3, 3], [1, 1, 2, 2, 3, 3], [4, 4, 4, 5, 5, 5], [4, 4, 4, 5, 5, 5], [6, 6, 7, 7, 8, 8], [6, 6, 7, 7, 8, 8], [6, 6, 7, 7, 8, 8]], [[1, 1, 2, 2, 3, 3], [1, 1, 2, 2, 3, 3], [1, 1, 2, 2, 3, 3], [4, 4, 5, 5, 6, 6], [4, 4, 5, 5, 6, 6], [4, 4, 5, 5, 6, 6], [7, 7, 7, 8, 8, 8], [7, 7, 7, 8, 8, 8]]]
check_oplossing(opl, 8, 6, 2, 3) #enkel in Dodona!
#[(0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)]
check_dubbels(opl) #enkel in Dodona!
#False

m = Tatami(6, 8) 
opl = m.opvullen(2, 3)
print(sorted(opl))
#[[[1, 1, 1, 2, 2, 2, 3, 3], [1, 1, 1, 2, 2, 2, 3, 3], [4, 4, 4, 5, 5, 5, 3, 3], [4, 4, 4, 5, 5, 5, 6, 6], [7, 7, 7, 8, 8, 8, 6, 6], [7, 7, 7, 8, 8, 8, 6, 6]], [[1, 1, 1, 2, 2, 3, 3, 3], [1, 1, 1, 2, 2, 3, 3, 3], [4, 4, 4, 2, 2, 5, 5, 5], [4, 4, 4, 6, 6, 5, 5, 5], [7, 7, 7, 6, 6, 8, 8, 8], [7, 7, 7, 6, 6, 8, 8, 8]], [[1, 1, 2, 2, 2, 3, 3, 3], [1, 1, 2, 2, 2, 3, 3, 3], [1, 1, 4, 4, 4, 5, 5, 5], [6, 6, 4, 4, 4, 5, 5, 5], [6, 6, 7, 7, 7, 8, 8, 8], [6, 6, 7, 7, 7, 8, 8, 8]], [[1, 1, 2, 2, 3, 3, 4, 4], [1, 1, 2, 2, 3, 3, 4, 4], [1, 1, 2, 2, 3, 3, 4, 4], [5, 5, 6, 6, 7, 7, 8, 8], [5, 5, 6, 6, 7, 7, 8, 8], [5, 5, 6, 6, 7, 7, 8, 8]]]
check_oplossing(opl, 6, 8, 2, 3) #enkel in Dodona!
#[(0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)]
check_dubbels(opl) #enkel in Dodona!
#False