You are given a square matrix A of dimensions NxN. You need to apply the below given 3 operations on the matrix A.
Rotation: It is represented as R S where S is an integer in {90, 180, 270, 360, 450, ...} which denotes the number of degrees to rotate. You need to rotate the matrix A by angle S in the clockwise direction. The angle of rotation(S) will always be in multiples of 90 degrees.
Update: It is represented as U X Y Z. In initial matrix A (as given in input), you need to update the element at row index X and column index Y with value Z.
After the update, all the previous rotation operations have to be applied to the updated initial matrix.
from copy import deepcopy
def rotate90_clockwise(mat):
return [list(reversed(col)) for col in zip(*mat)]
def rotate(mat, _angle):
_angle = _angle % 360 // 90
for _ in range(_angle):
mat = rotate90_clockwise(mat)
return mat
def update(mat, rot_list, _args):
i, j, value = map(int, _args)
mat[i][j] = str(value)
mat = rotate(mat, sum(rot_list))
return mat
def query(mat, _args):
i, j = map(int, _args)
print(mat[i][j])
if __name__ == "__main__":
n = int(input())
matrix = []
for _ in range(n):
matrix.append(
list(input().split())
)
handle = ""
rotation_list = []
initial_matrix = deepcopy(matrix)
while handle != "-1":
handle, *args = input().split()
if handle == "R":
angle = int(args[0])
rotation_list.append(angle)
matrix = rotate(matrix, angle)
elif handle == "U":
matrix = update(deepcopy(initial_matrix), rotation_list, args)
elif handle == "Q":
query(matrix, args)
Comments
Leave a comment