Dada uma imagem, imprima a [largura em pixels de uma seção vertical completa] 1 (se houver). Se não houver seção vertical, produza 0
.
A entrada pode ser fornecida como um arquivo local ou uma matriz aninhada. Se você optar por receber a entrada como uma matriz aninhada, os pixels brancos devem ser representados por um valor verdadeiro, enquanto os pixels não brancos devem ser representados por um valor falsey.
1. o número de colunas contíguas totalmente brancas
Você pode assumir que
nenhuma imagem será maior que 1000 pixels quadrados
não haverá mais de uma seção vertical completa por imagem
Exemplos
Entradas:
Saídas:
50
57
0
0
Aqui estão os dois primeiros exemplos, destacados (em amarelo) para mostrar suas seções:
code-golf
image-processing
Zach Gates
fonte
fonte
Respostas:
Gelatina, 2 bytes
Experimente aqui!
Se eu codificar uma imagem assim:
Em uma matriz aninhada como esta:
Em seguida,
P
pega o produto em termos de elementos de todos os vetores de linha eS
soma todos os resultados no resultado, produzindo o comprimento da fatia vertical. (Isso funciona apenas porque é garantido que haja apenas uma fatia contígua.) No nosso caso, a resposta é3
.fonte
ps
trabalha em MATL também!1
s, significando o resultado deP
will[0,0,0...0]
, da qual oS
um é0
, como esperado.Xps
, no entanto, se a imagem pode ser uma única linha (ou pedir o OP se há um tamanho mínimo)APL, 4 bytes
Try it here.
Esta é a minha primeira resposta APL!
Obrigado a @ jimmy23013 e @NBZ por salvar bytes!
fonte
(+/×/⍉)
não funciona(+/×⌿)
e isso é 1 byte menor.+/×⌿
f←+/×⌿
f picture
Bash + utilitários comuns, 17
Se você não está usando
grep
para processamento de imagem , está fazendo errado ;-).Isso usa o
rs
utilitário para fazer a transposição.rs
está incluído no OSX , mas precisará ser instalado na maioria dos Linux com algo parecidosudo apt-get install rs
.As colunas de entrada são TABseparadas e as linhas são separadas por nova linha:
Se desejar, você pode pré-processar as imagens de entrada de exemplo neste formato com imagemagick e (GNU) sed. Por exemplo:
fonte
Perl,
2122 bytesVersão fixa
Inclui +2 para
-lp
(-l
pode ser omitido e ainda seria uma solução válida, mas é feio sem a nova linha final)Dê sequências de 1 e 0 em 0 ou mais linhas em STDIN. Você pode adicionar espaços, vírgulas ou qualquer outro elemento entre os dígitos, se desejar, desde que o uso seja consistente em todas as linhas.
Isso funciona como mostrado, mas substitua
\xce
pelo valor literal do byte para obter a pontuação reivindicadaSe houver várias seções verticais, isso retornará a soma de todas as larguras de seção. Se você deseja a largura de uma seção vertical, use
Versão antiga
Originalmente, não entendi o desafio e implementei um programa que fornece verdadeiro ou falso com base em se uma linha vertical existe. Código e explicação aqui são para esta versão antiga
Se ao menos eu pudesse adicionar 1 = ~ à esquerda para simetria quase perfeita ... Suponho que o mais próximo seria
Explicação
fonte
Python 2, 30 bytes
Existe uma solução surpreendentemente elegante usando muitas das minhas funções internas favoritas encadeadas.
Usando a imagem de teste de @Lynn:
fonte
Pitão, 5
Experimente aqui
Isso usa o algoritmo de Lynn, mas eu decidi publicá-lo apenas para mostrar como jogar operações de vetores em Pyth. O truque aqui é encadear os auxiliares da sintaxe "açúcar"
V
e,F
assim, a dobra é aplicada como uma operação vetorial. O operador dobrado é, obviamente, a multiplicação e, em seguida, o resultado é somado para obter a resposta final.fonte
JavaScript (ES6),
544543 bytesBaseado na resposta de @ Lynn's Jelly, embora desde que jogou golfe usando
every
ou emsome
vez dereduce
. A primeira versão codifica preto = 0 enquanto a segunda codifica preto = 1.Editar: salvou mais 2 bytes graças a @ edc65.
fonte
map
J ,
56 bytesPega a matriz booleana como argumento.
Esta é a minha primeira resposta J! (esteve errado por 1 ano e meio ...)
*/
produto em colunas+/
soma[:
cap (serve como marcador de posição, pois+/
não deve ser um argumento à esquerda)Experimente online!
fonte
CJam, 7 bytes
Experimente online!
fonte
Mathematica 24
Toma uma matriz no seguinte formato:
E, neste caso, gera:
fonte
Length[Total@#~Cases~0]&
mas mesmo contagem de bytes, 7 caracteres / 9 bytes
Try it here (Firefox only).
Esse é o grande algoritmo de @ Lynn, mas eu o encontrei de forma independente. (Eu pensei que havia um builtin para isso em algum lugar, ainda procurando: P)
Explicação
МƟï
transpõe a matriz de entrada,ⓜ⨴$
transforma cada vetor interno em seu produto e⨭
soma a matriz resultante.fonte
Japonês ,
64 bytesRecebe entrada como uma matriz de linhas,
1
sendo branca e0
preta.Teste-o
Explicação
fonte
y x_×
para 5. Na verdade,e
funciona bem como×
, de modo quey xe
para 4 :-)