Você deve jogar um programa que terá como entrada um nome de arquivo e deverá exibir a cor do arquivo.
O arquivo terá qualquer uma dessas extensões, mas seu programa precisa apenas suportar uma. Diga qual deles em sua resposta.
.jpg
.png
.svg
.gif
.bmp
E agora para o layout clássico.
Entrada
Um nome de arquivo com uma das extensões acima.
Você também pode pegar um objeto de imagem ou uma imagem já codificada.
Resultado
A única cor no arquivo como um código hexadecimal de 6 dígitos com um opcional líder #
por exemplo, #000000
é preto.
Você também pode enviar uma lista / tupla / string contendo os valores decimais ou hexadecimais da cor RGB, com um delimitador claro e não numérico, por exemplo,
,
|
etc.
Você pode não exibir a transparência.
Se o arquivo não tiver apenas uma cor, você deverá gerar um valor falso #000000
e não terminar, sem imprimir nada STDERR
. Isso é para que você não possa simplesmente abrir o arquivo e obter o valor RGB do primeiro pixel.
Regras
- O código hexadecimal precisa ser gerado apenas se o arquivo tiver uma cor.
- O arquivo será
500x500
pixels - Todos os pixels terão 0% de transparência.
- Isso é código-golfe, então o código mais curto vence!
Exemplos
fonte
bool
. Nesse caso, eu retornaria umstring
para o caso normal ebool
para o caso não normal, envolto em umobject
. Isso está bom ou posso retornar uma string vazia ou similar?Respostas:
MATL ,
1512 bytesTestado com as imagens ".png" apresentadas no desafio. Provavelmente também funciona com outras extensões. A entrada pode ser um nome de arquivo ou um URL da imagem.
A saída é valores decimais R, G, B separados por espaços ou a sequência vazia (que é falsa) se houver mais de uma cor.
Exemplo com o primeiro e o último casos de teste:
Explicação
fonte
You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ...M×N×3
variedade diretamente, o que provavelmente não é o que os meios OPBash + core-utils + Imagemagick, 60
Produz a cor se houver uma cor e nada se houver mais de uma cor.
convert $1 txt:
lê o arquivo de entrada e sai como um arquivo de texto, especificamente neste formato:sort -uk3
classifica isso exclusivamente pela terceira coluna. Esta saída é atribuída a uma matriza
((${#a[@]}-9))
testa se a matriz NÃO possui comprimento 9se a matriz NÃO tiver comprimento 9 (ou seja, comprimento 9), em seguida, o elemento de saída 2 (baseado em 0) será a cor exclusiva.
fonte
JavaScript (ES6) + HTML,
315289243218217215211210208 bytesA verificação de que todos os pixels eram idênticos adicionou muitos bytes.Por não ser muito maior do que quando eu estava apenas verificando a cor do primeiro pixel - feliz com isso :)Toma como URL a entrada (absoluta, relativa, dados ou qualquer coisa que possa ser usada como a
src
deimg
) do arquivo de imagem. Emite a cor RGB como uma sequência separada por vírgula ou0
para falsey. Testado com arquivos PNG, mas também deve funcionar com JPG e GIF.Tente
Requer a adição de um fechamento
>
nocanvas
elemento para trabalhar em um Snippet. Como extrair imagens de fontes externas causaria um erro, o seguinte levaria os URLs de dados da Base-64 como entrada. Remova o comentário da última linha para testar cores diferentes usando uma imagem composta pelas 4 cores de teste.fonte
A filename with one of the above extensions.
-> Tem certeza de que pode levar a imagem como uma string codificada em vez de carregar de um arquivo?You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ..."data:image/png;base64,"+
meu código usando a entrada como uma URL.Python 2, 80 bytes
PIL.Image possui uma função getcolors que retorna
None
se o número de cores for maior que o parâmetro e retorna um histograma das cores em uma[(pixels, (r,g,b,a)), ...]
estrutura.fonte
You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ...print i and i[0][1][:3]
?Mathematica,
5551 bytes-4 graças a CalculatorFeline
+0 para refatorar para a função completa.
Usando o objeto de imagem do Mathematica como entrada -
Import["filename.png"]
.Retorna 0 se não todas com uma cor. Emite o valor decimal da cor, se for apenas um.
Explicação:
fonte
a==1
==a<2
eJoin@@
é equivalente a~Flatten~1
neste caso. (Join breaks se a lista contiver alguma não-lista.)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Atualizará.Join@@
.Java 8+,
331165119 bytes-muitos bytes graças a @LethalCoder por me atualizar em uma alteração de regra que permitia muito golfe
-46 bytes graças a @KevinCruijssen e erro de digitação fixo
fonte
You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ...Object f(java.awt.image.BufferedImage i){Integer j=i.getRGB(0,0),k=500,l;for(;k-->0;)for(l=500;l-->0;)if(i.getRGB(k,l)!=i)return"";return j.toHexString(j);}
. Alterando a versão do Java para 8+, você também pode alterarObject f(java.awt.image.BufferedImage i)
parai->
. Além disso, acho que você cometeu um erro de digitação: não deveriaif(i.getRGB(k,l)!=i)
ser!=j
?Python 2 ,
12385 bytesfonte
You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ...PIL
é uma exceção às importações, você não pode fazerfrom PIL import*
nem #PIL.
C #,
163128125 bytesGuardado 3 bytes graças a @Kevin Cruijssen.
Se não precisássemos fazer uma verificação adicional para a imagem ter as mesmas cores, são apenas 55 bytes:
fonte
b=>{var c=b.GetPixel(0,0);for(int w=500,h;w-->0;)for(h=500;h-->0;)if(b.GetPixel(w,h)!=c)return"";return c.R+" "+c.G+" "+c.B;}
(-3 bytes)Mathematica, 112 bytes
imagem
fonte
You may also take an image object or already encoded image instead.
OP atualizado pode ser capaz de salvar bytes ...Most@PixelValue[i, {1, 1}, "Byte"]
irá salvar alguns bytes.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- use sua função ImageData. Não sabia que existia.Bash + ImageMagick, 100 bytes
Testado com .png, também deve funcionar com os outros formatos. A saída para uma imagem policromática é simplesmente uma sequência vazia.
fonte
((`identify -format %k $1`-1))||
é mais curto quei=$(expr `identify -format "%k" $1` = 1)&&
.C,
224205 bytesToma um bitmap de 500 x 500 como um argumento de linha de comando. Imprime o RGB do arquivo, por exemplo
255,255,255
, ou0
se o arquivo não for constante. Provavelmente trava mal se nenhum arquivo for fornecido.Pontos interessantes a serem observados:
void*
no lugar deFILE*
para evitar incluir<stdio.h>
for
loop simplesi%3
para determinar se todos os bytes são iguaisfonte
JavaScript + HTML, 143 + 23 = 166 bytes
Tente:
Menos golfe:
fonte
PowerShell, 79 bytes
Script de teste com menos golfe:
499..0*500
significa: repita 500 vezes um intervalo de 499 a 0$b|% G*l $_ $y
é um atalho para$b.GetPixel($_,$y)
. Esse truque é útil com o gofing, mas reduz a velocidade do código.Saída com
$b|% G*l $_ $y
:Saída com
$b.GetPixel($_,$y)
:Explicação:
gu
(alias para Get-Unique ) à matriz de cores.hu
for um único elemento (a propriedaderank
possui valor apenas para uma matriz), emita o valor decimal de R, G, B deste elementofonte
Python 2 + OpenCV + NumPy: 66 caracteres
colors.py
test.py
Resultado:
O OpenCV é capaz de ler uma imagem e devolvê-la como uma matriz N-dimensional. O NumPy é usado para testar o primeiro pixel em relação aos outros e imprimir os valores RGB ou em branco.
fonte
PHP, 88 bytes
A função anônima usa como parâmetro um recurso de imagem PHP indexado, assume cores no primeiro slot da paleta, retorna código de cores ou 0.
programa, 96 bytes
retira o nome do arquivo GIF do argumento, imprime código de cores ou nada. Corra com
php -r '<code>' <filename.gif>
.para imagens em cores verdadeiras,
113112 bytescomo acima, mas requer uma imagem em cores reais.
programa,
122116 bytescomo acima, mas requer arquivo PNG.
fonte