Trójki heksadecymalne, takie jak #ffffff
(biały) lub #3764ef
(niebieskawy), są często używane do oznaczenia kolorów RGB. Składają się one z #
sześciu cyfr szesnastkowych (0-f) lub czasami trzech cyfr, w których rzeczywisty kolor uzyskuje się przez podwojenie każdej cyfry. Na przykład #fff
jest #ffffff
i #1a8
jest #11aa88
.
Niestety, że trzycyfrowy skrótem był golfiest internet ma do zaoferowania, aż do teraz .
Napisz program lub funkcję, która przyjmuje ciąg od 1 do 7 znaków:
- Pierwszą postacią zawsze będzie
#
. - Pozostali bohaterowie zawsze będą cyfry szesnastkowe:
0123456789abcdef
.
Dane wejściowe to krótsza forma heksadecyłu (lub pełna forma, jeśli podano 7 znaków). Musisz wyprowadzić pełną szesnastkową szesnastkę, która rozszerza stenografię wejściową na podstawie następujących wzorców:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Każdy z U
, V
, W
, X
, Y
, i Z
może być dowolny szesnastkowy. Dane wyjściowe mają zawsze 7 znaków.
Na przykład:
Input -> Output
# -> #000000
#0 -> #000000
#4 -> #444444
#f -> #ffffff
#a1 -> #a1a1a1
#0f -> #0f0f0f
#99 -> #999999
#1a8 -> #11aa88
#223 -> #222233
#fff -> #ffffff
#1230 -> #102030
#d767 -> #d77767
#bbb5 -> #b5b5b5
#aabbc -> #aabbcc
#00000 -> #000000
#3764e -> #3764ee
#3764ef -> #3764ef
#123456 -> #123456
#f8f8f8 -> #f8f8f8
Notatki
Wejście zawsze zaczyna się od,
#
podobnie jak wyjście.Możesz założyć, że wszystkie litery są małe (
abcdef
) lub wielkie (ABCDEF
), jak wolisz.Litery na wyjściu mogą być w obu przypadkach, jak wolisz. Możesz nawet mieszać przypadki.
Alfa / przezroczystość nie jest tutaj rozpatrywana (chociaż istnieją szesnastkowe wersje kolorów RGBA).
Najkrótszy kod w bajtach wygrywa.
źródło
#UVWXY -> #UVWXYY
wpisu, ponieważ pozwala on na reprezentację jednej wartości dla kanału Niebieskiego, ale nie ma podobnego wyrażenia dla Czerwonego i Zielonego (np. Gdybym chciał#889071
, nie mógłbym skrócić, ale#907188
może być ... jak#90718
) innych wszystko działa świetnie.#UVWX -> #UXVXWX
. To takie niespójne i arbitralne zachowanie, że trudno uwierzyć, że nie ma kilka przeglądarki, która faktycznie obecnie wdrożyć.#RGBA
i#RRGGBBAA
, więc # 1234 należy czytać jakorgba(17, 34, 51, 0.25)
Odpowiedzi:
JavaScript,
868277 bajtówpo prostu dowiedz się, że usuń rekurencyjne zapisywanie 4 bajtów ...
pomysł z @Arnauld oszczędza 4 bajty, +1 więcej bajtów
źródło
([s,a=0,b=a,c,d,e,f]=x)=>f?x:e?x+e:d?s+a+d+b+d+c+d:c?s+a+a+b+b+c+c:s+a+a+a+b+b+b
na 80 bajtówReferenceError: x is not defined
Galaretka , 24 bajty
Pełny program (puste linie są tak naprawdę pustymi liniami).
Wypróbuj online! lub zobacz pakiet testowy *
W jaki sposób?
* program zestawu testów musiał zostać zmieniony poprzez zamianę kolejności tego, co było
Main link
iLink 7
, podczas gdy stopka stała sięMain Link
. Co więcej,#
musiał zostać ręcznie wymieniony, ponieważ program jest na swoim miejscu.źródło
CJam,
454442403635 bajtówUruchamia różne fragmenty kodu na podstawie długości danych wejściowych.
źródło
<s></s>
PHP 7.1, 88 bajtów
PHP 5,
9088 bajtówźródło
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
w21422112233122444113355123456
, a także zaznaczanie prawidłowego opartego na strlen.aa
dopełnia ciąg do co najmniej 2 znaków. Na wejściu#
nie ma$argn[1]
więc?:0
wyjść a0
. Działa to również dla on0
w ciągu. Jedna z najlepszych odpowiedzi, jakie widziałem! Niestety nie opłaca się zbytnio (odpowiedź Jörga spadła do 95).PHP,
95938987Zasadniczo @ JörgHülsermann za odpowiedź , ale znacznie grałem w dół, więc zdecydowałem się opublikować go jako odpowiedź oddzielne. Uznałbym tę odpowiedź za wspólny wysiłek mnie i Jörga.
źródło
Python 3,
166162160152 bajtówTworzę listę krotek zastępczych wyrażeń regularnych dla każdego wzorca, a następnie wyodrębniam krotkę przy indeksie
len(x)-1
, w końcu splatting (*
) na argumentyre.sub
:zapisano 8 bajtów na pamięć
r'\1'
(dzięki, Gábor Fekete)źródło
r'\1'
parametru o nazwie nie pozwoliłoby zaoszczędzić niektórych bajtów?o=r'\1'
ale używaszb
w swoim kodzie: DJava 10,
228227224182 bajtyWypróbuj online.
Wyjaśnienie:
źródło
APL (Dyalog) , 43 bajty
Wymaga
⎕IO←0
ustawienia domyślnego w wielu systemach.Wypróbuj online!
1↓⍞
upuść pierwszy znak (skrót){
zastosuj następującą anonimową funkcję(≢⍵)⊃
użyj długości argumentu, aby wybrać jedną z następujących siedmiu wartości:'0'
zero⍵
argument⍵
argument2/⍵
dwa argument (2
) każdego (/
) argumentu (⍵
) argument∊⍵,¨⊃⌽⍵
spłaszczony (∊
) argument (⍵
), po którym następuje każda (,¨
) z pierwszą (⊃
) z odwróconą (⌽
) argument (⍵
)⍵,⌽⍵
argument (⍵
) poprzedzany (,
) do odwróconej (⌽
) argumentu (⍵
)⍵
argument6⍴
powtarzaj elementy, aż osiągniesz długość sześciu}
koniec funkcji anonimowej'#',
dodaj do tego skrótźródło
Python 2,
167165 bajtów-2 bajty dzięki Trelzevirowi
Tworzy listę ciągów i wybiera na podstawie długości ciągu.
źródło
z=zip
.Sed, 119 (118 bajtów +
-E
)Proste zastępowanie tekstu.
źródło
PHP, 87 bajtów
użyj liczb podstawowych 35
Wypróbuj online!
lub użyj liczb podstawowych 33
Wypróbuj online!
PHP, 89 bajtów
Wypróbuj online!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 bajty przy użyciu bazy 36PHP, 102 bajtów
Wypróbuj online!
PHP, 180 bajtów
Wypróbuj online!
źródło
Siatkówka , 90 bajtów
Wypróbuj online! Obejmuje przypadki testowe.
Objaśnienie: Pierwsze tłumaczenie obsługuje dwie cyfry, drugie trzy, trzecie cztery, a czwarte zero. Jednak ani drugie, ani czwarte tłumaczenie nie powtarza (ostatniej) cyfry, ponieważ i tak robi się to na końcu, aby objąć wszystkie pozostałe przypadki.
źródło
Haskell ,
13012712211810995 bajtów (by user1472751 )Wypróbuj online!
źródło
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
Jest także krótszy niża!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
możliwyg(a:t)|l<-last t=a:[ ...
PowerShell,
113111 bajtówObjaśniony skrypt testowy:
Wynik:
źródło
JavaScript (ES6), 96 bajtów
Pokaż fragment kodu
źródło
Perl, 61 bajtów
Uruchom z
perl -nE
. Zakłada, że dane wejściowe są dokładnie takie, jak opisano (daje niepoprawne wyniki, jeśli dane wejściowe mają znak nowej linii).Ciąg „g + g + ÜRÉ / Â ¥ [[” koduje 7 liczb 16-bitowych
11111,11111,21212,12233,42434,23455,23456
jako 14 znaków Latin1. Oto zrzut heksowy dla jasności:źródło
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Ale kiedy wpisuję „#a”, otrzymuję „# a0a0a0”, co moim zdaniem jest błędne. Powinien to być „#aaaaaa”. (Może popełniłem błąd w wywołaniu pack ().)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Nadal wydaje się być niepoprawny, ponieważ „#a” nadal podaje niepoprawną odpowiedź „# a0a0a0” (zamiast „#aaaaaa”).-l
przełącznika (to „ell”, jak w „literę L”) z-nE
wyłącznikiem, tak:perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Teraz działa poprawnie.perl -nE
” na „Uruchom za pomocąperl -lnE
”. (-l
Część przełącznika pozbywa się końcowej nowej linii dla Ciebie.)-F
w wierszu poleceń pozwala zmienić to nasay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
zapisywanie 5 bajtów w kodzie.Pakiet Windows,
389 372 362 349231 bajtówCałkowicie skopiowałem kod @Neil ...
źródło
%s:~3,1%%s:~4,1%
można zastąpić%s:~3,2%
. Również nie jestem pewien, czy to działa na wejście#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
ifor %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 %s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do if not %%~xr.==. echo %%~nr&exit/b
.Pyth, 35 bajtów
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe tutaj .
źródło
Python 2 , 99 bajtów
Wypróbuj online!
źródło
Python 2 - 179 bajtów
Czy ktoś może mi pomóc zaoszczędzić trochę bajtów? Wszystkie te stwierdzenia wydają się, że można je skrócić do czegoś krótszego, po prostu nie wiem co.
źródło
list[len(list)-x]
jest takie samo jaklist[-x]
.if t==1:
doif t<2:
(iif t==2:
doif t<3:
itp.). Z pewnością jest mniej czytelny, ale bardziej przystosowany do gry w golfa!TXR Lisp: 171 bajtów
Zębaty:
Jest to funkcja anonimowa:
do
makro generuje(lambda ...)
formularz.Jest to idiomatyczny styl kodowania, odpowiedni do produkcji; jedynym golfem jest zgniatanie białych znaków:
źródło
Braingolf , 95 bajtów
Wypróbuj online!
Jest to faktycznie ekwiwalent Braingolfa w przypadku zmiany liczby znaków po
#
wprowadzeniu.Wyjaśnienie
Rzeczy, które zawsze działają:
Jeżeli
#X
:Jeśli
#XX
Ten może być trochę golfowy, mógłbym na niego spojrzeć, kiedy wrócę do domu
Jeśli
#XXX
Masz pomysł
źródło
Rubin , 127 bajtów
Wypróbuj online!
źródło
Rubin , 118 bajtów
Wypróbuj online!
źródło
05AB1E , 24 bajty
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło