Os trigêmeos hexadecimais como #ffffff
(branco) ou #3764ef
(azulado) são frequentemente usados para denotar cores RGB. Eles consistem em #
seguidos de seis dígitos hexadecimais (0-f) ou, às vezes, três dígitos em que a cor real é obtida dobrando cada dígito. Por exemplo, #fff
é #ffffff
e #1a8
é #11aa88
.
Infelizmente, esse atalho de três dígitos era o golfista que a internet tinha a oferecer, até agora .
Escreva um programa ou função que tenha uma sequência de 1 a 7 caracteres:
- O primeiro caractere sempre será
#
. - Os outros personagens será sempre dígitos hexadecimais:
0123456789abcdef
.
A entrada é uma forma abreviada de um trigêmeo hexadecimal (ou a forma completa se forem fornecidos 7 caracteres). Você precisa produzir um trigêmeo hexadecimal completo que expanda a taquigrafia de entrada com base nesses padrões:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Cada um U
, V
, W
, X
, Y
, e Z
pode ser qualquer dígito hexadecimal. A saída é sempre 7 caracteres.
Por exemplo:
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
Notas
A entrada sempre começará com
#
e a saída também.Você pode assumir que todas as letras de entrada são minúsculas (
abcdef
) ou maiúsculas (ABCDEF
) como preferir.As letras na saída podem estar nos dois casos, como você preferir. Você pode até misturar casos.
Alfa / transparência não é tratada aqui (embora existam versões hexadecimais de cores RGBA).
O código mais curto em bytes vence.
fonte
#UVWXY -> #UVWXYY
entrada porque ela permite uma representação de valor único para o canal Blue, mas não há expressão semelhante para vermelho e verde (por exemplo, se eu quisesse,#889071
não posso abreviar, mas#907188
posso ser ... como#90718
) os outros tudo funciona muito bem.#UVWX -> #UXVXWX
. É uma inconsistente tal e comportamento arbitrário que é difícil de acreditar que não há um par de navegador que realmente atualmente implementá-lo.#RGBA
e#RRGGBBAA
, portanto, o # 1234 deve ser lido comorgba(17, 34, 51, 0.25)
Respostas:
JavaScript,
868277 bytesbasta descobrir que remover recursivo salvar 4 bytes ...
idéia de @Arnauld salvar 4 bytes, mais +1 bytes
fonte
([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
para 80 bytesReferenceError: x is not defined
Gelatina , 24 bytes
Um programa completo (as linhas vazias são na verdade linhas vazias).
Experimente online! ou veja uma suíte de testes *
Quão?
* o programa da suíte de testes teve que ser alterado trocando a ordem do que eram
Main link
eLink 7
, enquanto o rodapé se tornou oMain Link
. Além disso, o arquivo#
teve que ser substituído manualmente, uma vez que o programa está como está.fonte
CJam,
454442403635 bytesExecuta vários trechos de código com base no comprimento da entrada.
fonte
<s></s>
PHP 7.1, 88 bytes
PHP 5,
9088 bytesfonte
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
em21422112233122444113355123456
e seleciona o correto baseado em strlen.aa
preenche a corda com pelo menos 2 caracteres. Na entrada#
não existe$argn[1]
por isso?:0
gera um0
. Isso também funciona para0
na string. Uma das melhores respostas que eu já vi! Infelizmente, não compensa demais (a resposta de Jörg chegou a 95).PHP,
95938987Basicamente, a resposta de @ JörgHülsermann, mas diminuiu bastante, então decidi publicá-la como uma resposta separada. Eu contaria essa resposta como um esforço coletivo meu e de Jörg.
fonte
Python 3,
166162160152 bytesConstruo uma lista de tuplas de substituição de regex para cada padrão e, em seguida, extraio a tupla no índice
len(x)-1
, finalmente dividindo (*
) nos argumentos dere.sub
:salvou 8 bytes memorizando
r'\1'
(obrigado, Gábor Fekete)fonte
r'\1'
como parâmetro nomeado não salvaria alguns bytes?o=r'\1'
mas usab
no seu código: DJava 10,
228227224182 bytesExperimente online.
Explicação:
fonte
APL (Dyalog) , 43 bytes
Requer
⎕IO←0
qual é o padrão em muitos sistemas.Experimente online!
1↓⍞
solte o primeiro caractere (o hash){
aplique a seguinte função anônima(≢⍵)⊃
use o comprimento do argumento para escolher um dos sete valores a seguir:'0'
a zero⍵
o argumento⍵
o argumento2/⍵
dois (2
) de cada (/
) do argumento (⍵
)∊⍵,¨⊃⌽⍵
o∊
argumento achatado ( ) (⍵
) seguido cada (,¨
) pelo primeiro (⊃
) de o⌽
argumento reverso ( ) (⍵
)⍵,⌽⍵
o argumento (⍵
) precedido (,
) ao⌽
argumento reverso ( ) (⍵
)⍵
o argumento6⍴
repita os elementos até que um comprimento de seis seja alcançado}
fim da função anônima'#',
acrescentar um hash a essefonte
Python 2,
167165 bytes-2 bytes graças a Trelzevir
Ele cria uma lista de sequências e escolhe com base no comprimento da sequência.
fonte
z=zip
.Sed, 119 (118 bytes +
-E
)Substituição simples de texto.
fonte
PHP, 87 bytes
use números da base 35
Experimente online!
ou use os números da Base 33
Experimente online!
PHP, 89 bytes
Experimente online!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 bytes usando uma base de 36PHP, 102 bytes
Experimente online!
PHP, 180 bytes
Experimente online!
fonte
Retina , 90 bytes
Experimente online! Inclui casos de teste.
Explicação: A primeira tradução manipula dois dígitos, o segundo três, o terceiro quatro e o quarto zero. No entanto, nem a segunda nem a quarta traduções repetem o (último) dígito, pois isso é feito no final para cobrir todos os casos restantes.
fonte
Haskell ,
130127122118109 10995 bytes (pelo usuário1472751 )Experimente online!
fonte
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
é mais curto quea!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
você pode fazerg(a:t)|l<-last t=a:[ ...
Powershell,
113111 bytesScript de teste explicado:
Resultado:
fonte
JavaScript (ES6), 96 bytes
Mostrar snippet de código
fonte
Perl, 61 bytes
Corra com
perl -nE
. Supõe que a entrada seja exatamente como descrito (fornece resultados incorretos se a entrada tiver uma nova linha à direita).A cadeia "g + g + ÜRÉ / Â ¥ [[" codifica os 7 números de 16 bits
11111,11111,21212,12233,42434,23455,23456
como 14 caracteres latin1. Aqui está um hexdump para maior clareza:fonte
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Mas quando digito "#a", recebo "# a0a0a0", o que acho errado. Deve ser "#aaaaaa". (Talvez eu cometi um erro na chamada pack ().)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Ainda parece estar errado, pois "#a" ainda gera a resposta incorreta de "# a0a0a0" (em vez de "#aaaaaa").-l
switch (que é "ell" como na "letra L") com o-nE
interruptor, como este:perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Agora funciona corretamente.perl -nE
" para "Executar comperl -lnE
". (A-l
parte da chave se livrar da nova linha de fuga para você.)-F
na linha de comando permite alterar isso parasay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
salvar 5 bytes no código.Lote do Windows,
389372362 349231bytesCopiei totalmente o código @ Neil ...
fonte
%s:~3,1%%s:~4,1%
pode ser substituído por%s:~3,2%
. Também não tenho certeza de que isso funcione para uma entrada de#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
efor %%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
.Pitão, 35 bytes
Experimente online aqui ou verifique todos os casos de teste aqui .
fonte
Python 2 , 99 bytes
Experimente online!
fonte
Python 2 - 179 bytes
Alguém pode me ajudar a salvar alguns bytes? Todas as declarações if parecem poder ser abreviadas para algo mais curto, simplesmente não sei o quê.
fonte
list[len(list)-x]
é o mesmo quelist[-x]
.if t==1:
paraif t<2:
(eif t==2:
paraif t<3:
etc.). É menos legível, com certeza, mas mais capaz de codificar golfe!TXR Lisp: 171 bytes
Recuado:
Esta é uma função anônima: a
do
macro gera um(lambda ...)
formulário.É um estilo de codificação idiomática, adequado para produção; o único golfe é esmagar o espaço em branco:
fonte
Braingolf , 95 bytes
Experimente online!
Isso é efetivamente o equivalente de Braingolf a um caso de mudança na quantidade de caracteres após
#
a entrada.Explicação
Coisas que sempre são executadas:
Se
#X
:E se
#XX
Este pode ser um pouco jogável, eu posso olhar quando chegar em casa
E se
#XXX
Você entendeu a ideia
fonte
Ruby , 127 bytes
Experimente online!
fonte
Ruby , 118 bytes
Experimente online!
fonte
05AB1E , 24 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte