Een 2D-tabel wordt in een tekstbestand opgeslagen. Elke rij van de tabel wordt als regel in het tekstbestand weergegeven. De elementen van de tabel zijn gehele getallen. Verder is het zo dat de tabel grotendeels uit nullen bestaat: er komen enkel niet-overlappende en niet-rakende rechthoekige blokken in voor, waarbij elk element binnen het blok een gelijke waarde heeft. Onderstaande tabel geeft een voorbeeld van een geldig tekstbestand.
0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 0 0 0 4 0 9 0 8 8 8 8 8 0 0 0 0 0 0 0 2 2 2 0 0 0 4 0 9 0 8 8 8 8 8 0 8 8 8 8 0 0 2 2 2 0 0 0 4 0 9 0 8 8 8 8 8 0 8 8 8 8 0 0 2 2 2 0 0 0 4 0 9 0 8 8 8 8 8 0 8 8 8 8 0 0 0 0 0 0 0 0 4 0 0 0 8 8 8 8 8 0 8 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Schrijf volgende functies:
lees_matrix()
: deze functie heeft als enig argument de naam van het tekstbestand (dus een string) waar de tabelinhoud te vinden is. Het resultaat is een woordenboek, waarbij per blok van niet-nul elementen een sleutel overeenkomt, namelijk een tuple van 2 tuples. Het eerste tuple is het (rij,kolom)-nummer van de linkerbovenhoek van het blok, en het tweede tuple is het (rij,kolom)-nummer van de rechteronderhoek van het blok (indien beide tuples gelijk zijn, gaat het om een blok met slechts 1 element). De bijhorende waarde is de waarde van elk element binnen het blok.deel_matrix()
: deze functie heeft 5 argumenten, namelijk:
r
(geheel en positief) k
(geheel en positief)dr
(geheel en positief) dk
(geheel en positief) r
t.e.m. r+dr
, beperkt tot de kolommen met rangnummer
k
t.e.m. k+dk
. Indien je hierbij een onbestaand element uit de originele tabel
zou trachten te vinden, vul je op die plaats de waarde 0 in.
0 0 0 0 0 0 +0 +0 +0 +0 0 0 9 9 0 0 0 0 0 0 0 0 4 0 0 0 +0 +7 +7 +7 0 0 9 9 0 0 0 0 0 0 0 0 4 0 0 0 +0 +0 +0 +0 0 0 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 8 8 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0levert de opdracht
deel_matrix({((9, 5), (12, 7)): 7, ((7, 8), (7, 9)): 8, ((1, 7), (1, 9)): 7, ((0, 12), (3, 13)): 9, ((5, 16), (8, 16)): 8, ((1, 2), (2, 2)): 4, ((11, 17), (11, 17)): 6}, 0, 6, 2, 3)het stukje van de tabel gemarkeerd met plustekens. Het resultaat van de functie is dus
[[0, 0, 0, 0], [0, 7, 7, 7], [0, 0, 0, 0]]
0 0 0 0 0 0 0 0 0 0 0 0 9 9 0 0 0 0 0 0 0 0 4 0 0 0 0 7 7 7 0 0 9 9 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 8 8 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Inhoud van 'BlokMatrix_1.txt
0 0 0 0 0 0 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 0 0 7 7 7 7 7 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 9 9 9 9 0 0 0 0 0 0 0 0 0 3 0 0 9 9 9 9 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Inhoud van 'BlokMatrix_2.txt
0 7 7 0 0 0 0 0 0 0 7 7 0 0 9 0 0 0 0 7 7 0 0 9 0 0 0 0 7 7 0 0 9 0 0 0 0 7 7 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 6 6 0 0 0 0 0 0 0 0 0 0 0 5 5 0 0 0 0 0 0 0 0 0 0 0 0
lees_matrix('BlokMatrix_0.txt') #{((9, 5), (12, 7)): 7, ((7, 8), (7, 9)): 8, ((1, 7), (1, 9)): 7, ((0, 12), (3, 13)): 9, ((5, 16), (8, 16)): 8, ((1, 2), (2, 2)): 4, ((11, 17), (11, 17)): 6} lees_matrix('BlokMatrix_1.txt') #{((4, 11), (5, 11)): 2, ((2, 1), (4, 1)): 3, ((1, 10), (1, 14)): 7, ((3, 4), (4, 7)): 9, ((0, 6), (1, 7)): 6} lees_matrix('BlokMatrix_2.txt') #{((0, 1), (4, 2)): 7, ((7, 4), (7, 5)): 5, ((5, 6), (5, 6)): 1, ((6, 0), (6, 1)): 6, ((1, 5), (3, 5)): 9}
deel_matrix({((9, 5), (12, 7)): 7, ((7, 8), (7, 9)): 8, ((1, 7), (1, 9)): 7, ((0, 12), (3, 13)): 9, ((5, 16), (8, 16)): 8, ((1, 2), (2, 2)): 4, ((11, 17), (11, 17)): 6}, 0, 6, 2, 3) #[[0, 0, 0, 0], [0, 7, 7, 7], [0, 0, 0, 0]] deel_matrix({((3, 9), (7, 12)): 5, ((6, 2), (6, 3)): 1, ((9, 6), (10, 8)): 5, ((1, 15), (4, 15)): 5}, 5, 11, 4, 3) #[[5, 5, 0, 0], [5, 5, 0, 0], [5, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] deel_matrix({((0, 20), (3, 20)): 9, ((0, 18), (4, 18)): 4, ((0, 12), (3, 14)): 2, ((2, 6), (5, 9)): 8, ((1, 0), (5, 4)): 8}, 1, 19, 3, 2) #[[0, 9, 0], [0, 9, 0], [0, 9, 0], [0, 0, 0]]