¿No es molesto cuando tomas una foto, pero el fondo resta valor a la sustancia real de la imagen? Yo diría que lo es. ¡Necesito saber cuánto debo recortar para deshacerme de este problema! Pero, como siempre, soy bastante vago, así que necesito que alguien haga esto por mí ...
Tarea y Reglas
Dada una matriz binaria que representa la imagen, genera las dimensiones (ancho y alto) de la submatriz más pequeña que contiene todos los s en la matriz original. Una submatriz es un bloque de entradas adyacentes de la matriz original. De manera equivalente, es una nueva matriz formada superponiendo un subconjunto de filas adyacentes y un subconjunto de columnas adyacentes del original.
- También se permite tomar el ancho y la altura de la matriz como entrada.
- Se garantiza que la entrada contiene al menos un .
- Puede tomar entradas y proporcionar salidas a través de cualquier método estándar , mientras toma nota de que estas lagunas están prohibidas de manera predeterminada. Este es el código de golf , así que intente completar la tarea en la menor cantidad de bytes que pueda administrar en el idioma que elija.
Ejemplo
Casos de prueba
Entrada | Salida [[0,1,0,0,0,1,0]] -> (5,1) o (1,5) [[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0]] -> (3,2) o (2,3) [[1,1,1,1], [0,0,0,0], [0,0,0,0], [1,0,0,0]] -> (4,4) [[0,0,0,0,0,0], [0,1,0,1,0,1], [0,0,0,0,0,0]] -> (5,1) o (1,5) [[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0], [0,1,0,1,0], [ 0,0,0,0,0]] -> (3,3) [[0,0,0,0,0,0], [0,1,0,1,0,0], [0,1,1,0,1,1], [0,0,1, 0,1,0], [0,0,0,0,0,0]] -> (5,3) o (3,5)
code-golf
array-manipulation
matrix
binary-matrix
Sr. Xcoder
fuente
fuente
Respuestas:
MATL , 5 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
APL (Dyalog Unicode) , 10 SBCS de bytes
Función de prefijo tácito anónimo.
Pruébalo en línea!
⍸
índices de 1s.(
…)
Aplica la siguiente función tácita a eso:⌊/
el mínimo ( coordenada y más baja y coordenada x más baja )⌈/-
el máximo menos eso (esto nos da el rango)1+
uno más que (para ser inclusivo)fuente
Octava ,
57 5645 bytesAquí
find
realiza el trabajo pesado:finds
los índices de fila y columna de las entradas distintas de cero. Entonces solo tenemos que encontrar la diferencia entre el máximo y el mínimo (más uno) para cada uno de ellos por separado.¡Gracias @beaker y @AndrasDeak por -1 byte, y @LuisMendo por -11 bytes!
Pruébalo en línea!
fuente
Python 2 ,
9286 bytesPruébalo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 ,
6355 bytes-8 con ayuda de Vincent (tome la matriz de entrada como una matriz de Numpy)
Una función sin nombre aceptar un 2-d Numpy matriz de enteros (en
{0,1}
) que devuelve una lista de números enteros,[width,height]
.Pruébalo en línea!
Versión no Numpy en 63 bytes (aceptando una lista de listas de enteros en
{0,1}
):Pruébalo en línea!
¿Cómo?
Dada una matriz,
a
,for
cada uno (v
) de la transpuesta,zip(*a)
ya
sí nos encontramos con la altura requerida (dada la transpuesta esta es la anchura).La asignación a
max
través dev
arroja una lista de ceros y unos, que representa si cada filav
contiene alguno. La representación de cadena de esta lista se encuentra usando backticks (`...`
), esto le da una cadena con un inicio[
, luego los ceros y los delimitados por,
(coma + espacio). Cortamos esta cadena comenzando en el índice uno en pasos de tres usando[1::3]
solo una cadena de ceros y unos, lo que nos permite usar la función de cadenastrip
para eliminar los ceros externos (strip('0')
).Por ejemplo:
fuente
Retina 0.8.2 , 83 bytes
Pruébalo en línea! Explicación:
Elimine las filas cero iniciales y finales.
Elimine todas las
0
s en las líneas arriba de la última. Elimine todos los1
s dos, pero cambie el dígito debajo de la línea siguiente a a1
en ese caso. Esto es bit a bit o son las filas juntas.Cuente el número de filas como el número de líneas nuevas más 1 y el número de columnas como el número de dígitos entre el primero y el último 1.
fuente
J , 31 bytes
Pruébalo en línea!
Explicación:
fuente
q / kdb +, 16 bytes
fuente
Mathematica, 34 bytes
Pura función. Toma una lista anidada de enteros como entrada y devuelve una lista de dos enteros (la altura seguida por el ancho) como salida. El carácter Unicode es U + F3C7 para
\[Transpose]
.fuente
R ,
4846 bytesPruébalo en línea!
-2 bytes guardados por Giuseppe.
fuente
05AB1E ,
119 bytes-2 bytes gracias a @ Mr.Xcoder .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
ζ‚Oε0Û0Üg
ahorra 2 bytes.Jalea , 9 bytes
Pruébalo en línea!
fuente
Haskell , 76 bytes
Pruébalo en línea!
fuente
Japt,
1615 bytesPruébalo o ejecuta todos los casos de prueba
Explicación
fuente
Rubí , 60 bytes.
Pruébalo en línea!
fuente