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 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 1
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
Sample Output 1
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 Output 2
5
8
8
11
46
output:
Errors/Warnings:
Traceback (most recent call last):
File "main.py", line 46, in <module>
query(matrix, args)
File "main.py", line 23, in query
i, j = map(int, _args)
ValueError: too many values to unpack (expected 2)
Expected:
11
46
23
def rotateClockwise(A,degree):
degree=degree%360
iter =degree/90
N = len(A[0])
while(iter):
for i in range(N // 2):
for j in range(i, N - i - 1):
temp = A[i][j]
A[i][j] = A[N - 1 - j][i]
A[N - 1 - j][i] = A[N - 1 - i][N - 1 - j]
A[N - 1 - i][N - 1 - j] = A[j][N - 1 - i]
A[j][N - 1 - i] = temp
iter-=1
# Function to print the matrix
def printMatrix(A,x,y):
print(A[x][y])
def updateMatrix(A,x,y,z):
A[x][y]=z
def main():
# Initialize matrix
matrix =[]
n = int(input())
for i in range(n):
row = input().split()
for j in range(len(row)):
row[j] = int(row[j])
matrix.append(row)
choice = input()
if(choice=='-1'):exit()
while(1):
if(choice[0]=='Q'):
printMatrix(matrix,int(choice[2]),int(choice[4]))
elif(choice[0] =='U'):
updateMatrix(matrix,int(choice[2]),int(choice[4]),int(choice[6]))
elif(choice[0] =='R'):
str =choice[1:]
rotateClockwise(matrix,int(str))
choice =input()
if(choice=='-1'): exit()
main()
Comments
when I'm running this code for sample output2 it is giving the output 5 8 5 instead of 5 8 8....pls tell me why??
Leave a comment