En CSS, los colores se pueden especificar mediante un "triplete hexadecimal": un número hexadecimal de tres bytes (seis dígitos) donde cada byte representa los componentes rojo, verde o azul del color. Por ejemplo, #FF0000
es completamente rojo y es equivalente a rgb(255, 0, 0)
.
Los colores también se pueden representar mediante la notación abreviada que utiliza tres dígitos hexadecimales. La taquigrafía se expande a la forma de seis dígitos duplicando cada dígito. Por ejemplo, se #ABC
convierte #AABBCC
.
Como hay menos dígitos en la taquigrafía hexadecimal, se pueden representar menos colores.
El reto
Escriba un programa o función que tome un código de color hexadecimal de seis dígitos y genere el código de color de tres dígitos más cercano.
Aquí hay un ejemplo:
- Código hexadecimal de entrada: # 28a086
- Componente rojo
- 0x28 = 40 (decimal)
- 0x22 = 34
- 0x33 = 51
- 0x22 está más cerca, por lo que el primer dígito del código de color acortado es 2
- Componente verde
- 0xa0 = 160
- 0x99 = 153
- 0xaa = 170
- 0x99 está más cerca, entonces el segundo dígito es 9
- Componente azul
- 0x86 = 134
- 0x77 = 119
- 0x88 = 136
- 0x88 está más cerca, entonces el tercer dígito es 8
- El código de color acortado es # 298 (que se expande a # 229988)
Su programa o función debe aceptar como entrada un código de color hexadecimal de seis dígitos antepuesto #
y generar un código de color de tres dígitos antepuesto #
.
Ejemplos
- # FF0000 → # F00
- # 00FF00 → # 0F0
- # D913C4 → # D1C
- # C0DD39 → # BD3
- # 28A086 → # 298
- # C0CF6F → # BC7
Tanteo
Este es un desafío de código de golf, por lo que gana la respuesta más corta en su idioma. Aplican reglas estándar.
fuente
#
agregar nada al desafío.Respuestas:
JavaScript (ES6), 55 bytes
Pruébalo en línea!
fuente
05AB1E , 13 bytes
Pruébalo en línea!
¿Cómo?
fuente
ć
decapitar " Esa es otra forma de describirlo, jajaja. : D Bonita respuesta, +1 de mi parte.Japt , 16 bytes
Pruébalo o ejecuta todos los casos de prueba
fuente
8088 Assembly, IBM PC DOS,
5958 bytesListado sin ensamblar:
PC independiente ejecutable de DOS. La entrada es a través de la línea de comando, la salida es a la consola.
La mayor parte de la longitud del código está manejando la conversión de la E / S de cadena hexadecimal requerida en bytes, ya que el código de máquina DOS / x86 no tiene incorporados para eso.
E / S:
Descargue y pruebe HEXCLR.COM , o
xxd
hexdump:fuente
Retina 0.8.2 , 88 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Empareje los dígitos hexadecimales.
Convierta cada dígito por separado a decimal.
Convierta cada dígito decimal a unario.
Termine la conversión hexadecimal del par de dígitos.
Suma 8 y divide entre 17.
Convertir de nuevo a hexadecimal.
fuente
PHP ,
7567 bytesPruébalo en línea! o verificar todos los casos de prueba .
fuente
Python 3 ,
727068 bytesPruébalo en línea!
Esta es una respuesta original del puerto de Grzegorz Oledzkis , que le ayudé a jugar golf.
Dos características de Python 3 nos ayudan a guardar bytes:
-2 bytes gracias a Jonathan Allan
fuente
(int(x[i:i+2],16)+8)//17
salva 2Jalea ,
2019 bytesPruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 81 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
6348 bytesPruébalo en línea!
-15 bytes gracias a attinat ! Sustitución
StringJoin
con<>
y comprimiendo la sintaxis.RGBColor@#
convierte la cadena de entrada a un color del formularioRGBColor[r, g, b]
con tres argumentos de punto flotante en el rango 0..1.Round[15 List @@ %]
multiplica la lista de tres argumentos por 15 y los redondea al entero más cercano. Ahora tenemos una lista de tres valores enteros correspondientes a los tres dígitos hexadecimales deseados.%~IntegerString~16
convierte esta lista de tres enteros en una lista de tres cadenas hexadecimales de un carácter cada una."#"<>%
antepone un#
personaje y une todos estos personajes juntos.fuente
MathGolf ,
1912 bytesSalida como lista de caracteres. Si esto no está permitido,
y
se debe agregar un seguimiento adicional para unir la lista de caracteres a una cadena.-7 bytes gracias a @maxb , ya que miré más allá de un incorporado (
2ô_2<\1>]
a2/
).Pruébalo en línea.
Explicación:
fuente
Ruby (2.5.3),
45,44, 42 bytesEDITAR: guardado un byte porque no necesitamos un grupo de caracteres para el segundo carácter en la expresión regular (inspirado en la respuesta de Neil)
EDIT 2: se guardaron 2 bytes porque la sintaxis lambda dash rocket no necesita corchetes alrededor del argumento
fuente
-p
bandera y otros 2 usando en$&
lugar de un argumento dentro del bloque: tio.run/##KypNqvz/…Python 2 (
10910197858374 bytes)La "distancia más cercana" se maneja por división por 17 y redondeo.
Mejoras:
-8 bytes usando el
int(...+.5)
truco en lugar deint(round(...))
-4 bytes utilizando la comprensión de la lista en lugar de
map()
-1 byte mediante codificación
#
en la salida (gracias @movatica)-10 bytes al no utilizar
re.findall("..",...)
a favor de un empalme explícito de cadenas-2 bytes al no usar la comprensión de la lista, sino una expresión de generador en línea en
join
(gracias @movatica)-1 byte al no empalmar el
:7
final de la parte azul-9 bytes por mejor iteración sobre colores, es decir, iteración sobre índices, no caracteres reales (gracias @movatica)
fuente
'#'
lugar dex[0]
.''.join(...)
, ya que también maneja una expresión generadora. Simplemente elimine[]
y guarde 2 bytes más :)range(1,6,2)
es aún mejor con[1,3,5]
lambda x:'#'+''.join(hex((int(x[i:i+2],16)+8)/17)[2:]for i in[1,3,5])
-> 69 bytesPerl 5
-p
,3534 bytes@nwellnhof guardó un byte
Pruébalo en línea!
Lee desde STDIN, reemplaza cada par de elementos que no están
#
con el carácter único apropiado usando el método de división por 17 para encontrar el más cercano, luego, de manera implícita, genera (-p
) el resultado.fuente
Python 3, 67 bytes
fuente
Rojo , 103 bytes
Pruébalo en línea!
Resultó que la versión actual de Red de Linux no tiene una implementación de la
hex-to-rgb
función, por eso hago la conversión de base "manualmente" :)Esto funciona bien en la consola Red GUI en Windows:
Rojo , 94 bytes
fuente
Perl 6 , 35 bytes
Pruébalo en línea!
fuente
Carbón de leña , 22 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
R , 57 bytes
Pruébalo en línea!
fuente
Pyth , 20 bytes
Pruébalo aquí
NOTA: En caso de que el enlace anterior genere un
ImportError
, vaya aquí ; Actualmente hay un error en la página "oficial", y esta es una solución temporal de Maltysen . Este enlace puede dejar de funcionar después de que se corrija el oficial.fuente
Adelante (gforth) , 87 bytes
Pruébalo en línea!
Explicación
#
)#
0x11
) para obtener el valor más cercano para el componente acortadoExplicación del Código
fuente
Stax , 13 bytes
Ejecutar y depurarlo
fuente
K4 , 39 bytes
Solución:
Explicación:
Utiliza la misma estrategia que muchas de estas respuestas (es decir, agregue 8, divida por 17):
Extra:
"#",{x@*16\:a?&/a:abs(17*!16)-16/:x?y}[.Q.nA]@/:3 2#1_
- mi idea original para 54 bytesfuente