dde272c4b8
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
122 lines
3.1 KiB
Markdown
122 lines
3.1 KiB
Markdown
---
|
|
id: 698a1a73ade5ac0e19180fa4
|
|
title: "Challenge 201: Matrix Shift"
|
|
challengeType: 29
|
|
dashedName: 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:
|
|
|
|
```js
|
|
[
|
|
[1, 2, 3],
|
|
[4, 5, 6]
|
|
]
|
|
```
|
|
|
|
with a shift of `1`, move all the numbers to the right one:
|
|
|
|
```js
|
|
[
|
|
[6, 1, 2],
|
|
[3, 4, 5]
|
|
]
|
|
```
|
|
|
|
# --hints--
|
|
|
|
`shift_matrix([[1, 2, 3], [4, 5, 6]], 1)` should return `[[6, 1, 2], [3, 4, 5]]`.
|
|
|
|
```js
|
|
({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]]`.
|
|
|
|
```js
|
|
({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]]`.
|
|
|
|
```js
|
|
({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]]`.
|
|
|
|
```js
|
|
({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]]`.
|
|
|
|
```js
|
|
({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]]`.
|
|
|
|
```js
|
|
({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--
|
|
|
|
```py
|
|
def shift_matrix(matrix, shift):
|
|
|
|
return matrix
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```py
|
|
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
|
|
```
|