O mundo da arte é cheio de cores, mas o mundo da rede é ainda mais cheio do que o mundo da arte de cores diferentes e suas representações. É por isso que precisamos saber como converter um tipo de formato de cor para outro.
O desafio é evidente:
Escreva um programa / função que converta um determinado código HEX ( #00ff0080
, por exemplo) em RGBA (como rgba(0, 255, 0, 0.5)
).
Regras:
- Bibliotecas externas / built-ins para converter HEX em RGBA não são permitidas. No entanto, substitutos jQuery e sintaxe são aceitáveis.
- Aplicam-se as regras de entrada / saída padrão.
- O formato do alfa pode estar entre (1 == 100%) ou outro (100 == 100%) que não é realmente importante.
- A saída é flexível , desde que retorne os 4 valores convertidos (como String, Array, List, sua escolha).
- Você pode optar por receber a entrada sem a
#
no início. Portanto, você pode receber entradas como#RRGGBBAA
ouRRGGBBAA
. Você pode assumir que o código hexadecimal (excluindo o#
) sempre terá 8 caracteres. - Você deve dividir todos os valores por 255, incluindo o alfa. A precisão decimal mínima (para o alfa será de 2 casas decimais).
Casos de teste
Input: 00ff0080
Output: 0, 255, 0, 0.5
Pontuação
code-golf , vence o código com a menor quantidade de bytes.
code-golf
base-conversion
conversion
hexadecimal
color
Obsdarek
fonte
fonte
#
; nesse caso, seria apenas um valor inteiro de 32 bits. É legal tomá-lo assim?Respostas:
JavaScript (ES6),
735450 bytes(Salvou alguns bytes graças a @LeakyNun, o desafio editado e a @CraigAyre.)
fonte
eval
vez deparseInt
:s=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
eval
é uma ótima alternativaparseInt
para fins de golfe, obrigado!/../g
. Você pode reduzi-lo ainda mais usandoreplace
overmatch
/ /map
Japonês , 13 bytes
Recebe a entrada como uma string, sem a liderança
#
. Emite o valor rgba como uma matriz.Teste-o
Explicação
Nós assumimos implicitamente a string como entrada via variável
U
."00ff0080"
Divida a sequência em uma matriz de elementos de comprimento 2.
["00","ff","00","80"]
Mapeie a matriz e converta cada elemento de uma cadeia 16 básica em um número decimal. Por causa da seguinte nova linha, essa matriz é atribuída implicitamente à variável
U
.[0,255,0,128]
Pop o último elemento da matriz.
128
Divida por 255.
0.5019607843137255
Empurre o resultado de volta para a
U
saída final implicitamente.[0,255,0,0.5019607843137255]
fonte
PHP , 63 bytes
Saída como matriz
Experimente online!
PHP , 80 bytes
Saída como valor rgba, Entrada sem
#
Experimente online!
PHP , 88 bytes
Saída como valor rgba, Entrada com
#
Experimente online!
fonte
C (gcc) , 139 bytes
Experimente online!
Minha outra tentativa chegou a 145 bytes . Eu não sou um jogador de golfe C, então isso provavelmente poderia ser mais curto.
fonte
05AB1E , 9 bytes
Experimente online!
Pelo menos, temos adeptos como Emigna que costumam usar o bom senso ... (é o que você ganha no golfe o dia todo e começa a produzir coisas como
2ô16öRć255/¸ìR
ಠ_ಠ)fonte
2ôH`žz/)
Geléia ,
1514 bytesExperimente online!
Como funciona
-1 byte graças a @EricTheOutgolfer
fonte
PHP, 72 bytes
A versão de saída do array da Jörg é imbatível; mas há outras opções:
Corra como cano com
-F
.#
não importa, saída csv simplesou 73 bytes (executados com
-R
):74 bytes com os espaços:
não é tão simples, 81 bytes :
fonte
Empilhados ,
474541 bytesExperimente online!
fonte
Excel, 99 bytes
fonte
SmileBASIC, 50 bytes
A cadeia hexadecimal é convertida em um número usando VAL () e o RGBREAD extrai cada byte. #L é uma constante com o valor 256.
O RGBREAD foi projetado para extrair os canais de uma cor ARGB, mas na verdade ele apenas divide um número inteiro de 4 bytes em 4 bytes separados, para que a ordem não seja importante.
fonte
Perl 6 , 42 bytes
Experimente online!
fonte
JS ES2015, 84 bytes
isso é uma função. Execute-o usando
fonte
Python 3 , 62 bytes
Experimente online!
fonte
q / kdb +, 43 bytes
Solução:
Exemplo:
Explicação:
fonte
APL (Dyalog) , 24 bytes
Requer
⎕IO←0
qual é o padrão em muitos sistemas. Solicita entrada como maiúscula sem#
.Experimente online!
⎕D,⎕A
D igits seguido de A lphabet⍞⍳⍨
prompt para entrada de texto (mnemônico: consola com citações) e encontrar a ɩ NDEX de cada carta em que4 2⍴
r eshape como matriz de quatro linhas e duas colunas⍉
transpor (porque a conversão base funciona em colunas)16⊥
avaliar como base dezesseis⊢
rendimento (serve para separar 3 e 16)256÷⍨@3
dividir a 4 th elemento por 256fonte
Python 2 , 54 bytes
Experimente online!
fonte
Yabasic , 96 bytes
Mais uma resposta básica ; Leva a entrada como sequência e sai para o console.
Experimente online!
fonte
?
.Excel VBA, 90 bytes
Uma função de janela imediata anônima do VBE que recebe entrada do intervalo
[A1]
e sai para a janela imediata do VBE.fonte
Vim, 46 bytes
Recebe as entradas sem os
#
retornos e imprime na tela.fonte