Untitled

 avatar
unknown
python
10 months ago
1.4 kB
2
Indexable
def getFloor(i, j, lm, lv):
    return min(min(i, lm - i - 1), min(j, lv - j - 1))

def rotate_layer(matrix, f, r, lm, lv):
    # Create a list of elements in the current layer
    layer = []
    for j in range(f, lv - f):
        layer.append(matrix[f][j])
    for i in range(f + 1, lm - f):
        layer.append(matrix[i][lv - f - 1])
    for j in range(lv - f - 2, f - 1, -1):
        layer.append(matrix[lm - f - 1][j])
    for i in range(lm - f - 2, f, -1):
        layer.append(matrix[i][f])

    # Rotate the layer by r positions
    r = r % len(layer)
    rotated_layer = layer[r:] + layer[:r]

    # Put the rotated elements back into the matrix
    idx = 0
    for j in range(f, lv - f):
        matrix[f][j] = rotated_layer[idx]
        idx += 1
    for i in range(f + 1, lm - f):
        matrix[i][lv - f - 1] = rotated_layer[idx]
        idx += 1
    for j in range(lv - f - 2, f - 1, -1):
        matrix[lm - f - 1][j] = rotated_layer[idx]
        idx += 1
    for i in range(lm - f - 2, f, -1):
        matrix[i][f] = rotated_layer[idx]
        idx += 1

def matrixRotation(matrix, r):
    lm = len(matrix)
    lv = len(matrix[0])
    for f in range(min(lm, lv) // 2):
        rotate_layer(matrix, f, r, lm, lv)

    # Print the rotated matrix
    for row in matrix:
        print(" ".join(str(v) for v in row))
Editor is loading...
Leave a Comment