-
Notifications
You must be signed in to change notification settings - Fork 10
/
2d-pattern-in-matrix.py
105 lines (86 loc) · 2.79 KB
/
2d-pattern-in-matrix.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
########
# Code #
########
# pattern and matrix are both 2D arrays
# return true as soon as the pattern is found for a first time
def patternInMatrix(pattern, matrix):
rows, cols = len(matrix), len(matrix[0])
patternRows, patternCols = len(pattern), len(pattern[0])
for row in xrange(rows-patternRows):
for col in xrange(cols-patternCols):
found = False
for pRow in xrange(patternRows):
for pCol in xrange(patternCols):
if pattern[pRow][pCol] != matrix[row+pRow][col+pCol]:
found = False
break
else:
found = True
if found:
return True
return False
# return a list of all top-left starting indices
def indicesOfPatternInMatrix(pattern, matrix):
rows, cols = len(matrix), len(matrix[0])
patternRows, patternCols = len(pattern), len(pattern[0])
startingSpots = []
for row in xrange(rows-patternRows+1):
for col in xrange(cols-patternCols+1):
found = False
for pRow in xrange(patternRows):
for pCol in xrange(patternCols):
if pattern[pRow][pCol] != matrix[row+pRow][col+pCol]:
found = False
break
else:
found = True
if found:
startingSpots.append((row, col))
return startingSpots
#########
# Tests #
#########
def testPatterInMatrix():
assert patternInMatrix([[1]], [[0,0,0],[0,1,0],[0,0,0]])
assert not patternInMatrix([[2]], [[0,0,0],[0,1,0],[0,0,0]])
def testIndicesOfPatternInMatrix():
p0 = [[1]]
m0 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p0, m0) == [(1, 1)]
p1 = [[2]]
m1 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p1, m1) == []
p2 = [[0,1,0]]
m2 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p2, m2) == [(1, 0)]
p3 = [[0,0,0],
[0,1,0],
[0,0,0]]
m3 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p3, m3) == [(0,0)]
p4 = [[0]]
m4 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p4, m4) == [(0,0),(0,1),(0,2),
(1,0),(1,2),
(2,0),(2,1),(2,2)]
p4 = [[0, 0]]
m4 = [[0,0,0],
[0,1,0],
[0,0,0]]
assert indicesOfPatternInMatrix(p4, m4) == [(0,0),(0,1),
(2,0),(2,1)]
def main():
testPatterInMatrix()
testIndicesOfPatternInMatrix()
if __name__ == "__main__":
main()