-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMatrixLayerRotation.py
70 lines (53 loc) · 2.05 KB
/
MatrixLayerRotation.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
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the matrixRotation function below.
def matrix_rotation(matrix, r):
k = min(m, n)
for layer in range(k // 2):
layer_elements = []
# Collect elements in the top row in that layer
for index in range(layer, n - 1 - layer, 1):
layer_elements.append(matrix[layer][index])
# Collect the right column in that layer
for index in range(layer, m - 1 - layer):
layer_elements.append(matrix[index][n - 1 - layer])
# Collect the down row in that layer
for index in range(n - 1 - layer, layer, -1):
layer_elements.append(matrix[m - 1 - layer][index])
# Collect the left column in that layer
for index in range(m - 1 - layer, layer, -1):
layer_elements.append(matrix[index][layer])
slice_index = r % len(layer_elements)
layer_elements = layer_elements[slice_index:] + layer_elements[:slice_index]
counter = 0
for index in range(layer, n - 1 - layer):
matrix[layer][index] = layer_elements[counter]
counter += 1
for index in range(layer, m - 1 - layer):
matrix[index][n - 1 - layer] = layer_elements[counter]
counter += 1
for index in range(n - 1 - layer, layer, -1):
matrix[m - 1 - layer][index] = layer_elements[counter]
counter += 1
for index in range(m - 1 - layer, layer, -1):
matrix[index][layer] = layer_elements[counter]
counter += 1
for each in matrix:
print(*each)
if __name__ == '__main__':
mnr = input().rstrip().split()
m = int(mnr[0])
n = int(mnr[1])
r = int(mnr[2])
input_matrix = []
for _ in range(m):
input_matrix.append(list(map(int, input().rstrip().split())))
# m, n, r = 4, 4, 2
# input_matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
assert m == len(input_matrix)
assert n == len(input_matrix[0])
matrix_rotation(input_matrix, r)