Esta é uma versão bidimensional desta pergunta .
Dada uma matriz / matriz bidimensional não vazia contendo apenas números inteiros não negativos:
Envie a matriz com os zeros circundantes removidos, ou seja, o maior sub-arranjo contíguo sem os zeros circundantes:
Exemplos:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
alefalpha
fonte
fonte
:)
Apenas difícil de abreviar.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(o resultado com uma largura / altura1
)Respostas:
MATL , 3 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
(implicit)
.Wolfram Language (Mathematica) , 42 bytes
Experimente online!
Autômatos celulares são realmente a resposta para a vida , o universo e tudo . 1
Quão?
CellularAutomaton
aceita uma matriz de entrada e um valor de segundo plano opcional. Assim,{#,0}
especifica que uma regra de autômato celular deve ser aplicada à entrada, assumindo um fundo de0
s.Uma coisa interessante aqui é que
CellularAutomaton
corta a saída para que nenhuma borda de células de fundo esteja presente (porque, caso contrário, a saída ficará em um plano infinito).O código aplica a regra
{Null, {}, {0, 0}}
- aplicar a cabeçaNull
ao vizinho do raio 0 de cada célula (ou seja, apenas o centro: a própria célula) - exatamente as0
vezes. O resultado disso é a entrada original, mas com o fundo removido (ou seja, cortando os arredores0
).1. Veja o número de bytes da minha resposta? ;)
fonte
JavaScript (ES6), 98 bytes
Experimente online!
Quão?
Para superar a falta de um zip embutido, definimos uma função g () capaz de operar nas linhas ou nas colunas da matriz de entrada a [] , dependendo do valor do sinalizador global z .
g () olha para o índice mínimo de m e de índice máximo M quer de linhas não-vazia (se z é indefinido) ou colunas não-vazia (se z é definida) e retorna o correspondente fatia de quer da própria matriz ou a uma determinada linha da matriz.
Para resumir:
.map(z=g)
Comentado
fonte
Haskell ,
6261 bytesExperimente online!
foldr(zipWith(:))e
come=[]:e
é um pouco mais curtotranspose
esnd.span(all(<1))
elimina as principais listas de zeros de uma lista de listas. Comotranspose
seguidoreverse
em uma lista 2D, é igual a uma rotação de 90 °, o códigof.f.f.f
é apenas quatro vezes menor que as listas principais de zeros e girar .fonte
Pitão , 13 bytes
Experimente online!
fonte
=_CQ
que funcionaria no lugar de=Q_CQ
.Gelatina , 10 bytes
Experimente online!
fonte
Brachylog ,
24222019 bytesExperimente online!
Produz a matriz de resultados como uma matriz de matrizes ou false para saída vazia.
(Agradecemos a @Fatalize por sugerir predicado em linha e economizar 1 byte.)
Explicação
Predicado 0 (Principal):
Predicado 1:
fonte
{s.h+>0∧.t+>0∧}\↰₁\
. (isso é verdade para praticamente qualquer resposta Brachylog, os predicados em novas linhas são realmente implementados apenas se você quiser escrever coisas mais legíveis).R ,
96 10097 bytesExperimente online!
O
~
auxiliar pega um vetor não negativo e retorna um vetor comFALSE
para os "exteriores"0
s do vetor eTRUE
para positivos e quaisquer "interiores"0
. Esta função é aplicada às somas de linha e coluna da matriz de entrada.~
e!
use o tratamento do analisador de R dos operadores.Corrigido de acordo com o comentário de @ DigEmAll, mas com alguns bytes retornados de @ J.Doe
fonte
drop=F
como eu fiz, caso contrário, esses dois testes retornarão um vetor em vez de linha e coluna: Experimente online!drop=F
. Ainda sob uma tonelada!R ,
8979 bytesExperimente online!
Obrigado a @ngm pelo código de casos de teste e a @ J.Doe por salvar 10 bytes!
drop=F
parâmetro devido ao comportamento padrão do R que transforma a matriz única linha / col em vetores ...fonte
range
e ajustando a indexaçãoAPL (Dyalog Classic) ,
1715 bytesExperimente online!
fonte
Python 2 , 71 bytes
Retorna modificando a entrada. Uma lista deve ser passada como entrada.
Experimente online!
Python 2 , 77 bytes
Isso também modifica a entrada, mas funciona ....
Experimente online!
fonte
Wolfram Language (Mathematica) , 66 bytes
Experimente online!
Agora funciona preenchendo a matriz com zeros (obrigado @JungHwanMin)!
Um segundo obrigado a @JungHwanMin por salvar 4 bytes
fonte
Gelatina , 12 bytes
Experimente online!
Como uma função.
fonte
Wolfram Language (Mathematica) , 48 bytes
Experimente online!
Fazendo da maneira normal.
fonte
\[Transpose]
não pode trabalhar aqui.Casca , 11 bytes
Experimente online!
Eu sinto que alguns bytes podem ser removidos encurtando a
!5¡
parte.Como funciona
Mapeie a versão atual da entrada e: inverta cada uma, depois de ter eliminado o prefixo mais longo, consitando apenas zeros (a eliminação desse prefixo é realizada usando Husk's
↓
, que é uma função que corta a execução mais longa de elementos consecutivos desde o início do lista que produz resultados verdadeiros quando executada em uma função, a saber¬
, não lógica).Transponha, substituindo as entradas ausentes por 0 .
fonte
Retina , 87 bytes
Experimente online! Explicação:
Até que pelo menos uma linha não comece com zero ...
... remova o zero inicial de cada linha.
Até que pelo menos uma linha não termine com zero ...
... remova o zero à direita de cada linha.
Remova as linhas principais de zeros.
Remova as linhas finais de zeros ou o último zero restante.
fonte
Carvão , 48 bytes
Experimente online! Link é a versão detalhada do código. Inclui 15 bytes para formatação. Explicação:
Repita 4 vezes.
Repita enquanto a matriz não está vazia, mas sua última linha é igual a zero ...
Remova a última linha da matriz e imprima uma linha do comprimento de sua soma, ou seja, nada.
Se a matriz não estiver vazia, transponha-a.
Formate a matriz bem para exibição. (Em
Iθ
vez disso, seria a saída padrão .)fonte
JavaScript,
144140129127 bytes140 -> 129 bytes, obrigado @Arnauld
Algoritmo
fonte
some/some
vez defindIndex/find
e reorganizando as declarações da função auxiliar para se livrar dos parênteses em torno do argumento da função principal (agora único).[[]]
para garantir que t seja capaz de operarw[0]
.Python 2 ,
118116 bytesExperimente online!
Salvou:
fonte
s=sum
em lambda definiçãoPHP (> = 5,4),
200194186184 bytes(-6 bytes retornando em
null
vez de matriz vazia)(-8 bytes graças a Titus )
(-2 bytes com chamada por referência, graças a Titus )
Experimente online!
Quão?
Localiza o índice mínimo e máximo para linhas (
$m
&$M
) e colunas ($n
&$N
) e substitui a entrada por uma sub-matriz de$m,$n
para$M,$N
(esta é uma chamada por referência).fonte
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
e||
tenho certeza de que também poderei usá-lo em outros lugares.$a=
vez dereturn
.Oitava,
4849 bytesExperimente online!
Encontre pontos diferentes de zero e reorganize-os em uma nova matriz esparsa.
fonte
K (ngn / k) , 22 bytes
Experimente online!
fonte
J , 24 bytes
Experimente online!
Explicação
fonte
Ruby ,
7363 bytesExperimente online!
Editar: simplificado, também a versão anterior caiu para todos os
0
sComo funciona:
0
sfonte
&.sum<0
vez de&.sum<1
.Oitava ,
7874 bytesExperimente online!
Explicação
Isso gira a matriz em
90
graus (x=rot90(x)
) um número suficiente de vezes (for k=1:... end
). O número de rotações é múltiplo de4
, portanto a matriz final tem a orientação original. Especificamente, o número de rotações é4
o número de zeros na matriz (nnz(~x)*4
).Para cada rotação, se houver uma ou mais colunas à esquerda, consistindo apenas de zeros, elas serão removidas (
x=x(:,~~cumsum(any(x,1)))
).O que resta da matriz após esse processo é gerado pela função (
function x=f(x)
).fonte
Stax , 14 bytes
Execute e depure
Alternativa, também 14 bytes
Execute e depure
fonte
PHP, 188 bytes
chamada por referência.
demolir
fonte
Limpo , 73 bytes
Experimente online!
Muito semelhante à resposta de Haskell de Laikoni .
fonte
Python 2 , 86 bytes
Experimente online!
Pega uma lista de listas, retorna uma lista de tuplas.
Explicação
Abusa a compreensão fora da lista. Este é o código expandido equivalente:
fonte
Japonês
-h
,2311 bytesTente
Explicação
fonte