Entrada
Um único código de cores hexadecimal de 6 dígitos, maiúscula, sem #
. Também pode ser um número inteiro de 24 bits, se você preferir.
Resultado
O nome da cor HTML mais próximo (por exemplo red
, ou dark-salmon
, conforme definido em https://www.w3schools.com/colors/colors_names.asp ou veja abaixo). A distância é definida somando a diferença nos canais vermelho, verde e azul.
Exemplos
FF04FE
:magenta
FFFFFF
:white
457CCB
(a meio caminho entresteelblue
edarkslateblue
):steelblue
(arredondar para cima )
Regras
- Aplicam-se brechas padrão.
- E / S padrão se aplica
- Arredonde para a cor com a soma mais alta do canal, a meio caminho entre duas cores. Se duas cores tiverem a mesma soma de canal, imprima a que for mais alta como um código hexadecimal: por exemplo
red
=#FF0000
= 16711680>blue
=#0000FF
= 256 - Se um código hexadecimal tiver dois nomes (por exemplo,
grey
egray
), faça a saída também. - As saídas podem ser capitalizadas e hifenizadas como você quiser
- À direita / espaços anteriores / novas linhas estão corretos
- Você deve exibir os nomes na íntegra.
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Cores
Conforme sugestão nos comentários, aqui estão todos os nomes de cores com os respectivos valores hexadecimais no 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
. Eu havia filtrado apenas as cores cinza duplicadas, mas não as outras duas. Então, eu estava recebendo erros de compensação devido a incompatibilidades nas minhas listas de cadeias e de números inteiros.Respostas:
C # (Compilador interativo do Visual C #) , 231 + 21 = 252 bytes
Explicação:
Por alguma razão, Tio reclama que o espaço para nome 'Desenho' não existe no espaço para nome 'Sistema', apesar do projeto de origem Mono afirmar que é compatível. Porém, funciona bem no VisualStudio.
EDIT: aparentemente ainda não foi implementado no Tio!
Experimente online!
fonte
Node.js , 1488 bytes
Recebe a entrada como um número inteiro de 24 bits. Saídas em minúsculas.
Experimente online!
Quão?
A cadeia compactada tem 1683 caracteres e é assim:
As cores são ordenadas do menor para o maior valor. Cada cor é codificada como seu nome em letras minúsculas, seguida pela diferença entre seu valor e o valor anterior na base 36 e em letras maiúsculas:
Comentado
fonte
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}
(observe que issorgb(36, 39, 41)
muda com o ...Gelatina ,
1015914bytesExperimente online!
Obrigado a @Arnauld por uma sugestão que salvou 41 bytes!
Programa completo. Pega a cor como inteiro de 24 bits como argumento e retorna o nome da cor.
Explicação
Link auxiliar
Nomes de cores. Armazenado usando sequência compactada, mas com palavras comuns substituídas por caracteres ASCII únicos no intervalo de 33 a 64
Link principal
Etapa 1: comece a gerar a lista de números de cores. Os incrementos entre os números de cores são armazenados entre 1 e 3 dígitos base 249. O incremento foi multiplicado por 3, convertido na base 249 e, em seguida, o número de dígitos menos 1 foi adicionado ao dígito menos significativo, antes de reverter a ordem dos dígitos.
Etapa 2: terminar de gerar números de cores e procurar a entrada
As cores são revertidas antes da comparação porque as cores sem componente vermelho (por exemplo) acabam como uma lista de 2 componentes.
O link TIO gera 10 cores aleatórias e mostra a saída, portanto será diferente a cada vez.
fonte
Wolfram Language (Mathematica), 164 bytes
Nota: Isso funciona apenas no Mathematica 12.0 devido a um erro nas versões anteriores. Isso também significa que não há link TIO.
Define a função
g
, que recebe um número inteiro como entrada. Casos de teste:Infelizmente, são desperdiçados alguns bytes ao adicionar "RebeccaPurple" à lista interna de cores, que está ausente por algum motivo. O resto é bem direto, apenas classificamos as cores de acordo com a distância em relação à entrada, rompendo laços com a soma dos valores do canal e depois com a ordem absoluta.
fonte
RebeccaPurple
é novo (ish) e uma homenagem à filha de Eric Meyer: lists.w3.org/Archives/Public/www-style/2014Jun/0312.html . Eu o elevarei como um aprimoramento de recursos com o Mathmatica.JavaScript (Firefox), 1050 bytes
Mostrar snippet de código
Terceiro idioma JavaScript nesta pergunta agora ...
getComputedStyle
sempre retorna cores norgb(x, y, z)
formulário se estiveralpha == 1
no Firefox._
A variável mantém a string com todos os nomes de cores no formulárioBlackNavyDarkblueMediumblueBlueDarkgreen...White
.Economize 11 bytes graças a Kevin Cruijssen removendo cores desnecessárias. Economize ~ 350 bytes graças ao Arnauld, introduzindo um algoritmo de empacotamento estranho.
fonte
document.body
ab
dentrogetComputedStyle
, permitindo remover os parênteses.FuchsiaMagenta
eAquaCyan
ambos podem ser um dos dois em vez de ambos, pois são (exatamente comoGray/Grey
) os mesmos códigos de cores.,r
talvez&&r
vez disso.JavaScript (Node.js) +
color-name
pacote, 259279284259278282299312364bytesExperimente online!
Comentado:
Eu precisei
para que o require () funcione. Acho que não posso instalar o NPM no TIO, então codifiquei o dicionário no cabeçalho.
Este pacote contém as mesmas 148 entradas da página w3schools. Os nomes são minúsculos. Eu não tenho idéia de quem o criou e quando, eu o encontrei enquanto pesquisava no Google. Existe um pacote Debian para ele, então eu suponho que seja mais antigo que esta pergunta.
[Editar: terceira redução de tamanho / revisão principal]
[Editar 5ª / correção: essa versão tinha 282 bytes, mas estava faltando o tiebreak pelo valor RGB. Acho que não posso consertá-lo e depois jogá-lo menor que este, então removi esse código da postagem.]
Desta vez, reescrevi a maior parte do código. Eu sinto que é tão diferente de antes, não faz sentido manter a história no post.
O @Shaggy me salvou 4 bytes da última versão, omitindo parênteses em torno dos parâmetros de função de seta única. Agora, existem 6 desses, então basicamente devo 12 bytes de agradecimento.
Eu mudei da construção de dictos / listas manualmente para usar
map
e emfilter
qualquer lugar, o que permitiu / levou a muita reestruturação. Eu também encontrei mais algumas situações nas quais eu poderia atribuir variáveis mais tarde.[Editar: 4º encolhendo, retorne às raízes]
Um minuto depois de descartar a história (acima), percebi meu erro ao dizer isso.
Apliquei as lições aprendidas até o momento no código antigo e vi que o segundo tipo () era inútil. Então, agora, esse código está adiantado em 4 bytes.
[Edit: 4.1th: DUH! todos os tipos eram inúteis. -19 mais bytes]
[Editar: 5ª iteração, crescendo, mas agora (espero) correta]
@Lukas Lang apontou que meu código não estava correto nos casos em que a soma do canal estava vinculada. Tive a impressão errada de que isso nunca ocorre.
Para consertar, eu precisava preencher as matrizes
S
com pares [RGBarray, nome] em vez de apenas nomes. Dessa forma, a classificação padrão da matriz conclui o trabalho.[Editar: 6ª redução - presente de um reino superior]
@Shaggy recebe todo o crédito para esta rodada.
.reverse()[0]
é.pop()
. Obviamente ... Além disso, a conversão implícita de tipos faz('0x'+c)
funcionar em vez deparseInt(c,16)
. E se você acertar os parênteses, TODAS as variáveis podem ser atribuídas no primeiro uso. Desta vez, isso foiW
ep
.fonte
e8fcf8
: ambosAzure
eMintCream
tenham uma distância18
dessa cor e uma soma de canal de750
. Assim, o resultado deve serMintCream
, enquanto esse código retornaAzure
.05AB1E , 1175 bytes
Demorou um pouco .. 139 cores para criar uma série de ..>.>
Leva a entrada como números inteiros de 24 bits para salvar 1 byte.
Experimente online ou verifique mais alguns casos de teste . (Ambas são levemente modificadas para usar seqüências hexadecimais como entrada, pois é mais fácil testar.)
Explicação:
Primeiro, geramos todas as seqüências de cores:
Em seguida, geramos uma lista de diferenças diretas (deltas) entre cada valor inteiro das cores:
Em seguida, determinamos o índice do valor mais próximo da entrada (em termos de diferenças absolutas entre cada cor RGB - e aqui pensei que poderia usar o builtin
.x
.. ), determinamos o índice desse número inteiro mais próximo na lista e usamos isso para indexar nas seqüências de cores que criamos anteriormente:Veja esta dica 05AB1E (todas as quatro seções) para entender o porquê:
.•ŒRǝ...Ð:8•
é"chiffon lavenderblush papayawhip ... cyan turquoise steelblue"
“ƒÏª©–°0‡—...‡Ž0ŠÛ؉„¸“
é"black navy dark0 blue ... light0 yellow ivory white"
•zÑÄ...C±;•
é199...791
•O褕
é1579378
•zÑÄ...C±;••O褕в
é[128,11,66,...,224,16,15]
fonte