Pegue uma matriz não aninhada como entrada. Transforme-o em uma matriz usando o seguinte método:
Digamos que minha matriz é [1, 2, 3, 4, 5]
Primeiro, repito essa matriz 5 vezes: (o comprimento)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Então, eu li ao longo das diagonais:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
Eu aplaino essa matriz e a divido em pedaços de cinco (o comprimento):
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
Isso é código de golfe. Menos bytes ganha.
code-golf
array-manipulation
matrix
Gryphon
fonte
fonte
Respostas:
05AB1E, 13 bytes
Experimente online!
Explicação:
fonte
Gelatina , 11 bytes
Experimente online!
Explicação
fonte
L
fazer coisas estranhas, usei o registro: / Tentei novamente e funciona ... basicamente o mesmo, então acho que vou remover o meu.Python 2,
10596 bytes-1 e -4 e -4 bytes graças ao Flp.Tkc
O loop for adiciona os itens como na descrição, a verdadeira magia acontece no zip, que é daqui
fonte
JavaScript (ES6) 100
101 105Menos golfe
Teste
fonte
return
. Você deve postar uma dica sobre isso no tópico de dicas do ES6.eval
é melhor mesmo este tempo :(MATL , 17 bytes
Experimente online!
Como funciona
A explicação a seguir usa a entrada
[1 2 3 4 5]
como exemplo. Para visualizar os resultados intermediários, insira%
(símbolo de comentário) após qualquer declaração no código.Observe que
;
é o separador de linhas para matrizes. Assim,[1 2]
é um vetor de linha,[1; 2]
é um vetor de coluna e[1 0; 0 1]
é a matriz de identidade 2 × 2.fonte
JavaScript (ES6), 116 bytes
Bem, é um começo ...
fonte
R, 84 bytes
Lê a entrada de stdin e gera / retorna uma matriz R.
Explicado
O aspecto mais interessante sobre essa resposta é como as diagonais são recuperadas. Em geral, um objeto pode ser dividido usando a
split
função se for fornecido um objeto contendo fatores sobre os quais o objeto é dividido. Para criar esses fatores, podemos usarcol
erow
que retornam uma matriz contendo os índices de coluna e linha, respectivamente. Tomando as diferenças:row(m)-col(m)
obtemos uma matriz como:em que cada diagonal é identificada exclusivamente. Agora podemos dividir com base nessa matriz e transformá-la em uma lista irregular, aplicando
split
:(Observe como o nome de cada vetor corresponde aos valores diagonais na matriz acima).
O último passo é apenas achatar e transformá-lo em uma matriz do formulário:
fonte
Mathematica 93 Bytes
Aqui está como eu normalmente escrevia esse código (109 bytes):
Esse gráfico de matriz fornece uma boa idéia da estrutura devido a um vetor de entrada que aumenta sequencialmente.
Aqui está o gráfico da matriz com um vetor de entrada aleatório. Obviamente, alguma estrutura ainda existe.
fonte
Mathematica, 92 bytes
Função sem nome, tendo uma lista como argumento. Pode haver outras estruturas para essa função, mas espero que eu tenha jogado essa estrutura muito bem ....
A primeira parte
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
define uma funçãon
de dois argumentos: o primeiro é uma lista de comprimentol
e o segundo é uma função a ser aplicada às listas.n
aplica essesl-1
tempos de função à lista de argumentos invertidos, salvando todos os resultados em sua lista de saída. (Definirr
el
ao longo do caminho é apenas jogar golfe).n
é chamado duas vezes na lista original, uma vez com a função sendoRest
(solte o primeiro elemento da lista) e uma vez com a função sendoMost
(solte o último elemento). Isso produz todas as sublistas desejadas, mas a lista inteira existe duas vezes (daí o extraMost
) e a primeira metade existe em ordem inversa (daí or[...]
). Por fim,~ArrayReshape~{l,l}
esquece a estrutura atual da lista e a força a ser uma matrizl
xl
.fonte
Mathematica, 85 bytes
Literalmente, execute as etapas sugeridas:
Meu intestino diz que deve haver uma maneira inteligente de usar
Part
isso, mas cada tentativa que fiz foi superior a 85 bytes.fonte
Ruby (110 bytes)
A
sort
operação pode não ser necessária, mas o documento para Enumerable # group_by não garante a ordem dos valores nos valores de hash (que são matrizes), mas as versões atuais do Ruby fornecem a ordem que você esperaria e a ordem que eu precisaria sesort
estivesse removido do meu código.Os passos são os seguintes.
Por fim,
f.to_a
retorna a matriz mostrada anteriormente.fonte