Sie müssen ein Programm spielen, das einen Dateinamen als Eingabe verwendet, und Sie müssen ausgeben, welche Farbe die Datei hat.
Die Datei hat eine dieser Erweiterungen, aber Ihr Programm muss nur eine unterstützen. Bitte sagen Sie, welche in Ihrer Antwort.
.jpg
.png
.svg
.gif
.bmp
Und nun zum klassischen Layout.
Eingang
Ein Dateiname mit einer der oben genannten Erweiterungen.
Sie können stattdessen auch ein Bildobjekt oder ein bereits codiertes Bild aufnehmen.
Ausgabe
Die einzige Farbe in dieser Datei ist ein 6-stelliger Hex-Code mit einem optionalen führenden #
z#000000
ist Schwarz.
Sie können auch eine Liste / ein Tupel / eine Zeichenfolge ausgeben, die / die die Dezimal- oder Hexadezimalwerte der RGB-Farbe enthält, mit einem klaren, nicht numerischen Trennzeichen, z
,
|
etc
Möglicherweise geben Sie die Transparenz nicht aus.
Wenn die Datei nicht nur eine Farbe hat, müssen Sie einen falschen Wert ausgeben, der nicht vorhanden ist, #000000
und beenden, ohne etwas zu drucken STDERR
. Auf diese Weise können Sie die Datei nicht einfach öffnen und den RGB-Wert des ersten Pixels abrufen.
Regeln
- Der Hex-Code muss nur ausgegeben werden, wenn die Datei nur eine Farbe hat.
- Die Datei besteht aus
500x500
Pixeln - Die Pixel haben alle eine Transparenz von 0%.
- Dies ist Code-Golf, also gewinnt der kürzeste Code!
Beispiele
quelle
bool
. Für diesen Fall würde ich einstring
für den Normalfall undbool
für den nicht normalen Fall zurückgeben, eingewickelt in einobject
. Ist das in Ordnung oder kann ich eine leere Zeichenfolge oder ähnliches zurückgeben?Antworten:
MATL ,
1512 BytesGetestet mit den in der Challenge angegebenen ".png" -Bildern. Es funktioniert wahrscheinlich auch mit anderen Erweiterungen. Die Eingabe kann ein Dateiname oder eine URL des Bildes sein.
Die Ausgabe erfolgt durch durch Leerzeichen getrennte Dezimalwerte R, G, B oder die leere Zeichenfolge (die falsch ist), wenn mehr als eine Farbe vorhanden ist.
Beispiel mit ersten und letzten Testfällen:
Erläuterung
quelle
You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ...M×N×3
Array direkt eingeben, was wahrscheinlich nicht das ist, was das OP bedeutetBash + Core-Utils + Imagemagick, 60
Gibt die Farbe aus, wenn eine Farbe vorhanden ist, und nichts, wenn mehr als eine Farbe vorhanden ist.
convert $1 txt:
liest die Eingabedatei und gibt sie als Textdatei aus, speziell in diesem Format:sort -uk3
sortiert dies eindeutig nach der dritten Spalte. Diese Ausgabe ist einem Array zugeordneta
((${#a[@]}-9))
testet, ob das Array NICHT die Länge 9 hatWenn das Array NICHT NICHT die Länge 9 hat (dh die Länge 9 hat), wird das Element 2 (0-basiert) ausgegeben, das die eindeutige Farbe hat.
quelle
JavaScript (ES6) + HTML,
315289243218217215211210208 ByteWenn Sie überprüfen, ob alle Pixel identisch sind, werden viele Bytes hinzugefügt .Es ist nicht viel größer als damals, als ich nur die Farbe des ersten Pixels überprüft habe - glücklich damit :)Nimmt die URL (absolute, relative, Daten oder etwas , das als das verwendet werden kann ,
src
einesimg
) der Bilddatei als Eingabe. Gibt die RGB-Farbe als durch Kommas getrennte Zeichenfolge oder0
für Falsey aus. Getestet mit PNG-Dateien, sollte aber auch mit JPG & GIF funktionieren.Versuch es
Erfordert das Hinzufügen eines Abschlusses
>
für dascanvas
Element, um in einem Snippet arbeiten zu können. Da das Abrufen von Bildern aus externen Quellen zu einem Fehler führen würde, werden im Folgenden stattdessen Base-64-Daten-URLs als Eingabe verwendet. Kommentieren Sie die letzte Zeile aus, um auf verschiedene Farben zu testen, indem Sie ein Bild verwenden, das aus den 4 Testfarben besteht.quelle
A filename with one of the above extensions.
-> Sind Sie sicher, dass Sie das Bild als codierte Zeichenfolge verwenden können, anstatt es aus einer Datei zu laden?You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ..."data:image/png;base64,"+
meinen Code heraushacken, indem ich stattdessen Eingaben als URL nahm.Python 2, 80 Bytes
PIL.Image verfügt über eine getcolors-Funktion, die zurückgibt,
None
wenn die Anzahl der Farben größer als der Parameter ist, und ein Histogramm der Farben in einer[(pixels, (r,g,b,a)), ...]
Struktur zurückgibt .quelle
You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ...print i and i[0][1][:3]
?Mathematica,
5551 Bytes-4 dank CalculatorFeline
+0 für das Refactoring in die volle Funktion.
Verwenden des Mathematica-Bildobjekts als Eingabe -
Import["filename.png"]
.Gibt 0 zurück, wenn nicht alle eine Farbe. Gibt den Dezimalwert der Farbe aus, wenn nur einer.
Erläuterung:
quelle
a==1
==a<2
undJoin@@
entspricht~Flatten~1
in diesem Fall. (Join-Pausen, wenn die Liste Nichtlisten enthält.)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Werde Dich auf dem Laufenden halten.Join@@
.Java 8+,
331165119 Bytes-Viele Bytes danke an @LethalCoder für die Aktualisierung einer Regeländerung, die viel Golfen ermöglichte
-46 Bytes dank @KevinCruijssen und behobenem Tippfehler
quelle
You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ...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);}
. Durch Ändern der Java - Version 8+, können Sie auch ändernObject f(java.awt.image.BufferedImage i)
zui->
. Außerdem glaube ich , Sie einen Tippfehler gemacht haben: sollte nichtif(i.getRGB(k,l)!=i)
sein ,!=j
statt?Python 2 ,
12385 Bytesquelle
You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ...PIL
ist eine Ausnahme für die Einfuhr, können Sie nicht tun ,from PIL import*
nochPIL.
C #,
163128125 Bytes3 Bytes dank @Kevin Cruijssen gespeichert.
Wenn wir nicht zusätzlich prüfen müssten, ob das Bild die gleichen Farben hat, sind dies nur 55 Bytes:
quelle
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
Bild
quelle
You may also take an image object or already encoded image instead.
OP aktualisiert kann möglicherweise Bytes speichern ...Most@PixelValue[i, {1, 1}, "Byte"]
spart einige Bytes.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- Verwenden Sie Ihre ImageData-Funktion. Wusste nicht, dass es das gibt.Bash + ImageMagick, 100 Bytes
Getestet mit .png, sollte auch mit den anderen Formaten funktionieren. Die Ausgabe für ein polychromatisches Bild ist einfach eine leere Zeichenfolge.
quelle
((`identify -format %k $1`-1))||
kürzer alsi=$(expr `identify -format "%k" $1` = 1)&&
.C
224205 BytesNimmt eine 500x500-Bitmap als Befehlszeilenargument. Druckt das RGB der Datei, z. B.
255,255,255
oder0
wenn die Datei nicht konstant ist. Stürzt wahrscheinlich schwer ab, wenn keine Datei bereitgestellt wird.Interessante Punkte zu beachten:
void*
anstelle vonFILE*
zu vermeiden, einschließlich<stdio.h>
for
Schleife mit,i%3
um festzustellen, ob alle Bytes gleich sindquelle
JavaScript + HTML, 143 + 23 = 166 Bytes
Versuch es:
Weniger Golf:
quelle
PowerShell, 79 Byte
Weniger Golf-Testskript:
499..0*500
bedeutet: 500-mal in einem Bereich von 499 bis 0 wiederholen$b|% G*l $_ $y
ist Abkürzung für$b.GetPixel($_,$y)
. Dieser Trick ist nützlich beim Gofing, verlangsamt aber den Code.Ausgabe mit
$b|% G*l $_ $y
:Ausgabe mit
$b.GetPixel($_,$y)
:Erläuterung:
gu
(Alias für Get-Unique ) auf das Farbarray angewendet.hu
ein einzelnes Element ist (Eigenschaftrank
hat nur Wert für ein Array), wird der Dezimalwert von R, G, B dieses Elements ausgegebenquelle
Python 2 + OpenCV + NumPy: 66 Zeichen
Farben.py
test.py
Ergebnis:
OpenCV kann ein Bild lesen und als N-dimensionales Array zurückgeben. Mit NumPy wird das erste Pixel gegen die anderen getestet und entweder die RGB-Werte ausgedruckt oder leer.
quelle
PHP, 88 Bytes
Die anonyme Funktion verwendet eine indizierte PHP-Bildressource als Parameter, nimmt Farbe im ersten Palettensteckplatz an, gibt den Farbcode oder 0 zurück.
Programm, 96 Bytes
Nimmt den GIF-Dateinamen aus dem Argument, druckt den Farbcode oder nichts. Laufen Sie mit
php -r '<code>' <filename.gif>
.für Echtfarbenbilder
113112 Byteswie oben, erfordert jedoch ein Echtfarbenbild.
Programm,
122116 Byteswie oben, erfordert jedoch eine PNG-Datei.
quelle