Идея
Мы делали матричные спирали и раньше, и полные вращения, и даже диагональные вращения , но не, насколько я могу найти, змеиные повороты !
Что такое вращение змеи?
Представьте себе строки матрицы, извивающиеся взад-вперед, с разделителями между ними, как разделителями длинной очереди:
+--------------+
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