El reto
Dada una n x m
matriz con n > 1
y m > 1
llena de enteros
1 2 3 4 5 6
y una lista de enteros con exactamente tantos valores como 2x2
bloques en la matriz ( (n-1)*(m-1)
si necesita el número exacto)
[1, 2]
Salida de la matriz con cada 2x2
bloque girado por el valor actual en la lista en el orden dado. El ejemplo anterior produciría
4 6 2 5 3 1
El primer bloque se gira una vez hacia la derecha y el segundo bloque se gira dos hacia la derecha.
Notas
- Un número entero positivo significa que giras a la derecha en tantos pasos.
- Un número entero negativo significa que giras a la izquierda en tantos pasos.
- Un cero significa que no giras.
- Gira los bloques en fila. Eso significa que comienzas en la primera fila y vas a la derecha. Una vez que rotó cada bloque en esa fila, pasa al siguiente. Al final, cada bloque se rotó exactamente una vez.
- Tenga en cuenta que los bloques se superponen entre sí. La primera matriz anterior tiene los bloques
[[1,2],[4,5]]
y,[[2,3],[5,6]]
por ejemplo. - Cada rotación de un bloque afecta la rotación en los bloques adyacentes. Es por eso que debe hacer las rotaciones en el patrón descrito anteriormente.
Reglas
- Puede tomar la entrada en el formato más conveniente. Por favor, especifique en su respuesta cuál usa. Sin embargo, esto no le permite leer la matriz en bloque.
- 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 valores.
[[1,2], [3,4]], [-3] -> [[4,1], [3,2]] [[1,1,1], [1,1,1]], [-333, 666] -> [[1,1,1], [1,1,1]] [[1,2,3], [4,5,6]], [1,2] -> [[4,6,2], [5,3,1]] [[1,2,3], [4,5,6], [7,8,9]], [4,0,12, -20] -> [[1,2,3], [4, 5,6], [7,8,9]] [[1,2,3,4,5], [5,4,3,2,1], [1,2,3,4,5]], [2, -3,4,1,6, 24,21, -5] -> [[4,1,5,2,4], [2,1,3,5,5], [3,2,4,3,1]]
¡Feliz codificación!
fuente
4,=
el módulo correcto (a menos que su bloque deba ejecutarse al menos una vez).zW%
de la rotación?CJam,
65636055 bytesNo debe haber una mejor manera de hacer esto ...
Esta es una función sin nombre que espera las instrucciones y la matriz (en ese orden) en la pila y deja la matriz resultante en su lugar.
Pruébalo aquí.
Explicación
No tengo ganas de escribir el desglose completo del código en este momento, así que aquí hay una descripción general:
N
.k
en la matriz de desenrollado cambia cuatro índices:k <- k+1
,k+1 <- k+1+N
,k+N <- k
,k+1+N <- k+1
. Para cada índice a lok
largo de la lista de instrucciones, calculo una permutación correspondiente a esto y la aplico a la matriz de entrada desenrollada.fuente
Python 2 ,
166159 bytesPruébalo en línea!
fuente