Skip to content

Commit b2ed8d4

Browse files
authored
rotate_matrix.py: Add type hints for return values (#1023)
* rotate_matrix.py: Add type hints for return values @obelisk0114 Your review please? * Fix typo * Run the code thru python/black https://github.com/python/black * Fix 270 comment * Simplify with get_data() and test the alternatives * ) * 3 * Update rotate_matrix.py * Update rotate_matrix.py
1 parent 05e567c commit b2ed8d4

File tree

1 file changed

+58
-57
lines changed

1 file changed

+58
-57
lines changed

matrix/rotate_matrix.py

+58-57
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,100 @@
11
# -*- coding: utf-8 -*-
22

33
"""
4-
In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise)
5-
Discussion in stackoverflow:
6-
https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array
4+
In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise)
5+
Discussion in stackoverflow:
6+
https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array
77
"""
88

99

10-
def rotate_90(matrix: [[]]):
10+
def make_matrix(row_size: int = 4) -> [[int]]:
1111
"""
12-
>>> rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
13-
[[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]]
12+
>>> make_matrix()
13+
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
14+
>>> make_matrix(1)
15+
[[1]]
16+
>>> make_matrix(-2)
17+
[[1, 2], [3, 4]]
18+
>>> make_matrix(3)
19+
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
20+
>>> make_matrix() == make_matrix(4)
21+
True
1422
"""
15-
16-
transpose(matrix)
17-
reverse_row(matrix)
18-
return matrix
19-
23+
row_size = abs(row_size) or 4
24+
return [[1 + x + y * row_size for x in range(row_size)] for y in range(row_size)]
25+
2026

21-
def rotate_180(matrix: [[]]):
27+
def rotate_90(matrix: [[]]) -> [[]]:
2228
"""
23-
>>> rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
24-
[[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]]
29+
>>> rotate_90(make_matrix())
30+
[[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]]
31+
>>> rotate_90(make_matrix()) == transpose(reverse_column(make_matrix()))
32+
True
2533
"""
26-
27-
reverse_column(matrix)
28-
reverse_row(matrix)
29-
34+
35+
return reverse_row(transpose(matrix))
36+
# OR.. transpose(reverse_column(matrix))
37+
38+
39+
def rotate_180(matrix: [[]]) -> [[]]:
3040
"""
31-
OR
32-
33-
reverse_row(matrix)
34-
reverse_column(matrix)
41+
>>> rotate_180(make_matrix())
42+
[[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]]
43+
>>> rotate_180(make_matrix()) == reverse_column(reverse_row(make_matrix()))
44+
True
3545
"""
36-
37-
return matrix
3846

39-
40-
def rotate_270(matrix: [[]]):
47+
return reverse_row(reverse_column(matrix))
48+
# OR.. reverse_column(reverse_row(matrix))
49+
50+
51+
def rotate_270(matrix: [[]]) -> [[]]:
4152
"""
42-
>>> rotate_270([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
53+
>>> rotate_270(make_matrix())
4354
[[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]
55+
>>> rotate_270(make_matrix()) == transpose(reverse_row(make_matrix()))
56+
True
4457
"""
45-
46-
transpose(matrix)
47-
reverse_column(matrix)
48-
49-
"""
50-
OR
51-
52-
reverse_row(matrix)
53-
transpose(matrix)
54-
"""
55-
56-
return matrix
5758

59+
return reverse_column(transpose(matrix))
60+
# OR.. transpose(reverse_row(matrix))
5861

59-
def transpose(matrix: [[]]):
62+
63+
def transpose(matrix: [[]]) -> [[]]:
6064
matrix[:] = [list(x) for x in zip(*matrix)]
6165
return matrix
62-
63-
64-
def reverse_row(matrix: [[]]):
66+
67+
68+
def reverse_row(matrix: [[]]) -> [[]]:
6569
matrix[:] = matrix[::-1]
6670
return matrix
6771

6872

69-
def reverse_column(matrix: [[]]):
73+
def reverse_column(matrix: [[]]) -> [[]]:
7074
matrix[:] = [x[::-1] for x in matrix]
7175
return matrix
72-
73-
74-
def print_matrix(matrix: [[]]):
76+
77+
78+
def print_matrix(matrix: [[]]) -> [[]]:
7579
for i in matrix:
7680
print(*i)
7781

7882

79-
if __name__ == '__main__':
80-
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
83+
if __name__ == "__main__":
84+
matrix = make_matrix()
8185
print("\norigin:\n")
8286
print_matrix(matrix)
83-
rotate_90(matrix)
8487
print("\nrotate 90 counterclockwise:\n")
85-
print_matrix(matrix)
88+
print_matrix(rotate_90(matrix))
8689

87-
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
90+
matrix = make_matrix()
8891
print("\norigin:\n")
8992
print_matrix(matrix)
90-
rotate_180(matrix)
9193
print("\nrotate 180:\n")
92-
print_matrix(matrix)
94+
print_matrix(rotate_180(matrix))
9395

94-
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
96+
matrix = make_matrix()
9597
print("\norigin:\n")
9698
print_matrix(matrix)
97-
rotate_270(matrix)
9899
print("\nrotate 270 counterclockwise:\n")
99-
print_matrix(matrix)
100+
print_matrix(rotate_270(matrix))

0 commit comments

Comments
 (0)