fundo
Nas linguagens de programação mais razoáveis, é muito fácil girar as linhas ou colunas de uma matriz 2D. Nesse desafio, sua tarefa é girar as antiagonais . Lembre-se de que as antiagonais de uma matriz 2D são suas fatias 1D tiradas na direção nordeste ↗.
Entrada
Uma matriz 2D retangular não vazia de números de um dígito em qualquer formato razoável. Observe que a matriz pode não ser um quadrado.
Saída
A mesma matriz, mas com cada anti-diagonal girado um passo para a direita.
Exemplo
Considere a 3x4
matriz de entrada
0 1 2 3
4 5 6 7
8 9 0 1
As antiagonais dessa matriz são
0
4 1
8 5 2
9 6 3
0 7
1
Suas versões rotacionadas são
0
1 4
2 8 5
3 9 6
7 0
1
Assim, a saída correta é
0 4 5 6
1 8 9 0
2 3 7 1
Regras e pontuação
Você pode escrever um programa completo ou uma função. Também é aceitável escrever uma função que modifique a matriz de entrada, se o seu idioma permitir. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você deseja incluir vários números no seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos, ou você deseja listar as penalidades do sinalizador de intérpretes separadamente ou deseja mostrar as pontuações antigas que melhorou), verifique se a pontuação real é o último número no cabeçalho.
Casos de teste adicionais
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
fonte
CJam,
44434240 bytesTeste aqui.
Hmm, muito melhor do que minha primeira tentativa, mas tenho a sensação de que Dennis resolverá isso em muito menos de qualquer maneira ...
Entrada e saída são como grades ASCII:
dá
fonte
J, 24 caracteres
Função tendo um argumento.
J tem um operador
/.
chamado Oblique . Ele não pode invertê-lo, portanto a reconstrução não é trivial, mas você pode considerar "listar oblíquos" como uma permutação dos elementos da matriz. Portanto, invertemos essa permutação com/:
( Classificação diádica ), colocando a permutação "listando oblíquos" para esse tamanho (</.@i.@$
) à direita e nossos novos valores oblíquos, rotacionados adequadamente, à esquerda. Em seguida, reformulamos essa lista na matriz retangular antiga usando boa e velha$$
.Experimente online.
fonte
J,
3830 bytes8 bytes salvos graças a @algorithmshark.
A função coleta as bordas superior e esquerda em uma lista, corta a lista em duas partes de tamanhos suficientes e as costura na parte direita e inferior da peça principal.
Uso:
Experimente online aqui.
fonte
{./.
substitui}:@{.,{:"1
, e você pode salvar o til duas vezes por lançando o trem em torno de:{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 bytesIsso cria uma função sem nome que aceita uma matriz e retorna a matriz de entrada modificada no local.
Ungolfed:
Agradecemos a Martin Büttner pelo aconselhamento algorítmico e por salvar 4 bytes!
fonte
ES6, 75 bytes
Isso aceita uma matriz de matrizes como parâmetro e a modifica no local.
Ungolfed:
Veja o diagrama do @ aditsu para mais esclarecimentos.
fonte
{t.push(r.pop());r.unshift(t.shift())}
parat.push(r.pop())+r.unshift(t.shift())
Pitão, 20 bytes
Utiliza a abordagem do Adistu de remover a linha superior e a coluna direita e colá-las à esquerda e à parte inferior. Mas com estruturas de dados mutáveis, não transposições.
fonte
Oitava, 85 bytes
Espero poder me livrar dos
end
s.fonte
Python 2 ,
11310494 bytesExperimente online!
Esta é uma interpretação literal do método do @ aditsu. A sintaxe do Python para tratar listas vazias como False ajudou a economizar 10 bytes extras.
fonte
0
em[0:1]