Vous devez jouer à un programme qui prendra un nom de fichier en entrée et vous devez afficher la couleur du fichier.
Le fichier aura n'importe laquelle de ces extensions, mais votre programme ne doit en prendre en charge qu'une seule. Veuillez dire lequel dans votre réponse.
.jpg
.png
.svg
.gif
.bmp
Et maintenant à la disposition classique.
Contribution
Un nom de fichier avec l'une des extensions ci-dessus.
Vous pouvez également prendre un objet image ou une image déjà encodée à la place.
Production
La seule couleur dans ce fichier comme un code hexadécimal à 6 chiffres avec une option de premier plan , #
par exemple #000000
est noir.
Vous pouvez également produire une liste / tuple / chaîne contenant les valeurs décimales ou hexadécimales de la couleur RVB, avec un délimiteur clair et non numérique, par exemple,
,
|
etc.
Vous ne pouvez pas produire la transparence.
Si le fichier n'est pas d'une seule couleur, vous devez générer une valeur fausse qui ne l'est pas #000000
et terminer sans imprimer quoi que ce soit STDERR
. C'est ainsi que vous ne pouvez pas simplement ouvrir le fichier et obtenir la valeur RVB du premier pixel.
Règles
- Le code hexadécimal ne doit être généré que si le fichier est d'une seule couleur.
- Le fichier sera en
500x500
pixels - Les pixels auront tous une transparence de 0%.
- C'est le code-golf donc le code le plus court gagne!
Exemples
la source
bool
. Pour ce cas, je retournerais unstring
pour le cas normal etbool
pour le cas non normal, enveloppé dans unobject
. Est-ce bien ou puis-je retourner une chaîne vide ou similaire?Réponses:
MATL ,
1512 octetsTesté avec les images ".png" données dans le challenge. Cela fonctionne probablement aussi avec d'autres extensions. L'entrée peut être un nom de fichier ou une URL de l'image.
La sortie est des valeurs décimales R, G, B séparées par des espaces, ou la chaîne vide (qui est fausse) s'il y a plus d'une couleur.
Exemple avec les premier et dernier cas de test:
Explication
la source
You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ...M×N×3
tableau directement, ce qui n'est probablement pas ce que signifie l'OPBash + core-utils + Imagemagick, 60
Sort la couleur s'il y a une couleur et rien s'il y a plus d'une couleur.
convert $1 txt:
lit le fichier d'entrée et les sorties sous forme de fichier texte, spécifiquement dans ce format:sort -uk3
trie ceci de manière unique par la troisième colonne. Cette sortie est affectée à un tableaua
((${#a[@]}-9))
teste si le tableau n'a PAS de longueur 9si le tableau n'a PAS une longueur 9 (c'est-à-dire qu'il a une longueur 9), alors l'élément de sortie 2 (basé sur 0) qui sera la couleur unique.
la source
JavaScript (ES6) + HTML,
315289243218217215211210208 octetsVérifier que tous les pixels étaient identiques a ajouté beaucoup d'octets.Jusqu'à ce qu'il ne soit pas beaucoup plus grand que lorsque je vérifiais juste la couleur du premier pixel - heureux avec ça :)Prend l'URL (absolue, relative, les données ou tout ce qui peut être utilisé comme
src
unimg
) du fichier image comme entrée. Produit la couleur RVB sous forme de chaîne séparée par des virgules ou0
pour falsey. Testé avec des fichiers PNG mais devrait également fonctionner avec JPG et GIF.Essayez-le
Nécessite l'ajout d'une fermeture
>
sur l'canvas
élément afin de travailler dans un extrait de code. Étant donné que l'extraction d'images à partir de sources externes entraînerait une erreur, les éléments suivants prendront à la place les URL de données Base-64 en entrée. Décommentez la dernière ligne pour tester différentes couleurs en utilisant une image composée des 4 couleurs de test.la source
A filename with one of the above extensions.
-> Vous êtes sûr de pouvoir prendre l'image comme une chaîne encodée au lieu de la charger depuis un fichier?You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ..."data:image/png;base64,"+
mon code en prenant plutôt la saisie comme URL.Python 2, 80 octets
PIL.Image a une fonction getcolors qui renvoie
None
si le nombre de couleurs est supérieur au paramètre et renvoie un histogramme des couleurs dans une[(pixels, (r,g,b,a)), ...]
structure.la source
You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ...print i and i[0][1][:3]
?Mathematica,
5551 octets-4 grâce à CalculatorFeline
+0 pour le refactoring en fonction complète.
Utilisation de l'objet image Mathematica comme entrée -
Import["filename.png"]
.Renvoie 0 sinon toutes une couleur. Génère la valeur décimale de la couleur si elle est unique.
Explication:
la source
a==1
==a<2
etJoin@@
est équivalent à~Flatten~1
dans ce cas. (Rejoignez les pauses si la liste contient des non-listes.)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Mettra à jour.Join@@
.Java 8+,
331165119 octets-un grand nombre d'octets grâce à @LethalCoder pour m'avoir mis à jour sur un changement de règle qui a permis beaucoup de golf
-46 octets grâce à @KevinCruijssen et une faute de frappe corrigée
la source
You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ...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);}
. En changeant la version Java en 8+, vous pouvez également passerObject f(java.awt.image.BufferedImage i)
ài->
. De plus, je pense que vous avez fait une faute de frappe: ne devrait pasif(i.getRGB(k,l)!=i)
être à la!=j
place?Python 2 ,
12385 octetsla source
You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ...PIL
est une exception aux importations, vous ne pouvez pas le fairefrom PIL import*
non plusPIL.
C #,
163128125 octetsEnregistré 3 octets grâce à @Kevin Cruijssen.
Si nous n'avions pas à effectuer le contrôle supplémentaire pour que l'image soit de la même couleur, cela ne représente que 55 octets:
la source
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 octets)Mathematica, 112 octets
image
la source
You may also take an image object or already encoded image instead.
OP mis à jour pourrait être en mesure d'économiser des octets ...Most@PixelValue[i, {1, 1}, "Byte"]
sauvera quelques octets.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- utilisez votre fonction ImageData. Je ne savais pas que ça existait.Bash + ImageMagick, 100 octets
Testé avec .png, devrait également fonctionner avec les autres formats. La sortie pour une image polychromatique est simplement une chaîne vide.
la source
((`identify -format %k $1`-1))||
plus court quei=$(expr `identify -format "%k" $1` = 1)&&
.C,
224205 octetsPrend un bitmap 500x500 comme argument de ligne de commande. Imprime le RVB du fichier, par exemple
255,255,255
, ou0
si le fichier n'est pas constant. Se bloque probablement mal si aucun fichier n'est fourni.Points intéressants à noter:
void*
à la place deFILE*
pour éviter d'inclure<stdio.h>
for
boucle simple aveci%3
pour déterminer si tous les octets sont identiquesla source
JavaScript + HTML, 143 + 23 = 166 octets
Essayez-le:
Moins golfé:
la source
PowerShell, 79 octets
Script de test moins golfé:
499..0*500
signifie: répéter 500 fois une plage de 499 à 0$b|% G*l $_ $y
est un raccourci pour$b.GetPixel($_,$y)
. Cette astuce est utile avec gofing, mais elle ralentit le code.Sortie avec
$b|% G*l $_ $y
:Sortie avec
$b.GetPixel($_,$y)
:Explication:
gu
(alias pour Get-Unique ) au tableau de couleurs.hu
est un seul élément (la propriétérank
n'a de valeur que pour un tableau), alors affichez la valeur décimale R, G, B de cet élémentla source
Python 2 + OpenCV + NumPy: 66 caractères
colours.py
test.py
Résultat:
OpenCV est capable de lire une image et de la renvoyer sous forme de tableau à N dimensions. NumPy est utilisé pour tester le premier pixel contre les autres et imprimer les valeurs RVB ou vide.
la source
PHP, 88 octets
La fonction anonyme prend une ressource d'image PHP indexée comme paramètre, suppose la couleur dans le premier emplacement de palette, retourne le code de couleur ou 0.
programme, 96 octets
prend le nom du fichier GIF de l'argument, imprime le code couleur ou rien. Courez avec
php -r '<code>' <filename.gif>
.pour des images en vraies couleurs,
113112 octetscomme ci-dessus, mais nécessite une image en vraies couleurs.
programme,
122116 octetscomme ci-dessus, mais nécessite un fichier PNG.
la source