Rotate Matrix Rings

 avatar
unknown
python
4 years ago
831 B
7
Indexable
m, n = list(map(int, input().split()))
mat = [[int(x) for x in input().split()][:n] for i in range(m)]
k = int(input())
rc = int(min(m, n) / 2 + 0.5)
for i in range(rc):
    rings = []
    r, c, r_offset, c_offset = i, i, 0, 1
    while True:
        rings.append((r, c))
        if c + c_offset < i or c + c_offset > n - i - 1 or r + r_offset < i or r + r_offset > m - i - 1:
            r_offset, c_offset = c_offset, -r_offset
        r += r_offset
        c += c_offset
        if (r == i and c == i) or (c < i or c > n - i - 1 or r < i or r > m - i - 1):
            break
    if len(rings) <= k:
        break
    aux = [mat[i[0]][i[1]] for i in rings]
    aux = aux[-k:] + aux[:-k]
    for j in range(len(rings)):
        mat[rings[j][0]][rings[j][1]] = aux[j]

for i in range(m):
    print(*mat[i])
Editor is loading...