Вызов
Учитывая квадратную матрицу символов (однобайтовые печатные символы ASCII), вращайте каждое «кольцо» матрицы в противоположных направлениях.
Давайте возьмем пример:
1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J K
L M N O P
Затем самое наружное кольцо поворачивается по часовой стрелке на 90 градусов, например:
1 2 3 4 5 L G B 6 1
6 A M 2
B F => N 3
G K O 4
L M N O P P K F A 5
Второе кольцо повернуто против часовой стрелки на 90 градусов:
7 8 9 9 E J
C E => 8 I
H I J 7 C H
Финальное кольцо поворачивается по часовой стрелке на 90 градусов, но, поскольку это одно число (в нашем примере это буква), это не влияет.
Окончательный результат:
L G B 6 1
M 9 E J 2
N 8 D I 3
O 7 C H 4
P K F A 5
Если матрица имеет четную длину стороны, самое внутреннее кольцо будет иметь квадрат 2х2 и все еще должно вращаться.
вход
Список списков в любом разумном стандартном формате. Например, строка, разделенная пробелом, разделенная символом новой строки, или список строк, разделенных пробелом, являются приемлемыми, но список значений в виде колец вокруг матрицы недопустим. Персонажи не обязательно уникальны.
Выход
Список списков в любом разумном стандартном формате. Те же правила, что и для ввода.
Тестовые случаи
1 2 3 7 4 1
4 5 6 => 8 5 2
7 8 9 9 6 3
1 2 3 4 5 6 Y S M G A 1
A B C D E F Z E K Q W 2
G H I J K L => ! D O I V 3
M N O P Q R @ C P J U 4
S T U V W X # B H N T 5
Y Z ! @ # $ $ X R L F 6
кредиты
Сильно вдохновлен связанной задачей, которая поворачивает каждый элемент против часовой стрелки на одну позицию (не на 90 градусов).
Ответы:
Haskell , 94 байта
Анонимная функция, принимающая и возвращающая список
String
s.Использовать как
(cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"]
.Попробуйте онлайн!
Как это работает
r
естьreverse
.t
на один байт короче импортаData.List.transpose
.t.r
поворачивает список списков на 90 градусов по часовой стрелке иr.t
поворачивает его против часовой стрелки.?
принимает два аргумента, список функций и матрицу в виде списка строк.?
удаляет первую функциюf
из списка функций, а первую строку -a
из матрицы.b
часть матрицы по часовой стрелке и выполняет рекурсивные операции с этой и остальными функциями. Это постепенно снимает матрицу с внешней стороны, по одному кольцу каждые четыре шага.a
к результату и применяетf
к ней функцию для настройки ориентации матрицы.?
с входной матрицей в виде списка строк и бесконечного списка функций, который циклически повторяется каждые четыре шага.?
при рекурсии.источник
Python 2 , 104 байта
Попробуйте онлайн!
x[l-i][j]
являются координатами поворота по часовой стрелке,x[i][l-j]
для поворота против часовой стрелки.min(i,j,l-i,l-j)%2
используется, чтобы выбрать правильное направлениеисточник
Mathematica, 113 байтов
лучше вводить как символьную строку, например, "E", для специальных букв, таких как E, I ...
вход
выход
источник
Октава, 86 байт
Попробуйте онлайн!
источник