El reto
Dada una n x n
matriz de enteros conn >= 2
1 2 3 4
y una lista de enteros con 2n
elementos exactos
[1,2, -3, -1]
Salida de la matriz girada. Esta matriz se construye de la siguiente manera:
- Tome el primer entero de la lista y gire la primera fila a la derecha por este valor.
- Tome el siguiente entero y gire la primera columna hacia abajo por este valor.
- Tome el siguiente número entero y gire la segunda fila hacia la derecha por este valor, etc. hasta que haya rotado cada fila y columna de la matriz una vez.
La lista puede contener enteros negativos, lo que significa que desplaza la fila / columna a la izquierda / arriba en lugar de a la derecha / abajo. Si el entero es cero, no gire la fila / columna.
Ejemplo usando la entrada de arriba
Elemento de la lista Matriz Explicación -------------------------------------------------- ---------- 1 2 1 Girar la primera fila a la derecha por 1 3 4 2 2 1 Gire la primera columna hacia abajo 2 3 4 -3 2 1 Girar la segunda fila a la izquierda por 3 4 3 -1 2 3 Girar la 2da columna hacia arriba por 1 4 1
Reglas
- Puede elegir el formato de entrada más conveniente. Solo deja en claro cuál usas.
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
El formato de entrada aquí es una lista de listas para la matriz y una lista normal para los enteros.
[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]] [[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]] [[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 , 2, -3], [- 4,5,6], [7, -8,0]]
¡Feliz codificación!
code-golf
array-manipulation
matrix
Denker
fuente
fuente
Respuestas:
CJam, 13 bytes
Un bloque (función) sin nombre que toma la matriz y la lista en la parte superior de la pila (en ese orden) y deja la nueva matriz en su lugar.
Ejecute todos los casos de prueba.
La misma idea, el mismo recuento de bytes, diferentes implementaciones:
Explicación
Idealmente, queremos tratar cada instrucción en la lista de la misma manera, y solo usarla para rotar la primera fila de la matriz. Esto se puede hacer fácilmente transformando un poco la matriz después de cada instrucción y asegurándose de que todas esas transformaciones adicionales se cancelen al final. Entonces, después de procesar cada instrucción, rotamos todas las filas una hacia arriba (de modo que la siguiente instrucción a lo largo de la misma dimensión procesa la siguiente fila) y luego transponemos la matriz, de modo que en realidad estamos procesando columnas a continuación. Estas transformaciones adicionales son ortogonales a las instrucciones de la lista y tienen un período de exactamente
2n
exactamente lo que necesitamos.En cuanto al código:
fuente
APL (Dyalog Extended) ,
17151413 bytes-3 bytes por Adám
Pruébalo en línea!
Toma la entrada como una lista donde el primer elemento es la matriz, y los elementos restantes son las cantidades de rotación. Si ⌽ gira a la derecha en lugar de a la izquierda, esto superaría a CJam.
fuente
{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}
→(⍉1⊖⌽@(⍳1)⍢⌽)
pero ¿puedes explicarme por qué@1
no funciona en lugar de@(⍳1)
o@(,1)
? Además, OP puede permitirle tomar la entrada en reversa.at
que está detrás del extendido@
no es una extensión compatible. Sin embargo, puede usar el nativo@
con el`@1
que guarda un byte@1 1
.Python 2, 96 bytes
Pruebas
f
devuelve una lista de tuplas. Cada línea en el cuerpo de la función está sangrada con 1 carácter de tabulación.fuente
return zip(*m)
te ahorraría 5 bytes?m=zip(*m);return m
con justreturn zip(*m)
? No puedo hacer eso porquem=zip(*m)
es parte delfor
cicloStax , 12 bytes
Ejecutar y depurarlo
fuente