Answer to Question #170359 in Python for Sree

Question #170359

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.


Querying: It is represented as Q K L. You need to print the value at row index K and column index L of the matrix A.


Sample Input 1:


The first line contains a single integer N.

Next N lines contain N space-separated integers Aij (i - index of the row, j - index of the column).

Next lines contain various operations on the array. Each operation on each line (Beginning either with R, U or Q).

-1 will represent the end of input.Output


For each Query operation print the element present at row index K and colum index L of the matrix in its current state.Explanation


For Input:

2

1 2

3 4

R 90

Q 0 0

Q 0 1

R 90

Q 0 0

U 0 0 6

Q 1 1

-1


Initial Matrix

1 2

3 4


For R 90, clockwise rotation by 90 degrees, the matrix will become

3 1

4 2


For Q 0 0, print the element at row index 0 and column index 0 of A, which is 3.

For Q 0 1, print the element at row index 0 and column index 1 of A, which is 1.


Again for R 90, clockwise rotation by 90 degrees, the matrix will become

4 3

2 1


For Q 0 0, print the element at row index 0 and column index 0 of A, which is 4.


For U 0 0 6, update the value at row index 0 and column index 1 in the initial matrix to 6. So the updated matrix will be,

6 2

3 4

After updating, we need to rotate the matrix by sum of all rotation angles applied till now(i.e. R 90 and R 90 => 90 + 90 => 180 degrees in clockwise direction).

After rotation the matrix will now become

4 3

2 6


Next for Q 1 1, print the element at row index 1 and column index 1 of A, which is 6.

output

3

1

4

6


sample input:2


2

5 6

7 8

R 90

Q 0 1

R 270

Q 1 1

R 180

U 0 0 4

Q 0 0

-1


sample ouput 2:


5

8

8



Code that i wrote is:



n=int(input())

matrix=[]

for i in range(n):

  a=input().split()

  matrix+=[a]

def transpose_matrix(matrix):

  for i in range(len(matrix)):

    for j in range(i,len(matrix)):

      matrix[i][j], matrix[j][i] = matrix[j][i],matrix[i][j]

def reverse_rows(matrix):

  for i in range (len(matrix)):

    k = len(matrix) - 1;

    for j in range(0,k):

      matrix[i][j], matrix[i][k] = matrix[i][k], matrix[i][j]

      k = k - 1 

def rotation(angle):

  number=int(angle)/90

  number=int(number) 

  for i in range(number):

    transpose_matrix(matrix)

    reverse_rows(matrix) 

angle=0

while True:

  para=input()

  if para=="-1":

    break

  else:

    parameter=para.split()

    if parameter[0]=="R":

      rotation(int(parameter[1]))

      angle+=int(parameter[1])

    elif parameter[0]=="Q":

      a=int(parameter[1])

      b=int(parameter[2])

      print(matrix[a][b])

    elif parameter[0]=="U":

      a=int(parameter[1]) 

      b=int(parameter[2])

      c=int(parameter[3])

      matrix[a][b] = c

      rotation(angle)





but im not getting the desired output for second input.... can anybody share the working code for this.

      


1
Expert's answer
2021-03-11T06:30:51-0500
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)

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

sree
10.03.21, 17:32

for this code im getting errors... can anybody share the working code

Leave a comment

LATEST TUTORIALS
New on Blog
APPROVED BY CLIENTS