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.
The below code is successful code for the question, but only one case is running successfully. sample inputs and outputs are given below :
def ReadMatrix():
matrix = []
for i in range(int(input())):
row = [int(j) for j in input().split()]
matrix.append(row)
return matrix
def RotateMatrix(matrix, degrees):
n = len(matrix[0])
rotations = (degrees // 90) % 4
for r in range(rotations):
temp_matrix = []
for i in range(n):
column = [row[i] for row in matrix]
column.reverse()
temp_matrix.append(column)
matrix = temp_matrix
return matrix
matrix = ReadMatrix()
rotation = 0
while True:
line = input().split()
if line[0] == "-1":
break;
elif line[0] == "R":
rotation += int(line[1])
matrix = RotateMatrix(matrix, int(line[1]))
elif line[0] == "U":
matrix[int(line[1])][int(line[2])] = int(line[3])
matrix = RotateMatrix(matrix, rotation)
elif line[0] == "Q":
print(matrix[int(line[1])][int(line[2])])
else:
print("Error: unexpected command '" + line[0] + "'")
exit(1)
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
But the sample output generating for the sample input - 2 is :
5
8
5
So, please help me by sending code that I have given above after modified, for getting correct output.
Thankyou.
Here's your solution
def ReadMatrix():
matrix = []
for i in range(int(input())):
row = [int(j) for j in input().split()]
matrix.append(row)
return matrix
def Rotate(a = []):
a1 = [[] for i in range(len(a))]
for i in range(len(a)):
for j in a[i]:
a1[i].append(j)
for x in range(len(a)):
for y in range(len(a[x])):
a1[y][len(a) - x - 1] = a[x][y]
return a1
matrix = ReadMatrix()
matrix1 = [[] for i in range(len(matrix))]
for i in range(len(matrix)):
for j in matrix[i]:
matrix1[i].append(j)
rotation = 0
while True:
line = input().split()
if line[0] == "-1":
break
elif line[0] == "R":
rotation += int(line[1])
for i in range((int(line[1]) // 90) % 4):
matrix = Rotate(matrix)
elif line[0] == "U":
matrix1[int(line[1])][int(line[2])] = int(line[3])
matrix = matrix1.copy()
for i in range((rotation // 90) % 4):
matrix = Rotate(matrix)
elif line[0] == "Q":
print(matrix[int(line[1])][int(line[2])])
else:
print("Error: unexpected command '" + line[0] + "'")
exit(1)
Your RotateMatrix function doing wrong thing at all, ist can solve only one exact type of cases
Comments
Leave a comment