Ідея
Раніше ми робили матричні спіралі, повні обертання і навіть діагональні обертання , але ні, наскільки я можу знайти, зміїні обертання !
Що таке обертання змій?
Уявіть, що рядки матриці перекидаються туди-сюди, з роздільниками між ними, подібно подільникам довгої черги:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15|
+------------ |
20 19 18 17 16|
+--------------+
Тепер уявіть, що обертайте ці елементи на 2. Кожен предмет просувається, як і люди, що рухаються в рядку, а елементи в кінці розливаються і повертаються до початку:
+--------------+
--> 19 20 1 2 3|
+------------ |
| 8 7 6 5 4|
| +-----------+
| 9 10 11 12 13|
+------------ |
<-- 18 17 16 15 14|
+--------------+
Якщо є непарна кількість рядків, вона вийде праворуч, але все ж завернеться до початку. Наприклад, ось 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 -->
+--------------+
Негативна ротація відведе вас назад. Ось -2 обертання:
+--------------+
<-- 3 4 5 6 7|
+------------ |
|12 11 10 9 8|
| +-----------+
|13 14 15 1 2 <--
+--------------+
Змагання
Ваша функція або програма займуть 2 входи у будь-якому зручному форматі:
- Матриця
- Ціле число (позитивне чи негативне), яке вказує, скільки місць повернути його.
Він повернеться:
- Обертається матриця
Примітки:
- Код гольфу. Виграє найменше байт.
- Матриці не повинні бути квадратними, але міститимуть щонайменше 2 рядки та 2 стовпчики
- Позитивні цілі числа будуть обертатися рядком 1 вправо
- Негативні цілі числа повертатимуть рядок 1 ліворуч
- Ви можете змінити значення позитивних / негативних чисел обертання, якщо це зручно
- Номер обертання може бути більшим, ніж кількість елементів. У такому випадку вона завернеться. Тобто вона буде еквівалентна кількості модулів кількості предметів.
- Матриця міститиме лише цілі числа, але може містити будь-які цілі числа, включаючи повтори
Випробування
Формат:
- Матриця
- Номер обертання
- Очікуване повернене значення
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