L'idée
Nous avons déjà fait des spirales matricielles, et des rotations complètes, et même des rotations diagonales , mais pas, autant que je sache, des rotations de serpents !
Qu'est-ce qu'une rotation de serpent?
Imaginez les rangées d'une matrice serpentant d'avant en arrière, avec des séparateurs entre eux comme les séparateurs d'une longue file d'attente:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15|
+------------ |
20 19 18 17 16|
+--------------+
Imaginez maintenant faire pivoter ces éléments par 2. Chaque élément avance, comme les personnes se déplaçant en ligne, et les éléments à la fin se répandent et reviennent au début:
+--------------+
--> 19 20 1 2 3|
+------------ |
| 8 7 6 5 4|
| +-----------+
| 9 10 11 12 13|
+------------ |
<-- 18 17 16 15 14|
+--------------+
S'il y a un nombre impair de lignes, il sortira par la droite, mais continuera au début. Par exemple, voici une rotation 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 -->
+--------------+
Une rotation négative vous fera reculer. Voici une rotation de -2:
+--------------+
<-- 3 4 5 6 7|
+------------ |
|12 11 10 9 8|
| +-----------+
|13 14 15 1 2 <--
+--------------+
Le défi
Votre fonction ou programme prendra 2 entrées, dans n'importe quel format pratique:
- Une matrice
- Un entier (positif ou négatif) indiquant le nombre d'emplacements pour le faire pivoter.
Il renverra:
- La matrice tournée
Remarques:
- Code golf. Le moins d'octets gagne.
- Les matrices n'ont pas besoin d'être carrées, mais contiendront au moins 2 lignes et 2 colonnes
- Les entiers positifs feront pivoter la ligne 1 vers la droite
- Les entiers négatifs feront pivoter la ligne 1 vers la gauche
- Vous pouvez inverser la signification des nombres de rotation positifs / négatifs, si cela vous convient
- Le numéro de rotation peut être supérieur au nombre d'articles. Dans ce cas, il se terminera. Autrement dit, il sera équivalent au nombre modulo le nombre d'articles.
- La matrice ne contiendra que des entiers, mais elle peut contenir des entiers, y compris des répétitions
Cas de test
Format:
- Matrice
- Numéro de rotation
- Valeur de retour attendue
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