El mundo del arte está lleno de color, pero el mundo de la red es aún más completo que el mundo del arte de diferentes colores y sus representaciones. Es por eso que necesitamos saber cómo convertir un tipo de formato de color a otro.
El desafío es evidente:
Escriba un programa / función que convierta un código HEX dado ( #00ff0080
por ejemplo) a RGBA (como rgba(0, 255, 0, 0.5)
).
Reglas:
- Las bibliotecas externas / incorporadas para convertir HEX a RGBA no están permitidas. Sin embargo, los reemplazos de sintaxis y jQuery como ese son aceptables.
- Se aplican las reglas estándar de entrada / salida.
- El formato del alfa puede ser entre (1 == 100%) u otro (100 == 100%) que no es realmente importante.
- La salida es flexible , siempre que devuelva los 4 valores convertidos (como una cadena, matriz, lista, su elección).
- Puede optar por tomar la entrada sin el
#
al principio. Por lo tanto, puede tomar la entrada como#RRGGBBAA
oRRGGBBAA
. Puede suponer que el código hexadecimal (excluyendo el#
) siempre tendrá 8 caracteres de longitud. - Debe dividir todos los valores por 255, incluido el alfa. La precisión decimal mínima (para el alfa será de 2 decimales).
Casos de prueba
Input: 00ff0080
Output: 0, 255, 0, 0.5
Puntuación
code-golf , gana el código con la menor cantidad de bytes.
code-golf
base-conversion
conversion
hexadecimal
color
Obsdarek
fuente
fuente
#
, en cuyo caso sería solo un valor entero de 32 bits. ¿Es legal tomarlo así?Respuestas:
JavaScript (ES6),
735450 bytes(Ahorré algunos bytes gracias a @LeakyNun, el desafío editado, y @CraigAyre).
fuente
eval
lugar deparseInt
:s=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
eval
es una gran alternativaparseInt
para jugar al golf, ¡gracias!/../g
. Es posible que pueda reducirlo aún más usandoreplace
Overmatch
/map
Japt , 13 bytes
Toma la entrada como una cadena, sin el inicio
#
. Emite el valor rgba como una matriz.Pruébalo
Explicación
Tomamos implícitamente la cadena como entrada a través de la variable
U
."00ff0080"
Divida la cadena en una matriz de elementos de longitud 2.
["00","ff","00","80"]
Asigne sobre la matriz y convierta cada elemento de una cadena base 16 en un número decimal. Debido a la siguiente nueva línea, esa matriz se asigna implícitamente a la variable
U
.[0,255,0,128]
Pop el último elemento de la matriz.
128
Dividirlo por 255.
0.5019607843137255
Empuje el resultado de nuevo a la
U
salida implícita de la matriz final.[0,255,0,0.5019607843137255]
fuente
PHP , 63 bytes
Salida como matriz
Pruébalo en línea!
PHP , 80 bytes
Salida como valor rgba, entrada sin
#
Pruébalo en línea!
PHP , 88 bytes
Salida como valor rgba, entrada con
#
Pruébalo en línea!
fuente
C (gcc) , 139 bytes
Pruébalo en línea!
Mi otro intento registró 145 bytes . No soy un gran jugador de golf C, por lo que esto podría ser más corto
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Al menos tenemos partidarios como Emigna para usar a menudo algo de sentido común ... (eso es lo que obtienes para jugar golf todo el día y luego comienzas a producir cosas como
2ô16öRć255/¸ìR
ಠ_ಠ)fuente
2ôH`žz/)
Jalea ,
1514 bytesPruébalo en línea!
Cómo funciona
-1 byte gracias a @EricTheOutgolfer
fuente
PHP, 72 bytes
La versión de salida de la matriz de Jörg es inmejorable; Pero hay otras opciones:
Ejecutar como tubería con
-F
.#
no importa, salida csv simpleo 73 bytes (ejecutar con
-R
):74 bytes con los espacios:
no tan simple, 81 bytes :
fuente
Apilado ,
474541 bytesPruébalo en línea!
fuente
Excel, 99 bytes
fuente
SmileBASIC, 50 bytes
La cadena hexadecimal se convierte en un número usando VAL (), luego RGBREAD extrae cada byte. #L es una constante con el valor 256.
RGBREAD está diseñado para extraer los canales de un color ARGB, pero realmente divide un entero de 4 bytes en 4 bytes separados, por lo que el orden no importa.
fuente
Perl 6 , 42 bytes
Pruébalo en línea!
fuente
JS ES2015, 84 bytes
Esta es una función. Ejecútalo usando
fuente
Python 3 , 62 bytes
Pruébalo en línea!
fuente
q / kdb +, 43 bytes
Solución:
Ejemplo:
Explicación:
fuente
APL (Dyalog) , 24 bytes
Requiere
⎕IO←0
cuál es el predeterminado en muchos sistemas. Solicita entrada como mayúscula sin#
.Pruébalo en línea!
⎕D,⎕A
D igits seguido por A lphabet⍞⍳⍨
solicite la entrada de texto (mnemónico: consola con cita) y encuentre el índice ɩ de cada letra en ese4 2⍴
r forma como matriz de cuatro filas y dos columnas⍉
transposición (porque la conversión base funciona en columnas)16⊥
evaluar como base dieciséis⊢
rendimiento (sirve para separar 3 y 16)256÷⍨@3
dividir el 4º elemento por 256fuente
Python 2 , 54 bytes
Pruébalo en línea!
fuente
Yabasic , 96 bytes
Otra respuesta básica más ; Toma entrada como cadena y salidas a la consola.
Pruébalo en línea!
fuente
?
.Excel VBA, 90 bytes
Una función de ventana inmediata anónima de VBE que toma la entrada del rango
[A1]
y las salidas a la ventana inmediata de VBE.fuente
Vim, 46 bytes
Toma entrada sin el
#
y regresa imprimiendo en la pantalla.fuente