Prawdziwy kolor (24 bity) w Wikipedii jest opisany w odpowiedniej części jako
24 bity prawie zawsze wykorzystuje 8 bitów każdego z R, G, B. Od 2018 r. 24-bitowa głębia kolorów jest używana przez praktycznie każdy wyświetlacz komputera i telefonu oraz zdecydowaną większość formatów przechowywania obrazów. Prawie wszystkie przypadki, w których 32 piksele mają piksel, oznaczają, że 24 są użyte dla koloru, a pozostałe 8 to kanał alfa lub nieużywane.
2 24 daje 16 777 216 wariantów kolorystycznych. Ludzkie oko może rozróżnić do dziesięciu milionów kolorów [10], a ponieważ gama wyświetlacza jest mniejsza niż zasięg widzenia ludzkiego, oznacza to, że powinien on obejmować ten zakres bardziej szczegółowo, niż można to dostrzec. ...
...
Systemy Macintosh określają kolory 24-bitowe jako „miliony kolorów”. Termin „prawdziwy kolor” jest czasem używany w znaczeniu tego, co ten artykuł nazywa „kolorem bezpośrednim”. [13] Jest również często stosowany w odniesieniu do wszystkich głębi kolorów większych lub równych 24.
Wszystkie 16 777 216 kolorów
Zadanie
Napisz program, który generuje i zwraca wszystkie 16 777 216 wariantów kolorów w tablicy jako ciągi znaków w rgb()
funkcji CSS
5.1 Funkcje RGB:
rgb()
irgba()
rgb()
Funkcja definiuje koloru RGB określając czerwone, zielone i niebieskie kanały bezpośrednio. Jego składnia to:rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) <alpha-value> = <number> | <percentage>
Pierwsze trzy argumenty określają odpowiednio czerwony, zielony i niebieski kanał koloru.
0%
reprezentuje minimalną wartość dla tego kanału kolorów w gamie sRGB i100%
reprezentuje wartość maksymalną. A<number>
jest równoważne a<percentage>
, ale z innym zakresem:0
ponownie reprezentuje minimalną wartość dla kanału koloru, ale255
reprezentuje maksimum. Wartości te wynikają z faktu, że wiele silników graficznych przechowuje kanały kolorów wewnętrznie jako jeden bajt, który może pomieścić liczby całkowite od 0 do 255. Implementacje powinny honorować precyzję kanału, jeśli jest to możliwe lub obliczone. Jeśli nie jest to możliwe, kanał należy zaokrąglić do najbliższej wartości z najwyższą zastosowaną precyzją, zaokrąglając w górę, jeśli dwie wartości są jednakowo bliskie.Ostatni argument, the
<alpha-value>
, określa alfa koloru. Jeśli podano jako a<number>
, użyteczny zakres wartości to0
(reprezentujący całkowicie przezroczysty kolor) do1
(reprezentujący całkowicie nieprzezroczysty kolor). Jeśli podany jako a,0%
reprezentuje całkowicie przezroczysty kolor, a100%
reprezentuje całkowicie nieprzezroczysty kolor. Jeśli zostanie pominięty, domyślnie jest to100%
.Wartości poza tymi zakresami nie są nieprawidłowe, ale są ograniczone do zakresów zdefiniowanych tutaj w czasie wartości obliczonej.
Ze względów starszych
rgb()
obsługuje także alternatywną składnię, która oddziela wszystkie argumenty przecinkami:rgb() = rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )
Również ze względów starszych
rgba()
istnieje również funkcja o identycznej gramatyce i zachowaniurgb()
.
lub zapis szesnastkowy w #RRGGBB
formacie RGB
5.2 Notacje szesnastkowe RGB:
#RRGGBB
Notacja koloru szesnastkowego CSS pozwala określić kolor, podając kanały jako liczby szesnastkowe, co jest podobne do tego, jak często kolory zapisywane są bezpośrednio w kodzie komputerowym. Jest także krótszy niż zapisywanie tego samego koloru w
rgb()
notacji.Składnia a
<hex-color>
to<hash-token>
token, którego wartość składa się z 3, 4, 6 lub 8 cyfr szesnastkowych. Innymi słowy, kolor szesnastkowy jest zapisany jako znak skrótu „#”, po którym następuje pewna liczba cyfr 0–9 lub liter af (wielkość liter nie ma znaczenia -#00ff00
jest identyczna#00FF00
).Podana liczba cyfr szesnastkowych określa sposób dekodowania zapisu szesnastkowego na kolor RGB:
6 cyfr
Pierwsza para cyfr, interpretowana jako liczba szesnastkowa, określa czerwony kanał koloru, gdzie
00
reprezentuje wartość minimalną, aff
(255 w systemie dziesiętnym) reprezentuje maksimum. Następna para cyfr, interpretowana w ten sam sposób, określa zielony kanał, a ostatnia para określa niebieski. Kanał alfa koloru jest całkowicie nieprzejrzysty.PRZYKŁAD 2
Innymi słowy,#00ff00
reprezentuje ten sam kolor corgb(0 255 0)
(limonkowy).
Zobacz szkic edytora CSS Moduł kolorów poziom 4
Przykłady
rgb()
Funkcja CSS ( znak spacji można zastąpić przecinkiem, np. 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)']
Notacja szesnastkowa CSS RGB RRGGBB
// RGB hexadecimal notation as strings in resulting array
['#000000', ...,'#00ff00', ...'#ffffff']
Kryteria wygranej
Najmniej bajtów użytych do napisania programu.
źródło
Odpowiedzi:
R , 25 bajtów
Wypróbuj online!
źródło
a:b-c
tworzy wektor oda-c
dob-c
włącznie (tworzy wektor oda
dob
, a następnie odejmujec
od każdego wpisu).Python 2 ,
77403937 bajtówWypróbuj online!
-1 bajt dzięki Digital Trauma
-2 bajty dzięki dylnan
źródło
8**8
zamiast1<<24
zapisać bajtprint['...
PowerShell ,
2826 bajtówWypróbuj online!
Pętle od
1
do16mb
(16777216). W każdej iteracji używamy-f
operatora ormat działającego na bieżącą liczbę wstępnie zmniejszoną--$_
względem łańcucha"#{0:x6}"
. Podajemy tutajx
wartości, uzupełnione6
cyframi, z hashem#
z przodu. W przypadku TIO, ograniczenie do 60 sekund / 128KiB mocy wyjściowej. Zmień na,1
aby(16mb-5)
zobaczyć, jak to się kończy .źródło
JavaScript (ES7),
656261 bajtówZaoszczędź
34 bajty dzięki @tshZwraca tablicę
#RRGGBB
ciągów.Wypróbuj online! (obcięte wyjście)
źródło
8**8
zamiast1<<24
. Działa to również na JS.Common Lisp, 42 bajty
Wypróbuj online!
źródło
format
golfem, jaki widziałem. Tylko +1 na tej podstawie.Japt, 14 bajtów
Wyjścia jak
#rrggbb
.Wypróbuj (Ograniczony do pierwszych 4096 elementów)
Wyjaśnienie
źródło
ù
. Innym typowym przypadkiem użycia jest użycie go jako licznika, gdy trzeba zwiększyć wartość zmiennej, na przykład odwzorowując tablicę. I oczywiście, ponieważ jest to zmienna, możesz po prostu przypisać jej również wartość, jeśli to konieczne.0
jest jedyną jednocyfrową liczbą całkowitą, która ma własną zmienną - technicznie 7 jakoU-Z
domyślna zmienna wejściowa 60
. Inne całkowite przypisane do zmiennych w Japt to:-1, 10-16, 32, 64 & 100
.Haskell, 41 bajtów
Wypróbuj online!
źródło
05AB1E ,
151410 bajtówWypróbuj online.
Wyjaśnienie:
źródło
Partia, 87 bajtów
Dane wyjściowe w formacie CSS. Podstawienie zmiennej następuje przed
for
analizą instrukcji, więc rzeczywisty kod wygląda następująco:źródło
C # (interaktywny kompilator Visual C #) , 47 bajtów
Wypróbuj online!
źródło
C # (.NET Core) , 75 bajtów
Wypróbuj online!
Port wersji JAVA 10 z interpolowanym formatem C #
źródło
K (oK) , 19 bajtów
Rozwiązanie:
Wypróbuj online! (ograniczone do pierwszych 500 numerów)
Wyjaśnienie:
Zrzuć ciągi rgb. Konwertuj każdą liczbę z zakresu od 0 do 16777216 na bazę 256, a następnie konwertuj na ciągi ...
źródło
MATL ,
1715 bajtówWypróbuj online!
Wersja TIO wyświetla tylko pierwsze 2 ^ 10, aby nie przekroczyć limitu czasu. W stopce umieściłem ostatnią iterację, aby pokazać, że rzeczywiście kończy się o godz
#FFFFFF
. Zapisano jeden bajt, zmieniając nafprintf
zamiast ręcznie zestawiać ciąg. Zwraca listę rozdzielaną przecinkami.Wyjaśnienie
źródło
APL (Dyalog Unicode) ,
474320 bajtówWypróbuj online!
6⍴
4⍴
Dzięki @Dzaima i @ngn za 23 bajty.
Zastosowania
⎕IO←0
.W jaki sposób:
źródło
Rubinowy , 31 bajtów
Wypróbuj online!
źródło
%
że ciąg jest tak długi, a tablica tak długa. Dla twojej informacji możesz zapisać bajt, używając dosłownego podziału linii zamiast\n
.V , 25 bajtów
Wypróbuj online! (zastąpiony
16777215
przez31
)Wyjaśnienie
źródło
Partia, 69 + 4 = 73
g.cmd, 69
Zapisuje wartość szesnastkową z formą
#RRGGBB
w „Tablicy”.g.cmd
należy wywoływać za pomocącmd /V/Q/K g.cmd
. Stąd pochodzi + 4/V/Q
, licząc jako 4 dodatkowe postacie w porównaniu do sprawiedliwegocmd /K g.cmd
. Spowoduje to skonfigurowanie środowiska, które ma pamięć „Array”. Uruchamianie trwa również wieczność, więc używaj bardzo niskich wartości, aby spróbować lub przerwać wykonywanieCtrl+C
Awaria
Inwokacja
/V
umożliwia opóźnioną ekspansję, ale jest krótsza niżsetlocal EnableDelayedExpansion
, dlatego właśnie potrzebujemycmd
połączenia/Q
pomija dane wyjściowe i jest równoważne z@echo off
/K
pozwala wykonać wyrażenie (w tym przypadkug.cmd
) i nie kończy się później, dzięki czemu można sprawdzić tablicę za pomocąset #
g. cmd
W tym bicie wykorzystuje się sztuczkę udokumentowaną tutaj, aby przekonwertować liczbę normalną na szesnastkową, a następnie zapisuje tę wartość w „tablicy”.
Nazwałem tę strukturę przechowywania „Array”, ale tak naprawdę nie jest to właściwe, ponieważ w Batch nie istnieją prawdziwe tablice. ALE możesz nazwać zmienne, aby miały nazwy podobne do tablic, na przykład:
lub, jak w tym przypadku:
Nadal możesz uzyskać do nich dostęp za pośrednictwem
!#%position%!
źródło
/V/Q/K
być twierdzony jako „argumenty” tłumacza i liczony jako „3 + 69 = 72”. metaGroovy , 53 bajty
Definicja funkcji c () zwraca ArrayList (zakładam, że jest w porządku, nawet jeśli pytanie pyta o tablicę).
Niegolfowane, z typami niejawnymi:
Wypróbuj online!
źródło
Java 10,
8784 bajtów-3 bajty dzięki @ archangel.mjj .
Wypróbuj online (ograniczone do pierwszych
4,096
elementów).Wyjaśnienie:
źródło
r[i]="".format("#%06X",i);
"".format("#%06X",i)
wcześniej, odkąd zobaczyłem to w odpowiedzi na Python, ale upuściłem odpowiedź, ponieważ nie mogłem jej uruchomić wystarczająco szybko dla TIO. Potem zobaczyłem, że wszyscy po prostu wypisują pierwsze4,096
pozycje na TIO, więc napisałem odpowiedź, zapominając o"#%06X"
...>. <var r
w Javie ..var
w Javie.PHP,
6862 bajtówPowinno to zostać umieszczone w pliku, tablica jest zwracana na końcu, aby była użyteczna.
Aby uzyskać dostęp do tablicy, po prostu podaj wynik
$a = include 'xyz.php';
zmiennej (np .:) zmiennej.Dzięki @manatwork za uratowanie mi 6 bajtów i naprawienie goof.
źródło
%1$06d
ciągiem formatu? I nie widzę powodu, aby używać1$
. Można zmniejszyć długość o tym „#” w ciągu formatu:#%06x
. Przydałoby się to przy dodawaniu dodatkowych znaków w celu ustalenia zakresu, ponieważ obecnie liczy do 16777216 = # 1000000.%d
się%x
. I zupełnie zapomniałem o przeniesieniu#
wnętrzasprintf()
rozmowy. Zapisałeś mi 6 bajtów. DziękujęMATL , 11 bajtów
Wypróbuj online! (z trzema cyframi szesnastkowymi zamiast sześciu)
Wyjaśnienie
źródło
Bash + jot, 22
Wypróbuj online!
źródło
Perl 5 , 31 bajtów
Wypróbuj online!
źródło
Lua ,
4745 bajtówWypróbuj online!
źródło
s
i zapisać bajt.T-SQL,
122117 bajtówZwraca tablicę
#RRGGBB
ciągów 16 777 216 wierszy . Podział wiersza służy wyłącznie do odczytu:Używa rekurencyjnego CTE dla tabeli liczb od 0 do 2 ^ 24-1, a następnie używa wbudowanego
FORMAT
polecenia (dostępnego w SQL 2012 lub nowszym), aby przekształcić go w 6-cyfrowy ciąg szesnastkowy . Dołącz z#
przodu i gotowe.Edycja 1: Usunięto
POWER()
funkcję, numer był krótszy: Pźródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online! (uwaga: używa TIO
2
zamiast6
jako6
limit czasu)Przesyłanie funkcji (ponieważ pełne programy Jelly domyślnie będą drukować listy ciągów bez separatorów między nimi, co utrudnia dostrzeżenie granic). Łącze TIO zawiera opakowanie do drukowania listy ciągów znaków za pomocą znaku nowej linii w celu ich rozdzielenia.
Wyjaśnienie
źródło
PHP , 43 bajty
Wypróbuj online!
źródło
1<<24
->8**8
powinno tu działać, podziękowania dla @DigitalTraumaScala , 40 bajtów
Wypróbuj online!
źródło
Perl 6 , 26 bajtów
Wypróbuj online!
Używa tego samego formatu, co wszyscy inni. Przekroczono limit czasu na TIO.
Lub w formacie rgb:
31 bajtów
Wypróbuj online!
źródło
rgb(0, 0, 0)
ciągrgb
.