Matrix Rotation Hackerrank Solution

This is the solution for the problem Matrix Rotation in Python, found in the algorithm domain of Hackerrank. You are given a 2D matrix, A, of dimension MxN and a positive integer R. You have to rotate the matrix R times and print the resultant matrix. Rotation should be in anti-clockwise direction.

Screenshot[Demo]



The Code
def rotateMat(N,M,l,rot,rin,mat):
        # rotate each layer
        for level in range(l):
                r = rot % len(rin[level])
                rin[level] = rin[level][r:] + rin[level][:r]
        # fill the array with the rotated elements
        for level in range(l):
                top = (N-1) - 2 * level
                side = (M-1) - 2 * level
                for i in range(top):
                        mat[level][level + i] = rin[level].pop(0)  # right
                for j in range(side):
                        mat[level + j][level + top] = rin[level].pop(0)  # down
                for i in range(top):
                        mat[level + side][level + top - i] = rin[level].pop(0)  # left
                for j in range(side):
                        mat[level + side - j][level] = rin[level].pop(0)  # up

def flatRings(M,N,mat,rot):
        # flatten the rings into a list
        l = int(min(N, M)/2)
        rin = [[] for lay in range(l)]
        for level in range(l):
                top = (N-1) - 2 * level
                side = (M-1) - 2 * level
                for i in range(top):  # right
                        rin[level].append(mat[level][level + i])
                for j in range(side):  # down
                        rin[level].append(mat[level + j][level + top])
                for i in range(top):  # left
                        rin[level].append(mat[level + side][level + top - i])
                for j in range(side):  # up
                        rin[level].append(mat[level + side - j][level]) 
        rotateMat(N,M,l,rot,rin,mat)

# input
M, N, rot = map(int, input().split())
mat = []
for i in range(M):
        mat.append(list(map(int, input().split())))
flatRings(M,N,mat,rot)

# print the rotated matrix
for row in range(M):
        for col in range(N):
                print(mat[row][col], "", end="")
        print()


Got anything to say, Please comment them here ! :)

Comments

Popular posts from this blog

Non Restoring Division Algorithm Implementation in C

Hackerrank Modified Kaprekar Numbers Solution

Bit Stuffing Code Implementation in Java