Answer to Question #168582 in Python for mani

Question #168582

Matrix Rotations

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.


Input


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 column index L of the matrix in its current state.


1
Expert's answer
2021-03-03T10:05:00-0500
def rotateMatrix(mat):

  

    if not len(mat):

        return

      

    """

        top : starting row index

        bottom : ending row index

        left : starting column index

        right : ending column index

    """

  

    top = 0

    bottom = len(mat)-1

  

    left = 0

    right = len(mat[0])-1

  

    while left < right and top < bottom:

  

        # Store the first element of next row,

        # this element will replace first element of

        # current row

        prev = mat[top+1][left]

  

        # Move elements of top row one step right

        for i in range(left, right+1):

            curr = mat[top][i]

            mat[top][i] = prev

            prev = curr

  

        top += 1

  

        # Move elements of rightmost column one step downwards

        for i in range(top, bottom+1):

            curr = mat[i][right]

            mat[i][right] = prev

            prev = curr

  

        right -= 1

  

        # Move elements of bottom row one step left

        for i in range(right, left-1, -1):

            curr = mat[bottom][i]

            mat[bottom][i] = prev

            prev = curr

  

        bottom -= 1

  

        # Move elements of leftmost column one step upwards

        for i in range(bottom, top-1, -1):

            curr = mat[i][left]

            mat[i][left] = prev

            prev = curr

  

        left += 1

  

    return mat

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

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog
APPROVED BY CLIENTS