Objetivo
Dada uma matriz 2D de qualquer tamanho, escreva um programa ou função para alternar alternadamente as colunas e linhas
Exemplo
a b c d e
f g h i j
k l m n o
Todos os elementos no primeiro deslocamento da coluna para baixo uma linha, a segunda troca de coluna até uma linha, o terceiro deslocamento para baixo uma fileira e assim por diante, de acondicionamento quando eles atingem a borda.
k g m i o
a l c n e
f b h d j
Todos os elementos da primeira linha são deslocados para a direita , o segundo para a esquerda , o terceiro para a direita etc., quebrando quando atingem a borda.
o k g m i
l c n e a
j f b h d
Vou seguir a tradição de selecionar o código de trabalho mais curto como a melhor resposta
code-golf
array-manipulation
Karan Shishoo
fonte
fonte
Respostas:
Casca , 7 bytes
Experimente online!
Explicação
fonte
MATL , 13 bytes
Experimente online!
Explicação
fonte
J ,
26, 2119 bytes-5 bytes graças a milhas
Explicação:
^:2
- repita duas vezes o seguinte:@|:
- transpor e#\
- encontre o comprimento dos prefixos (1, 2, 3 ... linhas)_1^
- aumente -1 para as potências acima, criando uma lista de -1 1 -1 1 ...|."_1~
- gire cada linha da matriz de entrada com deslocamento da lista acimaExperimente online!
Versão original:
Como funciona
^:2
- repita duas vezes o seguinte:|:
- transpor e|."0 1]
- gire cada linha da matriz de entrada, deslocamentos na lista:@#
- o número de linhas na matriz($_1 1"0)
- alternativo _1 1 (3 -> _1 1 _1)Experimente online!
fonte
_1 1..
uso(|."_1~_1^2|#\)@|:^:2
também2|
parte #Wolfram Language (Mathematica) , 55 bytes
Experimente online!
fonte
Python 2 , 83 bytes
Experimente online!
fonte
APL + WIN, 30 bytes
Solicita a entrada na tela de uma matriz 2D
fonte
APL (Dyalog Unicode) , 26 bytes
Experimente online!
Prefixo Dfn.
Quão?
fonte
APL (Dyalog Unicode) , 15 bytes (SBCS)
Experimente online!
fonte
JavaScript (ES6),
9491 bytesProvavelmente existe uma maneira mais golfista de fazer a rotação ...
fonte
Pitão, 15 bytes
Experimente online
Explicação
fonte
q / kdb + , 32 bytes
Solução:
Exemplo:
Explicação:
Vire a grade para aplicar rotação às colunas , a segunda iteração vira mais uma vez, portanto, a rotação é aplicada às linhas na segunda passagem.
A rotação é baseada na lista
-1 1 -1 1..
do comprimento da linha / coluna que está sendo girada.A 9 bytes saudáveis foram extraídos desta versão mais fácil de ler
fonte
JavaScript (ES6),
11676 bytesExperimente online!
Comentado
fonte
Gelatina , 10 bytes
Experimente online!
fonte
Limpo , 93 bytes
Como uma função parcial literal, isso parece um rosto.
Experimente online!
fonte
05AB1E , 14 bytes
Experimente online!
Explicação
fonte
NARS APL, 36 bytes, 18 caracteres
Este {⍵⌽⍨- × - \ ⍳≢⍵} giraria cada linha do argumento da matriz seguindo o vetor -1 1 -1 1 etc (que tem seu comprimento de vetor o comprimento das linhas da matriz de argumentos). Teste:
fonte
bash et al, 84
Solução shell não concorrente.
Isso se baseia em uma função que alterna a direção da rotação das linhas. O mesmo procedimento feito na matriz transposta girará as colunas. Por exemplo
transpose | rotate | transpose | rotate
.A rotação alternada pode ser feita em matrizes de caracteres únicos com o
sed
seguinte:A transposição pode ser feita com
rs
oudatamash
:Tomados em conjunto:
Resultado:
fonte