Untitled
unknown
python
2 years ago
1.4 kB
14
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