From ee79372dc113d541a32a7696a23a86337c71ef49 Mon Sep 17 00:00:00 2001 From: obelisk0114 Date: Sun, 14 Jul 2019 16:35:49 -0700 Subject: [PATCH 1/3] Add rotate matrix problem --- matrix/rotate_matrix.py | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 matrix/rotate_matrix.py diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py new file mode 100644 index 000000000000..68dbec7dba09 --- /dev/null +++ b/matrix/rotate_matrix.py @@ -0,0 +1,91 @@ +# -*- 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 +""" + + +def rotate_90(matrix: [[]]): + """ + >>> rotate_90(matrix=[[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) + + +def rotate_180(matrix: [[]]): + """ + >>> rotate_180(matrix=[[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) + """ + + +def rotate_270(matrix: [[]]): + """ + >>> rotate_270(matrix=[[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) + """ + + +def transpose(matrix: [[]]): + matrix[:] = [list(x) for x in zip(*matrix)] + + +def reverse_row(matrix: [[]]): + matrix[:] = matrix[::-1] + + +def reverse_column(matrix: [[]]): + matrix[:] = [x[::-1] for x in matrix] + + +def print_matrix(matrix: [[]]): + for i in matrix: + print(*i) + + +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) + rotate_90(matrix) + print("\nrotate 90 counterclockwise:\n") + 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_180(matrix) + print("\nrotate 180:\n") + 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_270(matrix) + print("\nrotate 270 counterclockwise:\n") + print_matrix(matrix) From 0b3c90aa6f77814e794d228c2b90b1375f6a90fd Mon Sep 17 00:00:00 2001 From: obelisk0114 Date: Sun, 14 Jul 2019 16:49:02 -0700 Subject: [PATCH 2/3] Fix doctest --- 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 68dbec7dba09..17e07288afd5 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -9,7 +9,7 @@ def rotate_90(matrix: [[]]): """ - >>> rotate_90(matrix=[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + 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]] """ @@ -19,7 +19,7 @@ def rotate_90(matrix: [[]]): def rotate_180(matrix: [[]]): """ - >>> rotate_180(matrix=[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + 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]] """ @@ -36,7 +36,7 @@ def rotate_180(matrix: [[]]): def rotate_270(matrix: [[]]): """ - >>> rotate_270(matrix=[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + 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]] """ From 0682d829ce1492dc77c16659afd7ec8b1a957189 Mon Sep 17 00:00:00 2001 From: obelisk0114 Date: Sun, 14 Jul 2019 21:31:38 -0700 Subject: [PATCH 3/3] Adding return matrix to enable doctest --- matrix/rotate_matrix.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py index 17e07288afd5..e3495e647954 100644 --- a/matrix/rotate_matrix.py +++ b/matrix/rotate_matrix.py @@ -9,17 +9,18 @@ def rotate_90(matrix: [[]]): """ - rotate_90([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + >>> 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 def rotate_180(matrix: [[]]): """ - rotate_180([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) + >>> 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]] """ @@ -32,11 +33,13 @@ def rotate_180(matrix: [[]]): reverse_row(matrix) reverse_column(matrix) """ + + return 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([[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]] """ @@ -49,18 +52,23 @@ def rotate_270(matrix: [[]]): reverse_row(matrix) transpose(matrix) """ + + return matrix def transpose(matrix: [[]]): matrix[:] = [list(x) for x in zip(*matrix)] + return matrix def reverse_row(matrix: [[]]): matrix[:] = matrix[::-1] + return matrix def reverse_column(matrix: [[]]): matrix[:] = [x[::-1] for x in matrix] + return matrix def print_matrix(matrix: [[]]):