Dada una imagen, genera el [ancho en píxeles de una sección vertical completa] 1 (si existe). Si no existe una sección vertical, salida 0
.
La entrada se puede proporcionar como un archivo local o una matriz anidada. Si elige tomar la entrada como una matriz anidada, los píxeles blancos se deben representar con un valor verdadero, mientras que los píxeles no blancos se deben representar con un valor falso.
1. el número de columnas contiguas totalmente blancas
Puedes asumir que
ninguna imagen será mayor de 1000 píxeles cuadrados
no habrá más de una sección vertical completa por imagen
Ejemplos
Entradas:
Salidas:
50
57
0
0
Estos son los dos primeros ejemplos, resaltados (en amarillo) para mostrar sus secciones:
code-golf
image-processing
Puertas de Zach
fuente
fuente
Respuestas:
Jalea, 2 bytes
Pruébalo aquí!
Si codifico una imagen así:
En una matriz anidada como esta:
Luego
P
toma el producto basado en elementos de todos los vectores de fila, yS
suma todos los del resultado, produciendo la longitud del corte vertical. (Esto funciona solo porque se garantiza que solo habrá una porción contigua). En nuestro caso, la respuesta es3
.fuente
ps
¡también funciona en MATL!1
s, lo que significa que el resultadoP
será[0,0,0...0]
, de los cuales elS
um es0
, como se esperaba.Xps
embargo, es posible que necesite si la imagen puede ser una sola fila (o pregunte al OP si hay un tamaño mínimo)APL, 4 bytes
Try it here.
Esta es mi primera respuesta APL!
¡Gracias a @ jimmy23013 y @NBZ por guardar bytes!
fuente
(+/×/⍉)
no funciona(+/×⌿)
y eso es 1 byte más corto.+/×⌿
f←+/×⌿
f picture
Bash + utilidades comunes, 17
Si no se está usando
grep
para el procesamiento de imágenes , entonces usted está haciendo mal ;-).Esto usa la
rs
utilidad para hacer transposición.rs
está incluido en OSX , pero necesitará instalarse en la mayoría de Linux con algo asísudo apt-get install rs
.Las columnas de entrada están TABseparadas, y las filas están separadas por una nueva línea:
Si lo desea, puede preprocesar las imágenes de entrada de ejemplo en este formato con imagemagick y (GNU) sed. P.ej:
fuente
Perl,
2122 bytesVersión fija
Incluye +2 para
-lp
(-l
se puede omitir y seguiría siendo una solución válida, pero es feo sin la nueva línea final)Proporcione secuencias de 1 y 0 en 0 o más líneas en STDIN. Puede agregar espacios o comas o lo que sea entre los dígitos si lo desea, siempre que el uso sea coherente en todas las líneas.
Esto funciona como se muestra, pero se reemplaza
\xce
por el valor del byte literal para obtener la puntuación reclamadaSi hay varias secciones verticales, esto devuelve la suma de todos los anchos de sección. Si desea el ancho de una sección vertical use
Versión antigua
Originalmente entendí mal el desafío e implementé un programa que da verdadero o falso en función de si existe una línea vertical. El código y la explicación aquí son para esta versión anterior
Si solo pudiera agregar 1 = ~ a la izquierda para una simetría casi perfecta ... supongo que lo más cercano sería
Explicación
fuente
Python 2, 30 bytes
Hay una solución sorprendentemente elegante que utiliza muchas de mis funciones integradas favoritas encadenadas.
Usando la imagen de prueba de @Lynn:
fuente
Pyth, 5
Pruébalo aquí
Esto usa el algoritmo de Lynn, pero decidí publicarlo solo para mostrar cómo hacer operaciones de vectores de golf en Pyth. El truco aquí es encadenar los ayudantes de sintaxis de "azúcar"
V
yF
para que el pliegue se aplique como una operación vectorial. El operador que está plegado es, por supuesto, la multiplicación, y luego el resultado se suma para obtener la respuesta final.fuente
JavaScript (ES6),
544543 bytesBasado en la respuesta de @ Lynn's Jelly, aunque desde el golf usando
every
o ensome
lugar dereduce
. La primera versión codifica negro = 0 mientras que la segunda codifica negro = 1.Editar: Guardado 2 bytes más gracias a @ edc65.
fuente
map
J ,
56 bytesToma la matriz booleana como argumento.
Esta es mi primera respuesta J! (estuvo mal durante 1 año y medio ...)
*/
producto en columnas+/
suma[:
cap (sirve como marcador de posición ya+/
que no debe tomar un argumento izquierdo)Pruébalo en línea!
fuente
CJam, 7 bytes
Pruébalo en línea!
fuente
Mathematica 24
Toma una matriz de la siguiente forma:
Y en este caso salidas:
fuente
Length[Total@#~Cases~0]&
mismo recuento de bytes𝔼𝕊𝕄𝕚𝕟, 7 caracteres / 9 bytes
Try it here (Firefox only).
Este es el gran algoritmo de @ Lynn, pero lo encontré de forma independiente. (Pensé que había un lugar para esto en alguna parte, aún buscando: P)
Explicación
МƟï
transpone la matriz de entrada,ⓜ⨴$
convierte cada vector interno en su producto y⨭
suma la matriz resultante.fuente
Japt ,
64 bytesToma la entrada como un conjunto de filas,
1
siendo blanco y0
negro.Pruébalo
Explicación
fuente
y x_×
por 5. En realidad,e
funciona tan bien×
, así quey xe
por 4 :-)