W CSS kolory można określić za pomocą „szesnastkowej tripletu” - trzy bajtowej (sześciocyfrowej) liczby szesnastkowej, gdzie każdy bajt reprezentuje czerwony, zielony lub niebieski składnik koloru. Na przykład #FF0000
jest całkowicie czerwony i odpowiada rgb(255, 0, 0)
.
Kolory mogą być również reprezentowane przez notację skróconą, która wykorzystuje trzy cyfry szesnastkowe. Stenografia rozwija się do postaci sześciocyfrowej poprzez duplikowanie każdej cyfry. Na przykład #ABC
staje się #AABBCC
.
Ponieważ w skrócie szesnastkowym jest mniej cyfr, można przedstawić mniej kolorów.
Wyzwanie
Napisz program lub funkcję, która pobiera sześciocyfrowy szesnastkowy kod koloru i wyświetla najbliższy trzycyfrowy kod koloru.
Oto przykład:
- Wpisz kod szesnastkowy: # 28a086
- Czerwony składnik
- 0x28 = 40 (dziesiętny)
- 0x22 = 34
- 0x33 = 51
- 0x22 jest bliżej, więc pierwsza cyfra skróconego kodu koloru to 2
- Zielony składnik
- 0xa0 = 160
- 0x99 = 153
- 0xaa = 170
- 0x99 jest bliżej, więc drugą cyfrą jest 9
- Niebieski składnik
- 0x86 = 134
- 0x77 = 119
- 0x88 = 136
- 0x88 jest bliżej, więc trzecia cyfra to 8
- Skrócony kod koloru to # 298 (który rozwija się do # 229988)
Twój program lub funkcja musi przyjmować jako dane wejściowe sześciocyfrowy szesnastkowy kod koloru poprzedzony #
i wypisywać trzycyfrowy kod koloru poprzedzony znakiem #
.
Przykłady
- # FF0000 → # F00
- # 00FF00 → # 0F0
- # D913C4 → # D1C
- # C0DD39 → # BD3
- # 28A086 → # 298
- # C0CF6F → # BC7
Punktacja
To wyzwanie dla golfa, więc wygrywa najkrótsza odpowiedź w twoim języku! Obowiązują standardowe zasady.
źródło
#
dodania niczego do wyzwania.Odpowiedzi:
JavaScript (ES6), 55 bajtów
Wypróbuj online!
źródło
05AB1E , 13 bajtów
Wypróbuj online!
W jaki sposób?
źródło
ć
dekapitować ” To inny sposób na opisanie tego, lol. : D Ładna odpowiedź, +1 ode mnie.Japt , 16 bajtów
Wypróbuj lub uruchom wszystkie przypadki testowe
źródło
8088 Montaż, IBM PC DOS,
5958 bajtówNiezmontowany wykaz:
Samodzielny plik wykonywalny DOS dla komputera PC. Dane wejściowe są przez wiersz poleceń, dane wyjściowe na konsolę.
Większość długości kodu obsługuje konwersję wymaganych szesnastkowych operacji we / wy na bajty, ponieważ kod maszynowy DOS / x86 nie ma do tego wbudowanych funkcji.
I / O:
Pobierz i przetestuj HEXCLR.COM lub
xxd
hexdump:źródło
Retina 0.8.2 , 88 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Sparuj cyfry szesnastkowe.
Przelicz każdą cyfrę osobno na dziesiętną.
Konwertuj każdą cyfrę dziesiętną na unarną.
Zakończ konwersję szesnastkową pary cyfr.
Dodaj 8 i podziel przez 17.
Konwertuj z powrotem na szesnastkowy.
źródło
PHP ,
7567 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
źródło
Python 3 ,
727068 bajtówWypróbuj online!
To jest fragment oryginalnej odpowiedzi Grzegorza Oledzkisa , która pomogła mu grać w golfa.
Dwie funkcje Python 3 pomagają nam oszczędzać bajty:
-2 bajki dzięki dla Jonathana Allana
źródło
(int(x[i:i+2],16)+8)//17
saves 2Galaretka ,
2019 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 81 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
6348 bajtówWypróbuj online!
-15 bajtów dzięki attinat ! Wymiana
StringJoin
z<>
i kompresji składnię.RGBColor@#
konwertuje łańcuch wejściowy na kolor formularzaRGBColor[r, g, b]
pomocą trzech argumentów zmiennoprzecinkowych z zakresu 0..1.Round[15 List @@ %]
mnoży listę trzech argumentów przez 15 i zaokrągla je do najbliższej liczby całkowitej. Mamy teraz listę trzech wartości całkowitych odpowiadających trzem pożądanym cyfrom szesnastkowym.%~IntegerString~16
konwertuje tę listę trzech liczb całkowitych na listę trzech ciągów szesnastkowych po jednym znaku."#"<>%
przygotowuje#
postać i łączy wszystkie te postacie razem.źródło
MathGolf ,
1912 bajtówDane wyjściowe jako lista znaków. Jeśli nie jest to dozwolone,
y
należy dodać dodatkowy znak końcowy , aby dołączyć listę znaków do łańcucha.-7 bajtów dzięki @maxb , ponieważ obejrzałem wbudowane (
2ô_2<\1>]
do2/
).Wypróbuj online.
Wyjaśnienie:
źródło
Ruby (2.5.3),
45,44, 42 bajtówEDYCJA: zapisano jeden bajt, ponieważ nie potrzebujemy grupy znaków dla drugiej postaci w wyrażeniu regularnym (zainspirowany odpowiedzią Neila)
EDYCJA 2: zapisano 2 bajty, ponieważ składnia rakiety dash rakieta nie potrzebuje nawiasów wokół argumentu
źródło
-p
flagi, a kolejne 2, używając$&
zamiast argumentu w bloku: tio.run/##KypNqvz/…Python 2 (
10910197858374 bajty)„Najbliższa odległość” jest obsługiwana przez podzielenie przez 17 i zaokrąglenie.
Ulepszenia:
-8 bajtów przy użyciu
int(...+.5)
lewy zamiastint(round(...))
-4 bajty przy użyciu zrozumienia listy zamiast
map()
-1 bajt przez hardcoding
#
na wyjściu (dzięki @movatica)-10 bajtów, nie używając
re.findall("..",...)
jawnego łączenia ciągów-2 bajty, nie używając rozumienia listy, ale wbudowane wyrażenie generatora w
join
(dzięki @movatica)-1 bajt, nie łącząc
:7
zakończenia części niebieskiej-9 bajtów dzięki lepszej iteracji po kolorach - tj. Iteracji po indeksach, a nie rzeczywistych znakach (dzięki @movatica)
źródło
'#'
zamiastx[0]
.''.join(...)
, ponieważ obsługuje ona również wyrażenie generatora. Po prostu usuń[]
i zapisz 2 kolejne bajty :)range(1,6,2)
jest jeszcze lepszy z[1,3,5]
lambda x:'#'+''.join(hex((int(x[i:i+2],16)+8)/17)[2:]for i in[1,3,5])
-> 69 bajtówPerl 5
-p
,3534 bajtów@nwellnhof zapisał bajt
Wypróbuj online!
Odczytuje ze STDIN, zastępuje każdą parę elementów, która nie
#
ma odpowiedniego pojedynczego znaku, stosując metodę dzielenia przez 17 w celu znalezienia najbliższego, a następnie domyślnie wyprowadza (-p
) wynik.źródło
Python 3, 67 bajtów
źródło
Czerwony , 103 bajty
Wypróbuj online!
Okazało się, że obecna wersja Linuksa Red nie ma implementacji
hex-to-rgb
funkcji, dlatego podstawową konwersję wykonuję „ręcznie” :)Działa to dobrze w czerwonej konsoli GUI w systemie Windows:
Czerwony , 94 bajty
źródło
Perl 6 , 35 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 22 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
R , 57 bajtów
Wypróbuj online!
źródło
Pyth , 20 bajtów
Wypróbuj tutaj.
UWAGA: W przypadku gdy powyższy link podnosi
ImportError
, przejdź tutaj ; obecnie na „oficjalnej” stronie występuje błąd, który jest tymczasowym rozwiązaniem firmy Maltysen . Ten link może przestać działać po naprawieniu oficjalnego.źródło
Dalej (gforth) , 87 bajtów
Wypróbuj online!
Wyjaśnienie
#
)#
0x11
), aby uzyskać najbliższą wartość dla skróconego komponentuWyjaśnienie kodu
źródło
Stax , 13 bajtów
Uruchom i debuguj
źródło
K4 , 39 bajtów
Rozwiązanie:
Wyjaśnienie:
Używa tej samej strategii, co wiele z tych odpowiedzi (tj. Dodaj 8, podziel przez 17):
Dodatkowy:
"#",{x@*16\:a?&/a:abs(17*!16)-16/:x?y}[.Q.nA]@/:3 2#1_
- mój oryginalny pomysł na 54 bajtyźródło