True Color (24-Bit) bei Wikipedia wird im zugehörigen Teil als beschrieben
24 Bit verwendet fast immer 8 Bit von R, G und B. Ab 2018 wird die 24-Bit-Farbtiefe von praktisch jedem Computer- und Telefondisplay sowie von den meisten Bildspeicherformaten verwendet. In fast allen Fällen, in denen 32 Bit pro Pixel vorhanden sind, werden 24 für die Farbe verwendet und die restlichen 8 sind der Alphakanal oder nicht verwendet.
2 24 ergibt 16.777.216 Farbabweichungen. Das menschliche Auge kann bis zu zehn Millionen Farben unterscheiden [10], und da der Umfang eines Displays kleiner ist als der Bereich des menschlichen Sehens, sollte dies bedeuten, dass dieser Bereich mit mehr Details abgedeckt wird, als wahrgenommen werden kann. ...
...
Macintosh-Systeme bezeichnen 24-Bit-Farben als "Millionen von Farben". Der Begriff "True Color" wird manchmal verwendet, um die Bezeichnung "Direct Color" in diesem Artikel zu bezeichnen. [13] Es wird auch häufig verwendet, um auf alle Farbtiefen größer oder gleich 24 zu verweisen.
Alle 16.777.216 Farben
Aufgabe
Schreiben Sie ein Programm, das alle 16.777.216 Farbvariationen innerhalb eines Arrays als Zeichenfolgen in der CSS- rgb()
Funktion generiert und zurückgibt
5.1. Die RGB-Funktionen:
rgb()
undrgba()
Die
rgb()
Funktion definiert eine RGB-Farbe durch direkte Angabe der Kanäle Rot, Grün und Blau. Ihre Syntax lautet:rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) <alpha-value> = <number> | <percentage>
Die ersten drei Argumente geben die Rot-, Grün- und Blaukanäle der Farbe an.
0%
stellt den Minimalwert für diesen Farbkanal in der sRGB-Farbskala dar und100%
stellt den Maximalwert dar. A<number>
ist äquivalent zu a<percentage>
, aber mit einem anderen Bereich:0
stellt wieder den Minimalwert für den Farbkanal dar, aber255
stellt das Maximum dar. Diese Werte ergeben sich aus der Tatsache, dass viele Grafikmodule die Farbkanäle intern als ein einzelnes Byte speichern, das Ganzzahlen zwischen 0 und 255 enthalten kann. Bei Implementierungen sollte die Präzision des Kanals berücksichtigt werden, die nach Möglichkeit erstellt oder berechnet wurde. Ist dies nicht möglich, sollte der Kanal mit der höchsten verwendeten Genauigkeit auf den nächsten Wert gerundet werden. Wenn zwei Werte gleich nahe beieinander liegen, wird aufgerundet.Das letzte Argument, das
<alpha-value>
, gibt das Alpha der Farbe an. Bei Angabe von a reicht<number>
der nützliche Wertebereich von0
(für eine vollständig transparente Farbe) bis1
(für eine vollständig undurchsichtige Farbe). Wenn als a angegeben,0%
stellt dies eine vollständig transparente Farbe dar, während dies100%
eine vollständig opake Farbe darstellt. Wenn nicht angegeben, ist der Standardwert100%
.Werte außerhalb dieser Bereiche sind nicht ungültig, sondern werden zum Zeitpunkt des Berechnens auf die hier definierten Bereiche beschränkt.
rgb()
Unterstützt aus älteren Gründen auch eine alternative Syntax, bei der alle Argumente durch Kommas getrennt werden:rgb() = rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )
Auch aus älteren Gründen gibt es eine
rgba()
Funktion mit identischer Grammatik und Verhaltensweisergb()
.
oder RGB Hexadezimalschreibweise #RRGGBB
Format
5.2. Die hexadezimalen RGB-Notationen:
#RRGGBB
Mit der hexadezimalen CSS- Farbnotation kann eine Farbe angegeben werden, indem die Kanäle als Hexadezimalzahlen angegeben werden, ähnlich wie Farben häufig direkt im Computercode geschrieben werden. Es ist auch kürzer als die gleiche Farbe in
rgb()
Notation zu schreiben .Die Syntax von a
<hex-color>
ist ein<hash-token>
Token, dessen Wert aus 3, 4, 6 oder 8 hexadezimalen Ziffern besteht. Mit anderen Worten, eine hexadezimale Farbe wird als Hash-Zeichen "#" geschrieben, gefolgt von einer Anzahl von Ziffern 0-9 oder Buchstaben af (der Fall der Buchstaben spielt keine Rolle -#00ff00
ist identisch mit#00FF00
).Die Anzahl der angegebenen Hexadezimalstellen bestimmt, wie die Hexadezimalnotation in eine RGB-Farbe decodiert wird:
6 Stellen
Das erste Ziffernpaar, das als Hexadezimalzahl interpretiert wird, gibt den roten Kanal der Farbe an, wobei
00
der minimale Wert undff
(255 in Dezimalzahl) der maximale Wert angegeben werden . Das nächste Ziffernpaar, das auf die gleiche Weise interpretiert wird, gibt den grünen Kanal an, und das letzte Ziffernpaar gibt den blauen Kanal an. Der Alpha-Kanal der Farbe ist vollständig undurchsichtig.BEISPIEL 2
Mit anderen Worten,#00ff00
stellt die gleiche Farbe dar wiergb(0 255 0)
(ein Limonengrün).
Siehe Redaktionsentwurf des CSS-Farbmoduls Level 4
Beispiele
CSS- rgb()
Funktion ( Leerzeichen können zB durch Komma ersetzt werden rgb(0 255 0)
)
// `rgb()` `<percentage>` as strings in resulting array
['rgb(0%,0%,0%)', ...,'rgb(0%,255%,0)', ...'rgb(255,255,255)']
// `rgb()` `<number>` as strings in resulting array
['rgb(0,0,0)', ...,'rgb(0,255,0)', ...'rgb(255,255,255)']
CSS RGB hexadezimale Notation RRGGBB
// RGB hexadecimal notation as strings in resulting array
['#000000', ...,'#00ff00', ...'#ffffff']
Gewinnkriterien
Wenigste zum Schreiben des Programms verwendete Bytes.
quelle
Antworten:
R , 25 Bytes
Probieren Sie es online!
quelle
a:b-c
einen Vektor vona-c
bisb-c
einschließlich (erstellt einen Vektor vona
bisb
und subtrahiert dannc
von jedem Eintrag).Python 2 ,
77403937 BytesProbieren Sie es online!
-1 Byte dank digitalem Trauma
-2 Bytes dank Dylnan
quelle
8**8
stattdessen1<<24
, ein Byte zu speichernprint['...
PowerShell ,
2826 BytesProbieren Sie es online!
Schleifen von
1
bis16mb
(16777216). Bei jeder Iteration verwenden wir den-f
ormat-Operator, der auf die aktuelle Zahl einwirkt, die vorab--$_
gegen die Zeichenfolge dekrementiert wurde"#{0:x6}"
. Hier geben wir diex
Werte an, die auf6
Ziffern aufgefüllt sind und vor denen ein Hash steht#
. Bei TIO ist die Ausgabe auf 60 Sekunden / 128 KB begrenzt. Ändern Sie die,1
um(16mb-5)
zu sehen, wie es endet .quelle
JavaScript (ES7),
656261 BytesGespeichert
34 Bytes dank @tshGibt ein Array von
#RRGGBB
Zeichenfolgen zurück.Probieren Sie es online! (abgeschnittene Ausgabe)
quelle
8**8
statt1<<24
. Es würde auch auf JS funktionieren.Common Lisp, 42 Bytes
Probieren Sie es online!
quelle
format
Kann der erste Golf sein, den ich gesehen habe. +1 nur auf dieser Basis.Japt, 14 Bytes
Ausgänge als
#rrggbb
.Probieren Sie es aus (Beschränkt auf die ersten 4096 Elemente)
Erläuterung
quelle
ù
. Ein weiterer typischer Anwendungsfall ist die Verwendung als Zähler, wenn Sie eine Variable inkrementieren müssen, während Sie beispielsweise ein Array zuordnen. Und da es sich natürlich um eine Variable handelt, können Sie ihr bei Bedarf auch einfach einen Wert zuweisen.0
ist die einzige einstellige Ganzzahl, die eine eigene Variable hat - technisch gesehen ist 7 dieU-Z
Standardeingabevariable für0
. Die anderen Integer - Variablen in Japt zugeordnet sind:-1, 10-16, 32, 64 & 100
.Haskell, 41 Bytes
Probieren Sie es online!
quelle
05AB1E ,
151410 BytesProbieren Sie es online aus.
Erläuterung:
quelle
Batch, 87 Bytes
Ausgaben im CSS-Format. Die Variablensubstitution findet statt, bevor die
for
Anweisung analysiert wird, sodass der tatsächliche Code wie folgt lautet:quelle
C # (Visual C # Interactive Compiler) , 47 Byte
Probieren Sie es online!
quelle
C # (.NET Core) , 75 Byte
Probieren Sie es online!
Port der JAVA 10-Version mit interpoliertem C # -Stringformat
quelle
K (oK) , 19 Bytes
Lösung:
Probieren Sie es online! (limitiert auf die ersten 500 Nummern)
Erläuterung:
Rgb-Strings rauswerfen. Konvertieren Sie jede Zahl zwischen 0 und 16777216 in Basis 256 und konvertieren Sie sie dann in Zeichenfolgen ...
quelle
MATL ,
1715 BytesProbieren Sie es online!
Die TIO-Version zeigt die ersten 2 ^ 10 nur an, um keine Zeitüberschreitung zu verursachen. Ich habe die letzte Iteration in die Fußzeile eingefügt, um zu zeigen, dass sie tatsächlich um endet
#FFFFFF
. Ein Byte wurde gespeichert, indem auf geändert wurde,fprintf
anstatt die Zeichenfolge manuell zusammenzusetzen. Gibt eine durch Kommas getrennte Liste aus.Erläuterung
quelle
APL (Dyalog Unicode) ,
474320 BytesProbieren Sie es online!
6⍴
4⍴
den Code im Code austauschen und sehen, dass er jeden Code mit bis zu 4 Ziffern ausgibt.Danke an @Dzaima und @ngn für die 23 Bytes.
Verwendet
⎕IO←0
.Wie:
quelle
Ruby , 31 Bytes
Probieren Sie es online!
quelle
%
dass eine Saite so lang und ein Array so lang ist. Zu Ihrer Information, Sie können ein Byte speichern, indem Sie einen wörtlichen Zeilenumbruch anstelle von verwenden\n
.V , 25 Bytes
Probieren Sie es online! (ersetzt
16777215
durch31
)Erläuterung
quelle
Charge, 69 + 4 = 73
g.cmd, 69
Speichert den Hexadezimalwert mit Formular
#RRGGBB
in ein 'Array'.g.cmd
soll mit angerufen werdencmd /V/Q/K g.cmd
. Dies ist, wo die + 4 herkommt,/V/Q
und zählt als 4 zusätzliche Zeichen im Vergleich zu nurcmd /K g.cmd
. Dadurch wird eine Umgebung eingerichtet, in der sich das Array im Speicher befindet. Die Ausführung dauert ebenfalls ewig. Verwenden Sie daher sehr niedrige Werte, um die Ausführung mit zu versuchen oder abzubrechenCtrl+C
Nervenzusammenbruch
Aufruf
/V
ermöglicht eine verzögerte Erweiterung, ist aber kürzer alssetlocal EnableDelayedExpansion
, weshalb wir dencmd
Anruf an erster Stelle benötigen/Q
Lässt die Ausgabe aus und entspricht@echo off
/K
lässt Sie einen Ausdruck ausführen (in diesem Fallg.cmd
) und wird danach nicht beendet, so dass Sie das 'Array' mit überprüfen könnenset #
g.cmd
Dieses Bit verwendet einen hier dokumentierten Trick , um eine normale Zahl in eine hexadezimale Zahl umzuwandeln, und speichert diesen Wert dann in einem 'Array'.
Ich habe diese Speicherstruktur als 'Array' bezeichnet, aber das stimmt nicht, da es in Batch keine echten Arrays gibt. ABER Sie können Variablen so benennen, dass sie arrayähnliche Namen haben:
oder, wie in diesem Fall:
Sie können weiterhin über darauf zugreifen
!#%position%!
quelle
/V/Q/K
kann man als "Argumente" für den Interpreter gelten und als "3 + 69 = 72" zählen. metaGroovy , 53 Bytes
Funktionsdefinition. c () gibt eine ArrayList zurück (ich nehme an, das ist in Ordnung, auch wenn die Frage nach einem Array fragt).
Ungolfed mit impliziten Typen:
Probieren Sie es online!
quelle
Java 10,
8784 Bytes-3 Bytes dank @ archangel.mjj .
Probieren Sie es online aus (beschränkt auf die ersten
4,096
Artikel).Erläuterung:
quelle
r[i]="".format("#%06X",i);
"".format("#%06X",i)
seit ich es in der Python-Antwort gesehen habe, aber ich habe die Antwort fallen lassen, weil ich es nicht schnell genug für TIO zum Laufen bringen konnte. Dann habe ich gesehen, dass alle nur die ersten4,096
Artikel auf TIO ausgegeben haben, also habe ich die Antwort noch einmal geschrieben und dabei vergessen, dass"#%06X"
...>. <var r
in Java tun können ..var
Java möglich ist und was nicht .PHP,
6862 BytesDies soll in einer Datei platziert werden, das Array wird am Ende zurückgegeben, um verwendbar zu sein.
Um Zugriff auf das Array zu erhalten, geben Sie einfach das Ergebnis des Includes an (zB:
$a = include 'xyz.php';
einer Variablen.Vielen Dank an @manatwork , dass du mir 6 Bytes gespart und einen Fehler behoben hast.
quelle
%1$06d
? Und ich sehe keinen Grund für die Verwendung1$
. Sie konnten die Länge , indem das Zeichen „#“ im Format - String reduzieren:#%06x
. Was sich als nützlich erweisen würde, wenn zusätzliche Zeichen hinzugefügt würden, um den Bereich zu korrigieren, da derzeit bis zu 16777216 = # 1000000 gezählt wird.%d
zu%x
. Und völlig vergessen, das#
Innere dessprintf()
Anrufs zu bewegen . Du hast mir 6 Bytes gerettet. Vielen DankMATL , 11 Bytes
Probieren Sie es online!(mit nur drei Hex-Ziffern statt sechs)
Erläuterung
quelle
Bash + Jot, 22
Probieren Sie es online!
quelle
Perl 5 , 31 Bytes
Probieren Sie es online!
quelle
Lua ,
4745 BytesProbieren Sie es online!
quelle
s
und ein Byte speichern.T-SQL,
122117 BytesGibt eine
#RRGGBB
Zeichenfolgentabelle mit 16.777.216 Zeilen zurück . Der Zeilenumbruch dient nur der Lesbarkeit:Verwendet einen rekursiven CTE für eine Zahlentabelle von 0 bis 2 ^ 24-1 und wandelt ihn dann mit dem integrierten
FORMAT
Befehl (verfügbar in SQL 2012 oder höher) in eine 6-stellige Hex-Zeichenfolge um . Befestigen Sie die#
an der Vorderseite, und wir sind fertig.Edit 1:
POWER()
Funktion entfernt, die Nummer war kürzer: Pquelle
Gelee , 12 Bytes
Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online! (Anmerkung: verwendet
2
eher als6
als6
TIO Timeout)Funktionsübermittlung (da Jelly-Vollprogramme standardmäßig Listen von Zeichenfolgen ohne Trennzeichen zwischen ihnen drucken, wodurch es schwierig wird, die Grenzen zu erkennen). Der TIO-Link enthält einen Wrapper zum Drucken einer Liste von Zeichenfolgen, wobei Zeilenumbrüche als Trennzeichen verwendet werden.
Erläuterung
quelle
PHP , 43 Bytes
Probieren Sie es online!
quelle
1<<24
->8**8
sollte hier funktionieren, Credits zu @DigitalTraumaScala , 40 Bytes
Probieren Sie es online!
quelle
Perl 6 , 26 Bytes
Probieren Sie es online!
Verwendet dasselbe Format wie alle anderen. Timeout bei TIO.
Oder im RGB-Format:
31 Bytes
Probieren Sie es online!
quelle
rgb(0, 0, 0)
die Zeichenfolge enthaltenrgb
.