Untitled

 avatar
unknown
python
a year ago
1.6 kB
5
Indexable
def getFloor(i, j, lm, lv):
    return min(min(i, lm - i - 1), min(j, lv - j - 1))

def matrixRotation(matrix, r):
    # Write your code here
    temp = copy.deepcopy(matrix)
    lm = len(matrix)
    lv = len(matrix[0])
    for i, v1 in enumerate(matrix):
        for j, v2 in enumerate(v1):
            ni = i
            nj = j
            f = getFloor(i, j, lm, lv)
            lmf = lm - f
            lvf = lv - f
            # floor control
            # print("[{0}][{1}]: {2}".format(i, j, f))
            # print("[{0}][{1}]: {2}-{3}".format(i, j, lmf, lvf))
            nr = r % (((lm - (2 * f)) + (lv - (2 * f)) - 2) * 2)
            for x in range(nr):
                # directions control; 0-bottom, 1-right, 2-top, 3-left
                for y in range(4):
                    ti = ni
                    tj = nj
                    if y == 0 and ni + 1 < lmf and nj == f:
                        ti = ni + 1
                    elif y == 1 and nj + 1 < lvf and ni + 1 == lmf:
                        tj = nj + 1
                    elif y == 2 and ni > f:
                        ti = ni - 1
                    elif y == 3 and nj > f:
                        tj = nj - 1
                    if (ti != ni or tj != nj) and f == getFloor(ti, tj, lm, lv):
                        # print("[{0}][{1}]: [{2}][{3}] - {4}".format(i, j, ti, tj, v2))
                        ni = ti
                        nj = tj
                        break
            temp[ni][nj] = v2
    # print
    for x in temp:
        print(" ".join(str(v) for v in x))
Editor is loading...
Leave a Comment