Debes jugar un programa de golf que tomará un nombre de archivo como entrada y debes mostrar de qué color es el archivo.
El archivo tendrá cualquiera de estas extensiones, pero su programa solo necesita admitir una. Por favor diga cuál en su respuesta.
.jpg
.png
.svg
.gif
.bmp
Y ahora al diseño clásico.
Entrada
Un nombre de archivo con una de las extensiones anteriores.
También puede tomar un objeto de imagen o una imagen ya codificada en su lugar.
Salida
El único color en ese archivo como código hexadecimal de 6 dígitos con un encabezado opcional,#
por ejemplo, #000000
es negro.
También puede generar una lista / tupla / cadena que contenga los valores decimales o hexadecimales del color RGB, con un delimitador claro, no numérico, por ejemplo,
,
|
etc.
No puede generar la transparencia.
Si el archivo no es de un solo color, debe generar un valor falso que no lo sea #000000
y finalizar sin imprimir nada STDERR
. Esto es para que no pueda simplemente abrir el archivo y obtener el valor RGB del primer píxel.
Reglas
- El código hexadecimal solo se debe generar si el archivo es de un solo color.
- El archivo será
500x500
píxeles - Todos los píxeles tendrán 0% de transparencia.
- Este es el código de golf, ¡el código más corto gana!
Ejemplos
fuente
bool
. Para este caso, devolvería unstring
para el caso normal ybool
para el caso no normal, envuelto en unobject
. ¿Está bien o puedo devolver una cadena vacía o similar?Respuestas:
MATL ,
1512 bytesProbado con las imágenes ".png" dadas en el desafío. Probablemente también funcione con otras extensiones. La entrada puede ser un nombre de archivo o una URL de la imagen.
La salida es valores decimales R, G, B separados por espacios, o la cadena vacía (que es falsa) si hay más de un color.
Ejemplo con el primer y último caso de prueba:
Explicación
fuente
You may also take an image object or already encoded image instead.
El OP actualizado podría guardar bytes ...M×N×3
matriz directamente, lo que probablemente no sea lo que significa el OPBash + core-utils + Imagemagick, 60
Emite el color si hay un color y nada si hay más de un color.
convert $1 txt:
lee el archivo de entrada y las salidas como un archivo de texto, específicamente en este formato:sort -uk3
clasifica esto de manera única por la tercera columna. Esta salida se asigna a una matriz.a
((${#a[@]}-9))
prueba si la matriz NO tiene longitud 9si la matriz NO tiene una longitud 9 (es decir, tiene una longitud 9), entonces el elemento de salida 2 (basado en 0) será el color único.
fuente
JavaScript (ES6) + HTML,
315289243218217215211210208 bytesAl comprobar que todos los píxeles eran idénticos, se agregaron muchos bytes.A fin de cuentas, no es mucho más grande que cuando solo estaba revisando el color del primer píxel, feliz con eso :)Toma la URL (absoluta, relativa, datos o cualquier cosa que pueda usarse como la
src
de unimg
) del archivo de imagen como entrada. Emite el color RGB como una cadena separada por comas o0
para falsey. Probado con archivos PNG, pero también debería funcionar con JPG y GIF.Intentalo
Requiere la adición de un cierre
>
en elcanvas
elemento para poder trabajar en un Fragmento. Como extraer imágenes de fuentes externas provocaría un error, lo siguiente tomará URL de datos Base-64 como entrada. Elimine el comentario de la última línea para probar diferentes colores usando una imagen que consta de los 4 colores de prueba.fuente
A filename with one of the above extensions.
-> ¿Seguro que puede tomar la imagen como una cadena codificada en lugar de cargarla desde un archivo?You may also take an image object or already encoded image instead.
El OP actualizado podría guardar bytes ..."data:image/png;base64,"+
mi código tomando la entrada como una URL.Python 2, 80 bytes
PIL.Image tiene una función getcolors que devuelve
None
si el número de colores es mayor que el parámetro y devuelve un histograma de los colores en una[(pixels, (r,g,b,a)), ...]
estructura.fuente
You may also take an image object or already encoded image instead.
El OP actualizado podría guardar bytes ...print i and i[0][1][:3]
?Mathematica,
5551 Bytes-4 gracias a CalculatorFeline
+0 para refactorizar en función completa.
Usando el objeto de imagen de Mathematica como entrada -
Import["filename.png"]
.Devuelve 0 si no todos un color. Emite el valor decimal del color si es solo uno.
Explicación:
fuente
a==1
==a<2
yJoin@@
es equivalente a~Flatten~1
en este caso. (Únase a los descansos si la lista contiene no listas)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Actualizará.Join@@
.Java 8+,
331165119 bytes-muchos bytes gracias a @LethalCoder por actualizarme en un cambio de regla que permitió mucho golf
-46 bytes gracias a @KevinCruijssen y error tipográfico fijo
fuente
You may also take an image object or already encoded image instead.
El OP actualizado podría guardar 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);}
. Al cambiar la versión de Java a 8+, también puede cambiarObject f(java.awt.image.BufferedImage i)
ai->
. Además, creo que has cometido un error tipográfico: ¿no deberíaif(i.getRGB(k,l)!=i)
serlo!=j
?Python 2 ,
12385 bytesfuente
You may also take an image object or already encoded image instead.
El OP actualizado podría guardar bytes ...PIL
es una excepción a las importaciones, no se puede hacerfrom PIL import*
niPIL.
C #,
163128125 bytesGuardado 3 bytes gracias a @Kevin Cruijssen.
Si no tuviéramos que tener la verificación adicional para que la imagen tenga los mismos colores, esto es solo 55 bytes:
fuente
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
imagen
fuente
You may also take an image object or already encoded image instead.
El OP actualizado podría guardar bytes ...Most@PixelValue[i, {1, 1}, "Byte"]
ahorrará algunos bytes.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- usa tu función ImageData. No sabía que existía.Bash + ImageMagick, 100 bytes
Probado con .png, también debería funcionar con los otros formatos. La salida para una imagen policromática es simplemente una cadena vacía.
fuente
((`identify -format %k $1`-1))||
es más corto quei=$(expr `identify -format "%k" $1` = 1)&&
.C,
224205bytesToma un mapa de bits de 500x500 como argumento de línea de comandos. Imprime el RGB del archivo, por ejemplo
255,255,255
, o0
si el archivo no es constante. Probablemente se bloquea mal si no se proporciona ningún archivo.Puntos interesantes a tener en cuenta:
void*
en lugar deFILE*
evitar incluir<stdio.h>
for
bucle simplei%3
para determinar si todos los bytes son igualesfuente
JavaScript + HTML, 143 + 23 = 166 bytes
Intentalo:
Menos golfizado:
fuente
PowerShell, 79 bytes
Menos guión de prueba de golf:
499..0*500
significa: repetir 500 veces un rango desde 499 hasta 0$b|% G*l $_ $y
es un acceso directo para$b.GetPixel($_,$y)
. Este truco es útil con gofing, pero ralentiza el código.Salida con
$b|% G*l $_ $y
:Salida con
$b.GetPixel($_,$y)
:Explicación:
gu
(alias para Get-Unique ) a la matriz de color.hu
es un elemento único (la propiedadrank
tiene valor solo para una matriz), entonces genera un valor decimal de R, G, B de este elementofuente
Python 2 + OpenCV + NumPy: 66 caracteres
colores.py
prueba.py
Resultado:
OpenCV puede leer una imagen y devolverla como una matriz N-dimensional. NumPy se usa para probar el primer píxel contra los demás e imprimir los valores RGB o en blanco.
fuente
PHP, 88 bytes
La función anónima toma un recurso de imagen PHP indexada como parámetro, asume el color en la primera ranura de la paleta, devuelve el código de color o 0.
programa, 96 bytes
toma el nombre del archivo GIF del argumento, imprime el código de color o nada. Corre con
php -r '<code>' <filename.gif>
.para imágenes en color verdadero,
113112 bytescomo arriba, pero requiere una imagen en color verdadero.
programa,
122116 bytescomo arriba, pero requiere un archivo PNG.
fuente