From fc03b28e398eae3793681d9f9f2bde105c6c1a01 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 15 Jul 2019 08:57:04 +0200 Subject: [PATCH 1/8] rotate_matrix.py: Add type hints for return values @obelisk0114 Your review please? --- matrix/rotate_matrix.py | 61 +++++++++++++---------------------------- 1 file changed, 19 insertions(+), 42 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index e3495e647954..d5bbc020742d 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -1,77 +1,57 @@ # -*- coding: utf-8 -*- """ - In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise) - Discussion in stackoverflow: - https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array + In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise) + Discussion in stackoverflow: + https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array """ -def rotate_90(matrix: [[]]): +def rotate_90(matrix: [[]]) -> [[]]: """ >>> rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] """ - transpose(matrix) - reverse_row(matrix) - return matrix + return reverse_row(transpose(matrix)) -def rotate_180(matrix: [[]]): +def rotate_180(matrix: [[]]) -> [[]]: """ >>> rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] """ - reverse_column(matrix) - reverse_row(matrix) - - """ - OR - - reverse_row(matrix) - reverse_column(matrix) - """ - - return matrix + return reverse_row(reverse_column(matrix)) + # OR.. reverse_column(reverse_row(matrix)) -def rotate_270(matrix: [[]]): +def rotate_270(matrix: [[]]) -> [[]]: """ >>> rotate_270([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]] """ - - transpose(matrix) - reverse_column(matrix) - - """ - OR - - reverse_row(matrix) - transpose(matrix) - """ - - return matrix + return reverse_column(transpose(matrix)) + # OR.. transpose(reverse_row(matrix)) -def transpose(matrix: [[]]): + +def transpose(matrix: [[]]) -> [[]]: matrix[:] = [list(x) for x in zip(*matrix)] return matrix -def reverse_row(matrix: [[]]): +def reverse_row(matrix: [[]]) -> [[]]: matrix[:] = matrix[::-1] return matrix -def reverse_column(matrix: [[]]): +def reverse_column(matrix: [[]]) -> [[]]: matrix[:] = [x[::-1] for x in matrix] return matrix -def print_matrix(matrix: [[]]): +def print_matrix(matrix: [[]]) -> [[]]: for i in matrix: print(*i) @@ -80,20 +60,17 @@ def print_matrix(matrix: [[]]): matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] print("\norigin:\n") print_matrix(matrix) - rotate_90(matrix) print("\nrotate 90 counterclockwise:\n") - print_matrix(matrix) + print_matrix(rotate_90(matrix)) matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] print("\norigin:\n") print_matrix(matrix) - rotate_180(matrix) print("\nrotate 180:\n") - print_matrix(matrix) + print_matrix(rotate_180(matrix)) matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] print("\norigin:\n") print_matrix(matrix) - rotate_270(matrix) print("\nrotate 270 counterclockwise:\n") - print_matrix(matrix) + print_matrix(rotate_270(matrix)) From 53af475fd73551879b85357ccef72e2b4fba4b20 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 15 Jul 2019 13:34:57 +0200 Subject: [PATCH 2/8] Fix typo --- matrix/rotate_matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index d5bbc020742d..1aeacc68fa30 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -33,7 +33,7 @@ def rotate_270(matrix: [[]]) -> [[]]: """ return reverse_column(transpose(matrix)) - # OR.. transpose(reverse_row(matrix)) + # OR.. transpose(reverse_column(matrix)) def transpose(matrix: [[]]) -> [[]]: From 23aebc019314edfcaa5208ca9d36c3e3a6b0c74f Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 15 Jul 2019 13:45:18 +0200 Subject: [PATCH 3/8] Run the code thru python/black https://github.com/python/black --- matrix/rotate_matrix.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 1aeacc68fa30..425c7ab7b680 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -12,20 +12,20 @@ def rotate_90(matrix: [[]]) -> [[]]: >>> rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] """ - + return reverse_row(transpose(matrix)) - + def rotate_180(matrix: [[]]) -> [[]]: """ >>> rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] """ - + return reverse_row(reverse_column(matrix)) # OR.. reverse_column(reverse_row(matrix)) - + def rotate_270(matrix: [[]]) -> [[]]: """ >>> rotate_270([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) @@ -39,8 +39,8 @@ def rotate_270(matrix: [[]]) -> [[]]: def transpose(matrix: [[]]) -> [[]]: matrix[:] = [list(x) for x in zip(*matrix)] return matrix - - + + def reverse_row(matrix: [[]]) -> [[]]: matrix[:] = matrix[::-1] return matrix @@ -49,14 +49,14 @@ def reverse_row(matrix: [[]]) -> [[]]: def reverse_column(matrix: [[]]) -> [[]]: matrix[:] = [x[::-1] for x in matrix] return matrix - - + + def print_matrix(matrix: [[]]) -> [[]]: for i in matrix: print(*i) -if __name__ == '__main__': +if __name__ == "__main__": matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] print("\norigin:\n") print_matrix(matrix) From 43dd1d28da21dda867ab4e0a8982026b03ebd0c1 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 15 Jul 2019 23:56:20 +0200 Subject: [PATCH 4/8] Fix 270 comment --- matrix/rotate_matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 425c7ab7b680..729290e7ba2f 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -33,7 +33,7 @@ def rotate_270(matrix: [[]]) -> [[]]: """ return reverse_column(transpose(matrix)) - # OR.. transpose(reverse_column(matrix)) + # OR.. transpose(reverse_row(matrix)) def transpose(matrix: [[]]) -> [[]]: From 33de60a4b93f25b50216c2c1d7da2b4e0c0ff7d8 Mon Sep 17 00:00:00 2001 From: cclauss Date: Tue, 16 Jul 2019 00:46:26 +0200 Subject: [PATCH 5/8] Simplify with get_data() and test the alternatives --- matrix/rotate_matrix.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 729290e7ba2f..6aa24639335d 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -7,19 +7,28 @@ """ +def get_data() -> [[]]: + return [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] + + def rotate_90(matrix: [[]]) -> [[]]: """ - >>> rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + >>> rotate_90(get_data()) [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] + >>> rotate_90(get_data()) == transpose(reverse_column(get_data()) + True """ return reverse_row(transpose(matrix)) + # OR.. transpose(reverse_column(matrix)) def rotate_180(matrix: [[]]) -> [[]]: """ - >>> rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + >>> rotate_180(get_data()) [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] + >>> rotate_180(get_data()) == reverse_column(reverse_row(get_data()) + True """ return reverse_row(reverse_column(matrix)) @@ -28,8 +37,10 @@ def rotate_180(matrix: [[]]) -> [[]]: def rotate_270(matrix: [[]]) -> [[]]: """ - >>> rotate_270([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + >>> rotate_270(get_data()) [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]] + >>> rotate_270(get_data()) == transpose(reverse_row(reverse_row(get_data()) + True """ return reverse_column(transpose(matrix)) From 309240d4db11da63b42604a98330f978ed304bdf Mon Sep 17 00:00:00 2001 From: cclauss Date: Tue, 16 Jul 2019 07:30:47 +0200 Subject: [PATCH 6/8] ) * 3 --- matrix/rotate_matrix.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 6aa24639335d..66113c620468 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -15,7 +15,7 @@ def rotate_90(matrix: [[]]) -> [[]]: """ >>> rotate_90(get_data()) [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] - >>> rotate_90(get_data()) == transpose(reverse_column(get_data()) + >>> rotate_90(get_data()) == transpose(reverse_column(get_data())) True """ @@ -27,7 +27,7 @@ def rotate_180(matrix: [[]]) -> [[]]: """ >>> rotate_180(get_data()) [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] - >>> rotate_180(get_data()) == reverse_column(reverse_row(get_data()) + >>> rotate_180(get_data()) == reverse_column(reverse_row(get_data())) True """ @@ -39,7 +39,7 @@ def rotate_270(matrix: [[]]) -> [[]]: """ >>> rotate_270(get_data()) [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]] - >>> rotate_270(get_data()) == transpose(reverse_row(reverse_row(get_data()) + >>> rotate_270(get_data()) == transpose(reverse_row(reverse_row(get_data())) True """ From 0e79901e6f80caf8033826a65d940dd36e18569b Mon Sep 17 00:00:00 2001 From: cclauss Date: Tue, 16 Jul 2019 09:32:37 +0200 Subject: [PATCH 7/8] Update rotate_matrix.py --- matrix/rotate_matrix.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 66113c620468..acc7c3b8c327 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -2,20 +2,33 @@ """ In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise) - Discussion in stackoverflow: + Discussion in stackoverflow: https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array """ -def get_data() -> [[]]: - return [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] +def make_matrix(row_size: int = 4) -> [[int]]: + """ + >>> make_matrix() + [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] + >>> make_matrix(1) + [[1]] + >>> make_matrix(-2) + [[1, 2], [3, 4]] + >>> make_matrix(3) + [[1, 2, 3], [4, 5, 6], [7, 8, 9]] + >>> make_matrix() == make_matrix(4) + True + """ + row_size = abs(row_size) or 4 + return [[1 + x + y * row_size for x in range(row_size)] for y in range(row_size)] def rotate_90(matrix: [[]]) -> [[]]: """ - >>> rotate_90(get_data()) + >>> rotate_90(make_matrix()) [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] - >>> rotate_90(get_data()) == transpose(reverse_column(get_data())) + >>> rotate_90(make_matrix()) == transpose(reverse_column(make_matrix())) True """ @@ -25,9 +38,9 @@ def rotate_90(matrix: [[]]) -> [[]]: def rotate_180(matrix: [[]]) -> [[]]: """ - >>> rotate_180(get_data()) + >>> rotate_180(make_matrix()) [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] - >>> rotate_180(get_data()) == reverse_column(reverse_row(get_data())) + >>> rotate_180(make_matrix()) == reverse_column(reverse_row(make_matrix())) True """ @@ -37,9 +50,9 @@ def rotate_180(matrix: [[]]) -> [[]]: def rotate_270(matrix: [[]]) -> [[]]: """ - >>> rotate_270(get_data()) + >>> rotate_270(make_matrix()) [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]] - >>> rotate_270(get_data()) == transpose(reverse_row(reverse_row(get_data())) + >>> rotate_270(make_matrix()) == transpose(reverse_row(make_matrix())) True """ @@ -68,19 +81,19 @@ def print_matrix(matrix: [[]]) -> [[]]: if __name__ == "__main__": - matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] + matrix = make_matrix() print("\norigin:\n") print_matrix(matrix) print("\nrotate 90 counterclockwise:\n") print_matrix(rotate_90(matrix)) - matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] + matrix = make_matrix() print("\norigin:\n") print_matrix(matrix) print("\nrotate 180:\n") print_matrix(rotate_180(matrix)) - matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] + matrix = make_matrix() print("\norigin:\n") print_matrix(matrix) print("\nrotate 270 counterclockwise:\n") From 73ed273f9101eb11684b0aa734b12c68a6badd78 Mon Sep 17 00:00:00 2001 From: John Law Date: Tue, 23 Jul 2019 00:32:42 +0800 Subject: [PATCH 8/8] Update rotate_matrix.py --- matrix/rotate_matrix.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index acc7c3b8c327..822851826121 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- """ - In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise) - Discussion in stackoverflow: - https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array +In this problem, we want to rotate the matrix elements by 90, 180, 270 (counterclockwise) +Discussion in stackoverflow: +https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array """