3.1 KiB
id, title, challengeType, dashedName
| id | title | challengeType | dashedName |
|---|---|---|---|
| 698a1a73ade5ac0e19180fa4 | Challenge 201: Matrix Shift | 29 | challenge-201 |
--description--
Given a matrix (array of arrays) of numbers and an integer, shift all values in the matrix by the given amount.
- A positive shift moves values to the right.
- A negative shift moves values to the left.
Values should wrap:
- Treat the matrix as one continuous sequence of values.
- When a value moves past the end of a row, it continues at the beginning of the next row.
- When a value moves past the last position in the matrix, it wraps to the first position.
- The same applies in reverse when shifting left.
For example, given:
[
[1, 2, 3],
[4, 5, 6]
]
with a shift of 1, move all the numbers to the right one:
[
[6, 1, 2],
[3, 4, 5]
]
--hints--
shift_matrix([[1, 2, 3], [4, 5, 6]], 1) should return [[6, 1, 2], [3, 4, 5]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3], [4, 5, 6]], 1), [[6, 1, 2], [3, 4, 5]])`)
}})
shift_matrix([[1, 2, 3], [4, 5, 6]], -1) should return [[2, 3, 4], [5, 6, 1]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3], [4, 5, 6]], -1), [[2, 3, 4], [5, 6, 1]])`)
}})
shift_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 5) should return [[5, 6, 7], [8, 9, 1], [2, 3, 4]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 5), [[5, 6, 7], [8, 9, 1], [2, 3, 4]])`)
}})
shift_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], -6) should return [[7, 8, 9], [1, 2, 3], [4, 5, 6]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], -6), [[7, 8, 9], [1, 2, 3], [4, 5, 6]])`)
}})
shift_matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], 7) should return [[10, 11, 12, 13], [14, 15, 16, 1], [2, 3, 4, 5], [6, 7, 8, 9]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], 7), [[10, 11, 12, 13], [14, 15, 16, 1], [2, 3, 4, 5], [6, 7, 8, 9]])`)
}})
shift_matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], -54) should return [[7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 1, 2], [3, 4, 5, 6]].
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(shift_matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], -54), [[7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 1, 2], [3, 4, 5, 6]])`)
}})
--seed--
--seed-contents--
def shift_matrix(matrix, shift):
return matrix
--solutions--
def shift_matrix(matrix, shift):
rows = len(matrix)
cols = len(matrix[0])
flat = [num for row in matrix for num in row]
n = len(flat)
s = shift % n
shifted = flat[-s:] + flat[:-s] if s != 0 else flat[:]
result = []
for i in range(rows):
result.append(shifted[i*cols:(i+1)*cols])
return result