アイデア
これまでにマトリックススパイラル、完全回転、さらには対角回転を行ってきましたが、私が知る限り、スネーク回転はしていません!
ヘビの回転とは何ですか?
行列の行が前後に蛇行し、それらの間の仕切りが長い待ち行列の仕切りのようになっていると想像してください。
+--------------+
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