Entrada
Un solo código de color hexadecimal de 6 dígitos, mayúscula, sin #
. También puede ser un número entero de 24 bits si lo prefiere.
Salida
El nombre de color HTML más cercano (p red
. Ej. , O dark-salmon
, como se define en https://www.w3schools.com/colors/colors_names.asp o ver más abajo). La distancia se define sumando la diferencia en los canales rojo, verde y azul.
Ejemplos
FF04FE
:magenta
FFFFFF
:white
457CCB
(a medio camino entresteelblue
ydarkslateblue
):steelblue
(redondear hacia arriba )
Reglas
- Se aplican lagunas estándar.
- Se aplica E / S estándar
- Redondee al color con la suma de canales más alta si está a medio camino entre dos colores. Si dos colores tienen la misma suma de canales, envíe el que sea más alto como código hexadecimal: por ejemplo,
red
=#FF0000
= 16711680>blue
=#0000FF
= 256 - Si un código hexadecimal tiene dos nombres (por ejemplo,
grey
ygray
), imprima cualquiera. - Las salidas pueden escribirse en mayúsculas y guionizadas como desee
- Los espacios finales / anteriores / las nuevas líneas están bien
- Debe generar los nombres completos.
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
Colores
Según la sugerencia en los comentarios, aquí están todos los nombres de colores con sus respectivos valores hexadecimales en formato CSV:
Color Name,HEX
Black,#000000
Navy,#000080
DarkBlue,#00008B
MediumBlue,#0000CD
Blue,#0000FF
DarkGreen,#006400
Green,#008000
Teal,#008080
DarkCyan,#008B8B
DeepSkyBlue,#00BFFF
DarkTurquoise,#00CED1
MediumSpringGreen,#00FA9A
Lime,#00FF00
SpringGreen,#00FF7F
Aqua,#00FFFF
Cyan,#00FFFF
MidnightBlue,#191970
DodgerBlue,#1E90FF
LightSeaGreen,#20B2AA
ForestGreen,#228B22
SeaGreen,#2E8B57
DarkSlateGray,#2F4F4F
DarkSlateGrey,#2F4F4F
LimeGreen,#32CD32
MediumSeaGreen,#3CB371
Turquoise,#40E0D0
RoyalBlue,#4169E1
SteelBlue,#4682B4
DarkSlateBlue,#483D8B
MediumTurquoise,#48D1CC
Indigo,#4B0082
DarkOliveGreen,#556B2F
CadetBlue,#5F9EA0
CornflowerBlue,#6495ED
RebeccaPurple,#663399
MediumAquaMarine,#66CDAA
DimGray,#696969
DimGrey,#696969
SlateBlue,#6A5ACD
OliveDrab,#6B8E23
SlateGray,#708090
SlateGrey,#708090
LightSlateGray,#778899
LightSlateGrey,#778899
MediumSlateBlue,#7B68EE
LawnGreen,#7CFC00
Chartreuse,#7FFF00
Aquamarine,#7FFFD4
Maroon,#800000
Purple,#800080
Olive,#808000
Gray,#808080
Grey,#808080
SkyBlue,#87CEEB
LightSkyBlue,#87CEFA
BlueViolet,#8A2BE2
DarkRed,#8B0000
DarkMagenta,#8B008B
SaddleBrown,#8B4513
DarkSeaGreen,#8FBC8F
LightGreen,#90EE90
MediumPurple,#9370DB
DarkViolet,#9400D3
PaleGreen,#98FB98
DarkOrchid,#9932CC
YellowGreen,#9ACD32
Sienna,#A0522D
Brown,#A52A2A
DarkGray,#A9A9A9
DarkGrey,#A9A9A9
LightBlue,#ADD8E6
GreenYellow,#ADFF2F
PaleTurquoise,#AFEEEE
LightSteelBlue,#B0C4DE
PowderBlue,#B0E0E6
FireBrick,#B22222
DarkGoldenRod,#B8860B
MediumOrchid,#BA55D3
RosyBrown,#BC8F8F
DarkKhaki,#BDB76B
Silver,#C0C0C0
MediumVioletRed,#C71585
IndianRed,#CD5C5C
Peru,#CD853F
Chocolate,#D2691E
Tan,#D2B48C
LightGray,#D3D3D3
LightGrey,#D3D3D3
Thistle,#D8BFD8
Orchid,#DA70D6
GoldenRod,#DAA520
PaleVioletRed,#DB7093
Crimson,#DC143C
Gainsboro,#DCDCDC
Plum,#DDA0DD
BurlyWood,#DEB887
LightCyan,#E0FFFF
Lavender,#E6E6FA
DarkSalmon,#E9967A
Violet,#EE82EE
PaleGoldenRod,#EEE8AA
LightCoral,#F08080
Khaki,#F0E68C
AliceBlue,#F0F8FF
HoneyDew,#F0FFF0
Azure,#F0FFFF
SandyBrown,#F4A460
Wheat,#F5DEB3
Beige,#F5F5DC
WhiteSmoke,#F5F5F5
MintCream,#F5FFFA
GhostWhite,#F8F8FF
Salmon,#FA8072
AntiqueWhite,#FAEBD7
Linen,#FAF0E6
LightGoldenRodYellow,#FAFAD2
OldLace,#FDF5E6
Red,#FF0000
Fuchsia,#FF00FF
Magenta,#FF00FF
DeepPink,#FF1493
OrangeRed,#FF4500
Tomato,#FF6347
HotPink,#FF69B4
Coral,#FF7F50
DarkOrange,#FF8C00
LightSalmon,#FFA07A
Orange,#FFA500
LightPink,#FFB6C1
Pink,#FFC0CB
Gold,#FFD700
PeachPuff,#FFDAB9
NavajoWhite,#FFDEAD
Moccasin,#FFE4B5
Bisque,#FFE4C4
MistyRose,#FFE4E1
BlanchedAlmond,#FFEBCD
PapayaWhip,#FFEFD5
LavenderBlush,#FFF0F5
SeaShell,#FFF5EE
Cornsilk,#FFF8DC
LemonChiffon,#FFFACD
FloralWhite,#FFFAF0
Snow,#FFFAFA
Yellow,#FFFF00
LightYellow,#FFFFE0
Ivory,#FFFFF0
White,#FFFFFF
Aqua/Cyan; DarkSlateGray/DarkSlateGrey; DimGray/DimGrey; SlateGray/SlateGrey; LightSlateGray/LightSlateGrey; Gray/Grey; DarkGray/DarkGrey; LightGray/LightGrey; Fuchsia/Magenta
. Solo había filtrado los colores grises duplicados, pero no los otros dos. Así que recibía errores de desfase debido a desajustes en mi cadena y listas de enteros ...>.> Pensé que publicaría esto aquí para evitar que otros cometieran el mismo error que yo.Respuestas:
C # (compilador interactivo de Visual C #) , 231 + 21 = 252 bytes
Explicación:
Por alguna razón, Tio se queja de que el espacio de nombres 'Dibujo' no existe en el espacio de nombres 'Sistema', a pesar de que el proyecto fuente Mono indica que es compatible. Sin embargo, funciona bien en VisualStudio.
EDITAR: ¡aparentemente todavía no se ha implementado en Tio!
Pruébalo en línea!
fuente
Nodo.js , 1488 bytes
Toma la entrada como un entero de 24 bits. Salidas en minúsculas.
Pruébalo en línea!
¿Cómo?
La cadena comprimida tiene 1683 caracteres y se ve así:
Los colores se ordenan de menor a mayor valor. Cada color se codifica como su nombre en minúsculas seguido de la diferencia entre su valor y el valor anterior en base 36 y en mayúsculas:
Comentado
fuente
q=i=>{b=document.createElement
d;b.style.color=i;document.body.appendChild(b);h=getComputedStyle(b).color;y=h.slice(4,-1).split(",").map(e=>e.trim());return h!="rgb(36, 39, 41)"?[y.reduce((a,e)=>a+parseInt(e),0),parseInt(y.map(e=>parseInt(e).toString(16).padStart(2,"0")).join``,16)]:0};a=[];for(i=0,t="0";i<7988090793663851220822006848646;i++,t=i.toString(36)){(!t.match(/\d/g)&&q(t))?a.push([t,...q(t)]):0}
(ten en cuenta quergb(36, 39, 41)
cambia con el ...Jalea ,
1015914bytesPruébalo en línea!
¡Gracias a @Arnauld por una sugerencia que ahorró 41 bytes!
Programa completo Toma el color como un entero de 24 bits como argumento y devuelve el nombre del color.
Explicación
Enlace auxiliar
Nombres de colores. Almacenado usando una cadena comprimida, pero con palabras comunes reemplazadas por caracteres ASCII individuales en el rango de 33 a 64
Enlace principal
Etapa 1: Comience a generar una lista de números de color. Los incrementos entre los números de color se almacenan entre 1 y 3 dígitos de base 249. El incremento se ha multiplicado por 3, convertido a base 249 y luego se ha agregado el número de dígitos menos 1 al dígito menos significativo, antes de invertir el orden de los dígitos.
Etapa 2: termine de generar números de color y busque la entrada
Los colores se invierten antes de comparar porque los colores sin componente rojo (por ejemplo) terminarán como una lista de 2 componentes.
El enlace TIO genera 10 colores aleatorios y muestra la salida, por lo que será diferente cada vez.
fuente
Wolfram Language (Mathematica), 164 bytes
Nota: Esto solo funciona en Mathematica 12.0 debido a un error en versiones anteriores. Esto también significa que no hay un enlace TIO.
Define la función
g
, que toma un entero como entrada. Casos de prueba:Desafortunadamente, se desperdician bastantes bytes al agregar "RebeccaPurple" a la lista integrada de colores, que falta por alguna razón. El resto es bastante sencillo, simplemente clasificamos los colores por su distancia a la entrada, rompiendo los lazos con la suma de los valores del canal y luego el orden absoluto.
fuente
RebeccaPurple
es nuevo (ish) y un homenaje a la hija de Eric Meyer: lists.w3.org/Archives/Public/www-style/2014Jun/0312.html . Lo plantearé como una mejora de características con Mathmatica.JavaScript (Firefox), 1050 bytes
Mostrar fragmento de código
Tercer lenguaje JavaScript en esta pregunta ahora ...
getComputedStyle
siempre devuelve colores enrgb(x, y, z)
forma si estáalpha == 1
en Firefox._
variable contiene la cadena con todos los nombres de colores en el formularioBlackNavyDarkblueMediumblueBlueDarkgreen...White
.Ahorre 11 bytes gracias a Kevin Cruijssen eliminando colores innecesarios. Ahorre ~ 350 bytes gracias a Arnauld al introducir un extraño algoritmo de empaque.
fuente
document.body
ab
insidegetComputedStyle
, lo que le permite eliminar los paréntesis adjuntos.FuchsiaMagenta
yAquaCyan
ambos pueden ser cualquiera de los dos en lugar de ambos, ya que son (al igual queGray/Grey
) los mismos códigos de color.,r
quizás&&r
en su lugar.JavaScript (Node.js) +
color-name
paquete, 259279284259278282299312364bytesPruébalo en línea!
Comentado:
Tuve que
para que require () funcione. No creo que pueda instalar npm en TIO, así que codifiqué el diccionario en el encabezado.
Este paquete contiene las mismas 148 entradas que la página w3schools, los nombres están en minúsculas. No tengo idea de quién lo creó y cuándo lo encontré mientras busqué en Google. Hay un paquete Debian para él, así que supongo que es más antiguo que esta pregunta.
[Editar: reducción del tercer tamaño / revisión general]
[Editar 5º / corrección: esa versión tenía 282 bytes pero le faltaba el desempate por valor RGB. No creo que pueda arreglarlo y luego jugarlo más pequeño que este, así que eliminé ese código de la publicación.]
Esta vez, reescribí la mayor parte del código. Siento que es tan diferente de antes, que no tiene sentido mantener el historial en la publicación.
@Shaggy me salvó 4 bytes de la última versión al omitir paréntesis alrededor de los parámetros de la función de flecha única. Ahora, hay 6 de esos, así que básicamente debo 12 bytes de agradecimiento.
Pasé de construir dictos / listas manualmente a usar
map
y enfilter
todas partes, lo que permitió / provocó mucha reestructuración. También encontré algunas situaciones más donde podría asignar variables más tarde.[Editar: cuarto encogimiento, volver a las raíces]
Un minuto después de descartar el historial (arriba), me di cuenta de mi error al decir eso.
Apliqué las lecciones aprendidas hasta ahora al antiguo código, y vi que el segundo tipo () no tenía sentido. Así que en este momento, ese código está adelante por 4 bytes.
[Editar: 4.1th: DUH! todo tipo no tenía sentido. -19 bytes más]
[Editar: 5ta iteración, creciendo pero ahora (con suerte) correcta]
@Lukas Lang señaló que mi código no era correcto en los casos en que la suma del canal estaba vinculada. Tuve la impresión equivocada de que esto nunca ocurre.
Para solucionarlo, necesitaba completar los arreglos
S
con pares [RGBarray, name] en lugar de solo nombres. De esta manera, la ordenación predeterminada de la matriz completa el trabajo.[Editar: sexta reducción - regalo de un reino superior]
@Shaggy obtiene todo el crédito por esta ronda.
.reverse()[0]
es.pop()
. Obviamente ... Además, la conversión de tipo implícita hace que el('0x'+c)
trabajo en lugar deparseInt(c,16)
. Y si obtiene las paréntesis correctas, CADA variable puede asignarse al primer uso. Esta vez, eso fueW
yp
.fuente
e8fcf8
: ambosAzure
yMintCream
tienen una distancia de18
ese color y una suma de canales de750
. Por lo tanto, el resultado debería serMintCream
, mientras este código vuelveAzure
.05AB1E , 1175 bytes
Eso llevó bastante tiempo ... 139 colores para crear una cadena de ...>.>
Toma la entrada como enteros de 24 bits para guardar 1 byte.
Pruébelo en línea o verifique algunos casos de prueba más . (Ambos están ligeramente modificados para tomar cadenas hexadecimales como entrada, ya que es más fácil de probar).
Explicación:
Primero generamos todas las cadenas de color:
Luego generamos una lista de diferencias hacia adelante (deltas) entre cada valor entero de los colores:
Luego determinamos el índice del valor más cercano a la entrada (en términos de diferencias absolutas entre cada color RGB, y aquí pensé que podría usar builtin
.x
... ), determinamos el índice de este entero más cercano en la lista, y lo usamos para indexar en las cadenas de colores que creamos anteriormente:Vea este consejo mío de 05AB1E (las cuatro secciones) para comprender por qué:
.•ŒRǝ...Ð:8•
es"chiffon lavenderblush papayawhip ... cyan turquoise steelblue"
“ƒÏª©–°0‡—...‡Ž0ŠÛ؉„¸“
es"black navy dark0 blue ... light0 yellow ivory white"
•zÑÄ...C±;•
es199...791
•O褕
es1579378
•zÑÄ...C±;••O褕в
es[128,11,66,...,224,16,15]
fuente