O desafio
Dada uma n x m
matriz com n > 1
e m > 1
preenchida com números inteiros
1 2 3 4 5 6
e uma lista de números inteiros com exatamente quantos valores quantos 2x2
blocos na matriz ( (n-1)*(m-1)
se você precisar do número exato)
[1, 2]
Emita a matriz com cada 2x2
bloco rotacionado pelo valor atual na lista na ordem especificada. O exemplo acima renderia
4 6 2 5 3 1
O primeiro bloco é girado uma vez para a direita e o segundo bloco é girado duas para a direita.
Notas
- Um número inteiro positivo significa que você gira para a direita em muitas etapas.
- Um número inteiro negativo significa que você gira para a esquerda em muitas etapas.
- Um zero significa que você não gira.
- Você gira os blocos em linhas. Isso significa que você começa na primeira linha e vai para a direita. Depois de girar cada bloco nessa linha, você passa para o próximo. No final, cada bloco era girado exatamente uma vez.
- Lembre-se de que os blocos se sobrepõem. A primeira matriz acima possui os blocos
[[1,2],[4,5]]
e,[[2,3],[5,6]]
por exemplo. - Cada rotação de um bloco afeta a rotação nos blocos adjacentes. É por isso que você precisa fazer as rotações no padrão descrito acima.
Regras
- Você pode pegar a entrada no formato mais conveniente. Especifique na sua resposta qual você usa. Isso não permite que você leia a matriz em blocos.
- Função ou programa completo permitido.
- Regras padrão para entrada / saída.
- Aplicam-se brechas padrão .
- Isso é código-golfe , e a menor contagem de bytes vence. O desempatador é uma inscrição anterior.
Casos de teste
O formato de entrada aqui é uma lista de listas para a matriz e uma lista normal para os 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 codificação!
fonte
4,=
o módulo correto (a menos que seu bloco precise executar pelo menos uma vez?).zW%
à rotação?CJam,
65636055 bytesNão deve haver uma maneira melhor de fazer isso ...
Essa é uma função sem nome que espera as instruções e a matriz (nessa ordem) na pilha e deixa a matriz resultante em seu lugar.
Teste aqui.
Explicação
Não estou com vontade de escrever a descrição completa do código agora, então aqui está uma visão geral:
N
.k
na matriz desenrolado muda quatro índices:k <- k+1
,k+1 <- k+1+N
,k+N <- k
,k+1+N <- k+1
. Para cada índicek
ao longo da lista de instruções, eu calculo uma permutação correspondente a isso e a aplico à matriz de entrada não enrolada.fonte
Python 2 ,
166159 bytesExperimente online!
fonte