A ideia
Já fizemos espirais de matriz antes, rotações completas e até rotações diagonais , mas não, até onde posso encontrar, rotações de serpentes !
O que é uma rotação de cobra?
Imagine as linhas de uma matriz serpenteando para frente e para trás, com divisórias entre elas como as divisórias da longa fila:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15|
+------------ |
20 19 18 17 16|
+--------------+
Agora imagine girar esses itens em 2. Cada item avança, como pessoas se movendo em uma linha, e os itens no final se espalham e retornam ao início:
+--------------+
--> 19 20 1 2 3|
+------------ |
| 8 7 6 5 4|
| +-----------+
| 9 10 11 12 13|
+------------ |
<-- 18 17 16 15 14|
+--------------+
Se houver um número ímpar de linhas, ele sairá da direita, mas continuará sendo inserido no início. Por exemplo, aqui está uma rotação de 3:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15
+--------------+
+--------------+
--> 13 14 15 1 2|
+------------ |
| 7 6 5 4 3|
| +-----------+
| 8 9 10 11 12 -->
+--------------+
Uma rotação negativa o levará para trás. Aqui está uma rotação -2:
+--------------+
<-- 3 4 5 6 7|
+------------ |
|12 11 10 9 8|
| +-----------+
|13 14 15 1 2 <--
+--------------+
O desafio
Sua função ou programa terá duas entradas, em qualquer formato conveniente:
- Uma matriz
- Um número inteiro (positivo ou negativo) indicando quantos lugares para rotacioná-lo.
Voltará:
- A matriz rotacionada
Notas:
- Código de golfe. Menos bytes ganha.
- As matrizes não precisam ser quadradas, mas conterão pelo menos 2 linhas e 2 colunas
- Inteiros positivos girarão a linha 1 para a direita
- Inteiros negativos girarão a linha 1 para a esquerda
- Você pode reverter o significado dos números de rotação positivo / negativo, se conveniente
- O número da rotação pode ser maior que o número de itens. Nesse caso, ele será quebrado. Ou seja, será equivalente ao número do módulo o número de itens.
- A matriz conterá apenas números inteiros, mas pode conter números inteiros, incluindo repetições
Casos de teste
Formato:
- Matriz
- Número de rotação
- Valor de retorno esperado
4 5
6 7
1
6 4
7 5
2 3 4 5
6 7 8 9
10 11 12 13
-3
5 9 8 7
12 11 10 6
13 2 3 4
8 8 7 7
5 5 6 6
10
5 5 8 8
6 6 7 7