Às vezes, tenho listas de matrizes constantes no meu código:
[ [[1, 0],
[0, 1]],
[[1, 0],
[0,-1]],
[[0, 1],
[1, 0]],
[[0,-1],
[1, 0]] ]
Esse é um uso terrível do espaço da tela. Prefiro escrevê-los um ao lado do outro:
[ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Você verá que essa ainda é uma lista aninhada sintaticamente válida, não é mais retangular e tem uma estrutura muito diferente (em particular, fica mais profunda a cada vez que adiciono uma matriz maior que 1x1). No entanto, ainda é possível reconstruir a lista inicial de matrizes dessa nova lista.
Para que eu possa usar essa sintaxe no futuro, preciso que você escreva algum código que converta matrizes que foram gravadas em um arranjo horizontal na lista de matrizes que elas representam.
Para garantir que as respostas não executem a correspondência de padrões 2D no layout do código-fonte, a entrada será fornecida apenas como o objeto da matriz ou, se você fizer uma representação de cadeia, ela não conterá nenhum espaço em branco indicando como o objeto literal foi escrito no código. Então você receberia uma entrada como esta:
[[[1, 0], [[1, 0], [[0, 1], [[0,-1], [0, 1]], [0,-1]], [1, 0]], [1, 0]]]
E a saída deve ser a seguinte matriz ou sua representação de cadeia (novamente, nenhum layout adicional é necessário):
[[[1, 0], [0, 1]], [[1, 0], [0,-1]], [[0, 1], [1, 0]], [[0,-1], [1, 0]]]
Esta é a primeira e mais fácil parte de um desafio em duas partes. Nesta, você pode assumir que todas as matrizes são quadradas e têm as mesmas dimensões e que estão alinhadas adequadamente uma à outra. Na segunda parte, relaxaremos essas suposições.
Regras
A entrada será uma lista aninhada ou sua representação de string canônica (no idioma de sua escolha) e você deverá gerar o resultado no mesmo formato. O resultado sempre conterá pelo menos uma matriz e as matrizes podem ser tão pequenas quanto 1x1. As matrizes conterão apenas números inteiros (assinados) com valor absoluto menor que 128.
Você pode escrever um programa ou uma função e usar qualquer um dos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
Cada caso de teste possui a) as matrizes da lista dispostas muito próximas umas das outras, como estariam no código (essa não é sua entrada), b) a lista não formatada sem o espaço em branco estranho ( essa é sua entrada), c) a saída esperada.
Pretty: [ [[0]] ]
Input: [[[0]]]
Output: [[[0]]]
Pretty: [ [[-1]], [[0]], [[1]] ]
Input: [[[-1]],[[0]],[[1]]]
Output: [[[-1]],[[0]],[[1]]]
Pretty: [ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Input: [[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
Output: [[[1,0],[0,1]],[[1,0],[0,-1]],[[0,1],[1,0]],[[0,-1],[1,0]]]
Pretty: [ [[1, 0, 0], [[ 127, 63, 31], [[1, 0, 0], [[0, 0, 0],
[0, 1, 0], [ 15, 0, -15], [0, 0, 1], [0, 0, 0],
[0, 0, 1]], [ -31, -63, -127]], [0, 1, 0]], [0, 0, 0]] ]
Input: [[[1,0,0],[[127,63,31],[[1,0,0],[[0,0,0],[0,1,0],[15,0,-15],[0,0,1],[0,0,0],[0,0,1]],[-31,-63,-127]],[0,1,0]],[0,0,0]]]
Output: [[[1,0,0],[0,1,0],[0,0,1]],[[127,63,31],[15,0,-15],[-31,-63,-127]],[[1,0,0],[0,0,1],[0,1,0]],[[0,0,0],[0,0,0],[0,0,0]]]
fonte
[([1, 0], [0, 1]), ([1, 0], [0, -1]), ([0, 1], [1, 0]), ([0, -1], [1, 0])]
saída é válida para o terceiro caso de teste? É lista mista e tupla.[([1,0], ([1, 0}, ...
e isso forneceria informações adicionais.Respostas:
Geléia ,
20151311 bytesExperimente online!
fundo
Como a maioria das coisas, esse desafio é bastante simples depois que você descobre o que precisa fazer. E acabei conseguindo, depois de três exclusões e uma reversão ...
Primeiro, devemos descobrir as dimensões das matrizes. Isso é mais fácil do que foi dito: o primeiro elemento do primeiro elemento é a primeira linha da primeira matriz de saída, portanto, seu comprimento é igual ao número de colunas das matrizes quadradas de saída.
Por exemplo, se a entrada for
o primeiro elemento do primeiro elemento é
[1, 0, 0]
, cujo comprimento é ℓ = 3 .Se nivelarmos a entrada e a dividirmos em pedaços desse comprimento, obteremos todas as linhas das matrizes de saída, embora na ordem errada. Para nosso exemplo de entrada, isso fornece
Para obter a saída final, devemos primeiro dividir a matriz de linhas em ℓ pedaços de comprimento igual. Para nosso exemplo de entrada, isso fornece
Agora, cada coluna é uma das matrizes de saída; portanto, basta transpor a matriz de matrizes resultante. Para nosso exemplo de entrada, isso fornece
como desejado.
Como funciona
fonte
Pitão , 12 bytes
Esta é uma porta da minha resposta Jelly.
Experimente online!
Como funciona
Pyth analisa o programa da seguinte maneira (pseudo-código).
Q é uma variável que mantém a entrada. J é uma variável indefinida.
Primeira
J = l(h(h(Q)))
armazena o comprimento da cabeça (primeiro elemento) da cabeça de Q em J .Em seguida,
.n(Q)
achata Q , ec(..., J)
divide o resultado em pedaços de comprimento J .Depois,
c(J, ...)
divide o resultado em J pedaços.Por fim,
C(...)
transpõe o resultado.fonte
Pitão , 29 bytes
Suíte de teste.
Como funciona
Algoritmo
Vamos trabalhar na entrada
[[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
.Usaremos operações de cadeia pura aqui.
Primeiramente, dividimos a entrada nas vírgulas que não fazem parte da lista mais profunda (isso é feito dividindo-se na regex
\B,
):Em seguida, encontramos o índice da primeira substring que não inicia
[[
(isso é feito verificando se o caractere no índice1
é[
). Nesse caso, é4
porque a substring no índice 4 é a[0,1]]
que não inicia[[
.Em seguida, agrupamos as substrings em grupos de 4 e depois transpomos:
E então nos juntamos a eles com vírgulas:
fonte
JavaScript (ES6),
132130 bytesExistem quatro casos:
n
ao mesmo tempo.n
elemento th.fonte
05AB1E , 11 bytes
Um porto da resposta de Dennis . Código:
Usa a codificação CP-1252 . Experimente online!
fonte
Mathematica, 104 bytes
Entrada
saída
entrada
saída
{{{0}}} e {{{-1}}, {{0}}, {{1}}} também funcionam
-11 bytes graças a Martin Ender
fonte