Défi
Étant donné une matrice carrée de caractères (caractères ASCII imprimables sur un octet), faites tourner chaque "anneau" de la matrice dans des directions opposées.
Prenons un exemple:
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
Ensuite, l'anneau le plus à l'extérieur est tourné de 90 degrés dans le sens des aiguilles d'une montre, comme suit:
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
Le deuxième anneau est tourné de 90 degrés dans le sens antihoraire:
7 8 9 9 E J
C E => 8 I
H I J 7 C H
L'anneau final est tourné de 90 degrés dans le sens des aiguilles d'une montre, mais comme il s'agit d'un seul chiffre (lettre dans notre exemple), il n'est pas vraiment affecté.
Le résultat final est:
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
Si la matrice a une longueur de côté uniforme, l'anneau le plus à l'intérieur sera un carré 2x2 et devrait toujours être tourné.
Contribution
Une liste de listes dans n'importe quel format standard raisonnable. Par exemple, une chaîne délimitée par des espaces délimitée par des sauts de ligne ou une liste de chaînes délimitées par des espaces est acceptable, mais une liste des valeurs sous forme d'anneaux autour de la matrice n'est pas acceptable. Les personnages ne sont pas nécessairement uniques.
Sortie
Une liste de listes dans n'importe quel format standard raisonnable. Mêmes règles que l'entrée.
Cas de test
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édits
Fortement inspiré par un défi connexe qui fait tourner chaque élément dans le sens antihoraire d'une position (pas de 90 degrés).
Réponses:
Haskell , 94 octets
Une fonction anonyme prenant et renvoyant une liste de
String
s.Utiliser comme
(cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"]
.Essayez-le en ligne!
Comment ça marche
r
estreverse
.t
est un octet plus court que l'importationData.List.transpose
.t.r
fait pivoter une liste de listes de 90 degrés dans le sens horaire et lar.t
fait tourner dans le sens antihoraire.?
prend deux arguments, une liste de fonctions et une matrice comme liste de chaînes.?
supprime la première fonctionf
de la liste des fonctions et la première lignea
de la matrice.b
de la matrice dans le sens des aiguilles d'une montre, et revient avec cela et les fonctions restantes. Cela dépouille progressivement la matrice de l'extérieur vers l'intérieur, un anneau toutes les quatre étapes.a
au résultat et lui applique la fonctionf
pour ajuster l'orientation de la matrice.?
avec la matrice d'entrée comme une liste de chaînes et une liste infinie de fonctions, qui se répète cycliquement toutes les quatre étapes.?
lors de la récurrence.la source
Python 2 , 104 octets
Essayez-le en ligne!
x[l-i][j]
sont les coordonnées d'un virage dans le sens horaire,x[i][l-j]
pour un virage à contre-sens.min(i,j,l-i,l-j)%2
est utilisé pour choisir la bonne directionla source
Mathematica, 113 octets
il est préférable de saisir une chaîne de caractères comme "E" pour des lettres spéciales comme E, I ...
contribution
sortie
la source
Octave, 86 octets
Essayez-le en ligne!
la source