Objetivo
Dada una matriz 2D de cualquier tamaño, escriba un programa o función para cambiar alternativamente las columnas y filas
Ejemplo
a b c d e
f g h i j
k l m n o
Todos los elementos en la primera columna se desplazan hacia abajo una fila, la segunda columna se desplaza hacia arriba una fila, el tercer desplazamiento hacia abajo una fila y así sucesivamente, envolviéndose cuando alcanzan el borde.
k g m i o
a l c n e
f b h d j
Todos los elementos en la primera fila se desplazan hacia la derecha , el segundo hacia la izquierda , el tercero hacia la derecha , etc., envolviéndose cuando alcanzan el borde.
o k g m i
l c n e a
j f b h d
Seguiré la tradición de seleccionar el código de trabajo más corto como la mejor respuesta
code-golf
array-manipulation
Karan Shishoo
fuente
fuente
Respuestas:
Casco , 7 bytes
Pruébalo en línea!
Explicación
fuente
MATL , 13 bytes
Pruébalo en línea!
Explicación
fuente
J ,
26, 2119 bytes-5 bytes gracias a millas
Explicación:
^:2
- repita dos veces lo siguiente:@|:
- transponer y#\
- encuentra la longitud de los prefijos (1, 2, 3 ... filas)_1^
- elevar -1 a las potencias anteriores, creando una lista de -1 -1 -1 1 alterna ...|."_1~
- gire cada fila de la matriz de entrada con desplazamiento de la lista anteriorPruébalo en línea!
Versión original:
Cómo funciona
^:2
- repita dos veces lo siguiente:|:
- transponer y|."0 1]
- Gire cada fila de la matriz de entrada, compensaciones en la lista:@#
- el número de filas en la matriz($_1 1"0)
- alternativo _1 1 (3 -> _1 1 _1)Pruébalo en línea!
fuente
_1 1..
uso(|."_1~_1^2|#\)@|:^:2
también2|
papelWolfram Language (Mathematica) , 55 bytes
Pruébalo en línea!
fuente
Python 2 , 83 bytes
Pruébalo en línea!
fuente
APL + WIN, 30 bytes
Solicita la entrada de pantalla de una matriz 2D
fuente
APL (Dyalog Unicode) , 26 bytes
Pruébalo en línea!
Prefijo Dfn.
¿Cómo?
fuente
APL (Dyalog Unicode) , 15 bytes (SBCS)
Pruébalo en línea!
fuente
JavaScript (ES6),
9491 bytesProbablemente haya una forma más golfista de hacer la rotación ...
fuente
Pyth, 15 bytes
Pruébalo en línea
Explicación
fuente
q / kdb + , 32 bytes
Solución:
Ejemplo:
Explicación:
Voltee la cuadrícula para aplicar rotación a las columnas , la segunda iteración voltea una vez más, por lo tanto, la rotación se aplica a las filas en la segunda pasada.
La rotación se basa en la lista
-1 1 -1 1..
de la longitud de la fila / columna que se rota.Se han extraído unos 9 bytes de esta versión más fácil de leer.
fuente
JavaScript (ES6),
11676 bytesPruébalo en línea!
Comentado
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
Limpio , 93 bytes
Como una función parcial literal, eso parece una cara.
Pruébalo en línea!
fuente
05AB1E , 14 bytes
Pruébalo en línea!
Explicación
fuente
NARS APL, 36 bytes, 18 caracteres
Este {⍵⌽⍨- × - \ ⍳≢⍵} rotaría cada fila del argumento de la matriz siguiendo el vector -1 1 -1 1, etc. (que tiene su longitud del vector la longitud de las filas de la matriz del argumento). Prueba:
fuente
bash y cols., 84
Solución de shell no competitiva.
Esto se basa en una función que alterna la dirección de rotación de las filas. El mismo procedimiento realizado en la matriz transpuesta rotará las columnas. Por ejemplo
transpose | rotate | transpose | rotate
.La rotación alterna se puede hacer en matrices de un solo carácter con
sed
esto:La transposición se puede hacer con
rs
odatamash
:Tomados en conjunto:
Salida:
fuente