Jesteś programistą, a twój szef postanowił zaktualizować witrynę firmy. Zdecydował, że mniej kolorów jest lepsze, ale chce, aby strona wyglądała tak samo. Słusznie decydujesz, że nie ma pojęcia, o czym on mówi, ale i tak spróbujesz, bo się nudzisz. Ponieważ firma ma tysiące stron internetowych, a każda z nich ma własny CSS, decydujesz się napisać skrypt, aby wprowadzić niezbędne zmiany. Analiza HTML nie jest wymagana.
Wszystkie strony obecnie używają ciągów jak rgb(255,0,0)
dla koloru. Biorąc pod uwagę te trzy wartości dziesiętnych reprezentujące wartości RGB koloru atrybutu CSS (w tej kolejności), zwrot lub wydrukować najkrótszą reprezentację ciąg tego koloru, tak że jest to użyteczny dla CSS tak: color:<your-result-here>;
.
Oto pełna tabela prawidłowych słów kluczowych w kolorze CSS . Nie uwzględniają wielkości liter.
Przykłady:
Należy pamiętać, że kolory można zdefiniować za pomocą 12 lub 24 bitów. Wzór #ABC
jest krótszą wersją #AABBCC
. Chuck Norris to kolor .
Twój program przyjmie tylko 3 liczby całkowite, a nie ciąg znaków (z wyjątkiem „bonusu” wspomnianego później).
0, 0, 0 -> #000 (same as #000000, but shorter)
255, 0, 0 -> red
0, 128, 128 -> TEAL
139, 0, 0 -> DarkRed (OR #8B0000)
72, 61, 139 -> #483D8B
255, 255, 254 -> #fffffe
255, 85, 255 -> #f5f (same as #ff55ff, but shorter)
Punktacja / zasady
- Najkrótszy kod wygrywa!
- Standardowe luki są niedozwolone , z wyjątkiem wbudowanych.
- -50% bajtów (premia jest zaokrąglana w dół), jeśli zaakceptujesz dowolny * prawidłowy selektor kolorów i wydasz najkrótszy. Tak
DarkSlateBlue
by wyjście#483D8B
,#F00
wyjściared
itp.- * Dotyczy to tylko RGB, kodów szesnastkowych i nazw.
- Zauważ, że niektóre kolory mają alternatywne nazwy z powodu X11 (jak
Fuchsia
iMagenta
, lubCyan
iAqua
). Alternatywne nazwy znajdują się na połączonej liście słów kluczowych w kolorze CSS zgodnie ze standardem W3.
- CSS3 jest Turing Complete . To byłoby warte nagrody.
Edytować:
- PROSZĘ URUCHOMIĆ SWÓJ KOD NA PRZYPADKACH TESTOWYCH!
#000
? A jeśli dozwolone jest mniej niż 6 cyfr, dlaczego nie#0
? w3schools.com/cssref/css_colors.asp , CSSOdpowiedzi:
Perl, 212–50% = 106 bajtów
Z dodanymi znakami nowej linii:
Przypadki testowe
Wydajność
Perl, bez premii, 144 bajty
Z dodanymi znakami nowej linii:
Graphics::ColorNames
nie jest modułem podstawowym, ale istnieje już od 2001 roku. Może być konieczne zainstalowanie go przez:Reprezentacja szesnastkowa jest preferowana, jeśli nazwa koloru ma tę samą długość.
Przypadki testowe
Wydajność
źródło
C # 6 527 bajtów / 2 bonus = 264
EDYCJA: Woot! W końcu dostałem odpowiedź bonusową z niższym wynikiem niż odpowiedź podstawowa!
Napisałem tylko funkcję. Wymaga
using
oświadczenia (w zestawie).C # ma ładną listę znanych kolorów do pracy, ale nalega na włączenie kanału Alpha. Znane kolory obejmują również wszystkie kolory systemowe, z których dwa mają nazwy o długości mniejszej niż 7 znaków, więc trzeba je było usunąć.
Oto rozwiązanie premiowe, obsługujące formaty takie jak:
12, 34, 56
#123
#123456
DarkSlateBlue
Całkowicie grał w golfa:
Wcięcia i nowe linie dla przejrzystości:
C #, 265 bajtów
Oto podstawowe rozwiązanie.
Wcięcia i nowe linie dla przejrzystości:
źródło
Mathematica
207 242500-250 = 250 bajtówAktualizacja:
Działa z danymi wejściowymi składającymi się z potrójnych rgb, nazw kolorów lub liczb szesnastkowych.
(12-bitowa) głębia kolorów działa teraz dobrze dzięki doskonałemu artykułowi na temat zmniejszania głębi kolorów . Podstawową ideą jest to, że jeśli potrójne RGB {r, g, b}, gdzie r, g ib mieszczą się w zakresie 0-255, (tj. Hex 00-ff) można przedstawić bez strat jako liczbę w w zakresie 0-15 (tj. 0-f), wówczas można użyć 3-cyfrowej liczby szesnastkowej zamiast 6-cyfrowej liczby. Okazuje się, że nastąpi to za każdym razem, gdy 17 (tj. 255/15) dzieli r, g i b.
Używane są tylko funkcje wbudowane. Mathematica ma zasady zastępowania nazw kolorów HTML potrójnymi RGB. Na przykład jedna reguła to
"Teal"-> RGBColor[0, 128, 128]
. Gdy takie reguły zostaną odwrócone, wartości rgb (ponownie skalibrowane do zakresu {0, 255}) można zastąpić nazwami kolorów.Przykłady
Skomentowane, kod nieprzygotowany
(* zasady zastępowania nazwy koloru próbką koloru, np
RGBColor{255,17,0}
(* zasady zastępowania listy 3 liczb całkowitych odpowiednim kolorem, jeśli taki istnieje. I te same zasady, odwrócone. *)
(* sprawdza, czy 24-bitowy kolor heksadecymalny może być reprezentowany jako 12-bitowy kolor bez strat.
reduce
może zmienić 24-bitowe wyrażenie na 12-bitowe. *)(* Lista RGB zmieniona na liczbę szesnastkową *)
(* Numer szesnastkowy zmieniono na listę RGB. *)
(* Więcej konwersji *)
(* wybiera najkrótsze prawidłowe wyrażenie CSS koloru *)
(* konwertuje dowolne dane wejściowe na listę RGB i wywołuje
f
*)źródło
FF
w bazie 16? To powinno zrobić#FFFFFF
, co jest dłuższe niż białe. Jestem znalezienie#000
niezwykłe, ale będzie zajrzeć do dziwactw CSS aby się upewnić.#FFF
jest taki sam jak#FFFFFF
(wszystkie bity jeden), który jest taki sam jakwhite
. Ponadto#0
jest nieważny, ponieważ nie ma 24 bitów ani 12 bitówCoffeeScript,
411 404 388 384382/2 = 191UPD: Jestem pewien, że to wynik końcowy
Mam nadzieję, że można używać
window.document.*
. Sprawdźrgb
funkcję ieval
zadzwoń.Wyniki testów
Skomentowany kod
Pozwoli to zaoszczędzić niektóre bajty.
q
funkcja umieści kolor wejściowydocument.body.style.color
i uzyska kolor skompilowany jakorgb(...)
. Również zapisze wynik jakhexColor:inputColor
wd
. Zauważeval
użycie.rgb(100,100,100)
jest poprawnym wywołaniem funkcji JavaScript z trzema argumentami liczbowymi.rgb
funkcja konwertuje argumenty na pojedynczą notację HEX 24/12 (jak#fff
,#f0f0f0
).Podziel ciąg znaków na tablicę nazw kolorów, utwórz obiekt odnośnika.
I wróć HEX, jeśli nie ma krótszego wariantu w
d
.źródło
Rysik,
238234/2 = 117Więcej rozwiązań podobnych do CSS! Rysik ma już doskonałą obsługę manipulacji kolorami, więc pożądana funkcja jest dość mała i nie gra w golfa zbyt często.
f(c){for n in split(' ''navy green teal indigo maroon purple olive gray sienna brown silver peru tan orchid plum violet khaki azure wheat beige salmon linen tomato coral orange pink gold bisque snow ivory red'){lookup(n)==c?c=s(n):c}}
Sprawdź to tutaj
źródło
Matlab 617
Dużo wstępnego przetwarzania i kodowania. Oto minimalny zestaw nazw kolorów, które należy wziąć pod uwagę . Szkoda, że Matlab nie ma wbudowanych nazw kolorów = /
źródło
r=0;g=16;b=0;
, choć nie jest to uwzględniane w twoim wyniku.Python 3,
857795 bajtówKonieczność ręcznego określenia wszystkich wymaganych akceptowanych kolorów zwiększyła liczbę bajtów na tym: /
c(a)
przyjmuje jeden argument,a
który ma postaćrgb(#,#,#)
. Z tego rgb i nawiasy są usuwane, a następnie ciąg jest dzielony przecinkami na tablicę.c(x,y,z)
do przetworzenia przyjmuje 3 wartości int, wartości r, g ib koloru rgb. Umieściliśmy je razem w tablicya
. Następnie używamy wbudowanejhex
funkcji Pythona, która konwertuje liczbę Base 10 na liczbę Base 16 w naszej tablicy i tworzy ciąg szesnastkowy (odbywa się to wfor
pętli). Teif
stwierdzenia konwersji kolorów jak000000
na000
i zastąpić znane kolorów przy użyciu słownika.Oto on (dzięki @undergroundmonorail za wskazówkę
;
w Pythonie):Stara wersja:
Może dodam do tego bonus, jeszcze nie wiem. To może zdecydowanie zrobić z 50% mniej bajtów!
-Toastrackenigma
źródło
;
, zapisując wcięcie. na przykład:a=a[4:-1].split(",");b=""
. każdyif
,else
,for
,while
, itd blok z tylko jednej linii może być zapisana jakoif b in k:b=k[b]
.finally, można stracić dużo swojej spacji w środku linii, na przykładk = {
->k={
areturn "color:
->return"color:
re.findall()
(tak też będzie potrzebneimport re
): pastebin.com/rQHqgxXSJavaScript (ES6), 499
611Edytuj Dodano przypadki testowe do pytania
Uwaga: zachowałem tylko nazwy kolorów, które są krótsze niż odpowiednik heksadecymalny.
Uwaga 2: na pewno można w nią grać w golfa więcej ...Mniej golfa
źródło
{f00:"red";"008000":"green"}
.