Objectif
Étant donné un tableau 2D de n'importe quelle taille, écrivez un programme ou une fonction pour décaler alternativement les colonnes et les lignes
Exemple
a b c d e
f g h i j
k l m n o
Tous les éléments du premier décalage de colonne vers le bas d' une rangée, le deuxième décalage de colonne jusqu'à une rangée, le troisième décalage vers le bas d' une rangée et ainsi de suite, l' emballage quand ils atteignent le bord.
k g m i o
a l c n e
f b h d j
Tous les éléments de la première rangée se déplacent vers la droite , le deuxième vers la gauche , le troisième vers la droite, etc., s'enroulant lorsqu'ils atteignent le bord.
o k g m i
l c n e a
j f b h d
Je suivrai la tradition de sélectionner le code de travail le plus court comme meilleure réponse
code-golf
array-manipulation
Karan Shishoo
la source
la source
Réponses:
Husk , 7 octets
Essayez-le en ligne!
Explication
la source
MATL , 13 octets
Essayez-le en ligne!
Explication
la source
J ,
26, 2119 octets-5 octets grâce aux miles
Explication:
^:2
- répéter deux fois ce qui suit:@|:
- transposer et#\
- trouver la longueur des préfixes (1, 2, 3 ... lignes)_1^
- augmenter -1 aux puissances ci-dessus, créant une liste d'alternance -1 1 -1 1 ...|."_1~
- faire pivoter chaque ligne du tableau d'entrée avec un décalage par rapport à la liste ci-dessusEssayez-le en ligne!
Version originale:
Comment ça fonctionne
^:2
- répéter deux fois ce qui suit:|:
- transposer et|."0 1]
- faire pivoter chaque ligne du tableau d'entrée, décalages dans la liste:@#
- le nombre de lignes dans le tableau($_1 1"0)
- alterné _1 1 (3 -> _1 1 _1)Essayez-le en ligne!
la source
_1 1..
utilisant(|."_1~_1^2|#\)@|:^:2
aussi2|
rôleWolfram Language (Mathematica) , 55 octets
Essayez-le en ligne!
la source
Python 2 , 83 octets
Essayez-le en ligne!
la source
APL + WIN, 30 octets
Invite à saisir à l'écran un tableau 2D
la source
APL (Dyalog Unicode) , 26 octets
Essayez-le en ligne!
Préfixe Dfn.
Comment?
la source
APL (Dyalog Unicode) , 15 octets (SBCS)
Essayez-le en ligne!
la source
JavaScript (ES6),
9491 octetsIl y a probablement une façon plus golfique de faire la rotation ...
la source
Pyth, 15 octets
Essayez-le en ligne
Explication
la source
q / kdb + , 32 octets
Solution:
Exemple:
Explication:
Retournez la grille afin d'appliquer la rotation aux colonnes , la deuxième itération retourne à nouveau ainsi la rotation est appliquée aux lignes de la deuxième passe.
La rotation est basée sur la liste
-1 1 -1 1..
de la longueur de la ligne / colonne en cours de rotation.A la santé 9 octets ont été golfed hors de ce plus facile à lire la version
la source
JavaScript (ES6),
11676 octetsEssayez-le en ligne!
Commenté
la source
Gelée , 10 octets
Essayez-le en ligne!
la source
Nettoyer , 93 octets
En tant que littéral de fonction partielle, cela ressemble à un visage.
Essayez-le en ligne!
la source
05AB1E , 14 octets
Essayez-le en ligne!
Explication
la source
APL NARS, 36 octets, 18 caractères
Ce {⍵⌽⍨- × - \ ⍳≢⍵} ferait pivoter chaque ligne de l'argument de matrice en suivant le vecteur -1 1 -1 1 etc (qui a sa longueur de vecteur la longueur des lignes de la matrice d'argument). Tester:
la source
bash et al, 84
Solution shell non concurrente.
Ceci est basé sur une fonction qui alterne le sens de rotation des rangées. La même procédure effectuée sur le tableau transposé fera pivoter les colonnes. Par exemple
transpose | rotate | transpose | rotate
.La rotation alternée peut être effectuée sur des tableaux à caractère unique avec
sed
comme ceci:La transposition peut se faire avec
rs
oudatamash
:Pris ensemble:
Production:
la source