Esta es una versión bidimensional de esta pregunta .
Dada una matriz / matriz bidimensional no vacía que contiene solo enteros no negativos:
Salida de la matriz con ceros circundantes eliminados, es decir, el subconjunto contiguo más grande sin ceros circundantes:
Ejemplos:
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
alephalpha
fuente
fuente
:)
Simplemente difícil hacerlo corto.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(el resultado tiene un ancho / alto de1
)Respuestas:
MATL , 3 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
(implicit)
.Wolfram Language (Mathematica) , 42 bytes
Pruébalo en línea!
Los autómatas celulares son, de hecho, la respuesta a la vida , el universo y todo . 1
¿Cómo?
CellularAutomaton
acepta una matriz de entrada y un valor de fondo opcional. Por lo tanto,{#,0}
especifica que se debe aplicar una regla de autómata celular a la entrada, suponiendo un fondo de0
s.Una cosa interesante aquí es que
CellularAutomaton
recorta la salida para que no haya ningún borde de las celdas de fondo (porque de lo contrario la salida se encuentra en un plano infinito).El código aplica la regla
{Null, {}, {0, 0}}
- aplicando la cabezaNull
al vecino de radio 0 de cada celda (es decir, solo el centro: la celda misma) - exactamente las0
veces. El resultado de esto es la entrada original, pero con el fondo eliminado (es decir, recortando los alrededores0
).1. ¿Ves el recuento de mi respuesta? ;)
fuente
JavaScript (ES6), 98 bytes
Pruébalo en línea!
¿Cómo?
Para superar la falta de un zip incorporado, definimos una función g () que puede operar en las filas o en las columnas de la matriz de entrada a [] , dependiendo del valor de la bandera global z .
g () busca el índice mínimo my el índicemáximo M de filas no vacías (si z no está definida) o columnas no vacías (sise define z ) y devuelve el corte correspondientede la matriz o de una fila dada de la matriz.
Para resumir:
.map(z=g)
Comentado
fuente
Haskell ,
6261 bytesPruébalo en línea!
foldr(zipWith(:))e
withe=[]:e
es un poco más cortotranspose
ysnd.span(all(<1))
elimina las principales listas de ceros de una lista de listas. Como setranspose
siguereverse
en una lista 2D, es igual a una rotación de 90 °, el códigof.f.f.f
es solo cuatro veces soltar listas iniciales de ceros y rotar .fuente
Pyth , 13 bytes
Pruébalo en línea!
fuente
=_CQ
que funcionaría en lugar de=Q_CQ
.Jalea , 10 bytes
Pruébalo en línea!
fuente
Brachylog ,
24222019 bytesPruébalo en línea!
Emite la matriz de resultados como una matriz de matrices, o falso para salida vacía
(Gracias a @Fatalize por sugerir un predicado en línea y guardar 1 byte).
Explicación
Predicado 0 (Principal):
Predicado 1:
fuente
{s.h+>0∧.t+>0∧}\↰₁\
. (esto es cierto para casi cualquier respuesta de Brachylog, los predicados en nuevas líneas realmente solo se implementan si desea escribir cosas más legibles).R ,
9610097 bytesPruébalo en línea!
El
~
ayudante toma un vector no negativo y devuelve un vector conFALSE
los "exteriores"0
del vector y losTRUE
positivos y cualquier "interior"0
. Esta función se aplica a las sumas de fila y columna de la matriz de entrada.~
y!
usar el tratamiento analizador R de los operadores.Corregido según el comentario de @ DigEmAll, pero con algunos bytes devueltos por @ J.Doe
fuente
drop=F
como lo hice, de lo contrario, estas 2 pruebas devolverán un vector en lugar de una fila y una columna: ¡ Pruébelo en línea!drop=F
. Todavía menos de una tonelada!R ,
8979 bytesPruébalo en línea!
¡Gracias a @ngm por el código de casos de prueba y a @ J.Doe por guardar 10 bytes!
drop=F
parámetros debido al comportamiento predeterminado de R que convierte la matriz de una sola fila / columna en vectores ...fuente
range
y ajustando la indexaciónAPL (Dyalog Classic) ,
1715 bytesPruébalo en línea!
fuente
Python 2 , 71 bytes
Regresa modificando la entrada. Se debe pasar una lista como entrada.
Pruébalo en línea!
Python 2 , 77 bytes
Esto también modifica la entrada, pero funciona ...
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 66 bytes
Pruébalo en línea!
¡Ahora funciona rellenando la matriz con ceros (gracias @JungHwanMin)!
Un segundo gracias a @JungHwanMin por guardar 4 bytes
fuente
Jalea , 12 bytes
Pruébalo en línea!
Como una función.
fuente
Wolfram Language (Mathematica) , 48 bytes
Pruébalo en línea!
Haciéndolo de la manera normal.
fuente
\[Transpose]
no puedo trabajar aquí.Casco , 11 bytes
Pruébalo en línea!
Siento que algunos bytes podrían reducirse acortando la
!5¡
parte.Cómo funciona
Mapee sobre la versión actual de la entrada y: invierta cada una, después de haber eliminado el prefijo más largo que consiste solo en ceros (la eliminación de este prefijo se realiza utilizando Husk's
↓
, que es una función que recorta la ejecución más larga de elementos consecutivos desde el comienzo del lista que produce resultados verdaderos cuando se ejecuta a través de una función, es decir¬
, lógico no).Transponer, reemplazando las entradas que faltan con 0 .
fuente
Retina , 87 bytes
Pruébalo en línea! Explicación:
Hasta que al menos una fila no comience con cero ...
... elimine el cero inicial de cada fila.
Hasta que al menos una fila no termine con cero ...
... elimine el cero final de cada fila.
Eliminar las primeras filas de ceros.
Elimine las filas finales de ceros, o el último cero restante.
fuente
Carbón , 48 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Incluye 15 bytes para formatear. Explicación:
Repite 4 veces.
Repita mientras la matriz no está vacía pero su última fila suma a cero ...
Elimine la última fila de la matriz e imprima una línea de la longitud de su suma, es decir, nada.
Si la matriz no está vacía, transpórtala.
Formatee la matriz muy bien para su visualización. (La salida estándar sería en su
Iθ
lugar).fuente
JavaScript,
144140129127 bytes140 -> 129 bytes, gracias @Arnauld
Algoritmo
fuente
some/some
lugar defindIndex/find
y reorganizando las declaraciones de la función auxiliar para deshacerse del paréntesis en torno al argumento de la función principal (ahora único).[[]]
de manera que t se garantiza que sea capaz de operar sobrew[0]
.Python 2 ,
118116bytesPruébalo en línea!
Salvado:
fuente
s=sum
en definición lambdaPHP (> = 5,4),
200194186184 bytes(-6 bytes devolviendo en
null
lugar de matriz vacía)(-8 bytes gracias a Titus )
(-2 bytes con llamadas por referencia gracias a Titus )
Pruébalo en línea!
¿Cómo?
Encuentra el índice mínimo y máximo para las filas (
$m
&$M
) y las columnas ($n
&$N
) y reemplaza la entrada con una matriz secundaria de$m,$n
a$M,$N
(esta es una llamada por referencia).fuente
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);
&&
y||
y estoy seguro de que también podré usar ese truco en otros lugares.$a=
lugar dereturn
.Octava,
4849 bytesPruébalo en línea!
Encuentre puntos distintos de cero y reorganícelos en una nueva matriz dispersa.
fuente
K (ngn / k) , 22 bytes
Pruébalo en línea!
fuente
J , 24 bytes
Pruébalo en línea!
Explicación
fuente
Ruby ,
7363 bytesPruébalo en línea!
Editar: simplificado, también la versión anterior se bloqueó para todos los
0
sCómo funciona:
0
sfuente
&.sum<0
lugar de&.sum<1
.Octava ,
7874 bytesPruébalo en línea!
Explicación
Esto gira la matriz en
90
grados (x=rot90(x)
) un número suficiente de veces (for k=1:... end
). El número de rotaciones es un múltiplo de4
, por lo que la matriz final tiene la orientación original. Específicamente, el número de rotaciones es4
multiplicado por el número de ceros en la matriz (nnz(~x)*4
).Para cada rotación, si hay una o más columnas a la izquierda que consisten solo en ceros, se eliminan (
x=x(:,~~cumsum(any(x,1)))
).Lo que queda de la matriz después de este proceso es generado por la función (
function x=f(x)
).fuente
Stax , 14 bytes
Ejecutar y depurarlo
Alternativa, también 14 bytes
Ejecutar y depurarlo
fuente
PHP, 188 bytes
llame por referencia.
Descompostura
fuente
Limpio , 73 bytes
Pruébalo en línea!
Muy similar a la respuesta de Hasikell de Laikoni .
fuente
Python 2 , 86 bytes
Pruébalo en línea!
Toma una lista de listas, devuelve una lista de tuplas.
Explicación
Abusa de la comprensión fuera de la lista. Este es el código expandido equivalente:
fuente
Japt
-h
,2311 bytesIntentalo
Explicación
fuente