Desafio
Dada uma matriz quadrada de caracteres (caracteres ASCII imprimíveis de um byte), gire cada "anel" da matriz em direções opostas.
Vamos dar um exemplo:
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
Em seguida, o anel externo é girado no sentido horário 90 graus, da seguinte maneira:
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
O segundo anel é girado 90 graus no sentido anti-horário:
7 8 9 9 E J
C E => 8 I
H I J 7 C H
O anel final é girado no sentido horário 90 graus, mas como é um número único (letra no nosso exemplo), não é realmente afetado.
O resultado final é:
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
Se a matriz tiver um comprimento lateral uniforme, o anel mais interno será um quadrado de 2x2 e ainda deverá ser girado.
Entrada
Uma lista de listas em qualquer formato padrão razoável. Por exemplo, uma string delimitada por espaço delimitada por nova linha ou uma lista de cadeias delimitadas por espaço é aceitável, mas uma lista dos valores como anéis ao redor da matriz não é aceitável. Os personagens não são necessariamente únicos.
Saída
Uma lista de listas em qualquer formato padrão razoável. Mesmas regras que a entrada.
Casos de teste
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
Créditos
Fortemente inspirado por um desafio relacionado que gira cada elemento no sentido anti-horário uma posição (não 90 graus).