Trouver le nom de couleur HTML le plus proche

13

Contribution

Un code couleur hexadécimal à 6 chiffres, majuscule, sans #. Peut également être un entier 24 bits si vous préférez.

Production

Le nom de couleur HTML le plus proche (par exemple red, ou dark-salmon, tel que défini comme https://www.w3schools.com/colors/colors_names.asp ou voir ci-dessous). La distance est définie en additionnant la différence entre les canaux rouge, vert et bleu.

Exemples

FF04FE: magenta

FFFFFF: white

457CCB( à mi - chemin entre steelblueet darkslateblue): steelblue(rond jusqu'à )

Règles

  • Des échappatoires standard s'appliquent.
  • Les E / S standard s'appliquent
  • Arrondissez à la couleur avec la somme de canaux plus élevée si à mi-chemin entre deux couleurs. Si deux couleurs ont la même somme de canaux, sortez celle qui est la plus élevée sous forme de code hexadécimal: par exemple red= #FF0000= 16711680> blue= #0000FF= 256
  • Si un code hexadécimal a deux noms (par exemple greyet gray), sortez l'un ou l'autre.
  • Les sorties peuvent être capitalisées et coupées comme vous le souhaitez
  • Les espaces de fin / précédents / les nouvelles lignes sont très bien
  • Vous devez afficher les noms en entier.
  • C'est le , donc la réponse la plus courte en octets l'emporte.

Couleurs

Selon la suggestion dans les commentaires, voici tous les noms de couleur avec les valeurs hexadécimales respectives au format 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
Geza Kerecsenyi
la source
1
Connexes (essentiellement la tâche opposée)
Arnauld
2
La turquoise (# 40E0D0) n'est-elle pas la couleur la plus proche de # 40FFEA avec une somme de différences de ? (vs pour Aqua et Aquamarine)855785
Arnauld
1
ne devrait pas être arrondi en bleu acier au lieu de bleu foncé?
tsh
Pour tous ceux qui font bien ce défi, voici les couleurs en double , vous pouvez choisir l' un des: Aqua/Cyan; DarkSlateGray/DarkSlateGrey; DimGray/DimGrey; SlateGray/SlateGrey; LightSlateGray/LightSlateGrey; Gray/Grey; DarkGray/DarkGrey; LightGray/LightGrey; Fuchsia/Magenta. Je n'avais filtré que les couleurs grises dupliquées, mais pas les deux autres. Donc, je recevais des erreurs de décalage en raison de non-concordances dans ma liste de chaînes et d'entiers.
Kevin Cruijssen

Réponses:

17

C # (Visual C # Interactive Compiler) , 231 + 21 = 252 octets

s=>Color.FromArgb(Convert.ToInt32(s,16));f=s=>Enum.GetNames(typeof(KnownColor)).Select(x=>Color.FromName(x)).Where(x=>!x.IsSystemColor&x.A>254).OrderBy(x=>Math.Abs(x.R-C(s).R)+Math.Abs(x.G-C(s).G)+Math.Abs(x.B-C(s).B)).First().Name

Explication:

using System.Drawing; //System library that handles Colors in C#

C=s=>Color.FromArgb(Convert.ToInt32(s,16));        //helper method. receives a hex string and returns it's Color

f=s=>Enum.GetNames(typeof(KnownColor))             //collection of color names from the System.Drawing.KnownColor enum
         .Select(x=>Color.FromName(x))             //convert the color names to Colors
             .Where(x=>!x.IsSystemColor&x.A>254)   //filter out unwanted colors
                 .OrderBy(x=>Math.Abs(x.R-C(s).R)  //order by increasing distance
                            +Math.Abs(x.G-C(s).G)
                            +Math.Abs(x.B-C(s).B)) 
                     .First().Name                 //return the closest color's name

Pour une raison quelconque, Tio se plaint que l'espace de noms 'Drawing' n'existe pas dans l'espace de noms 'System', malgré le projet source Mono déclarant qu'il est compatible. Cela fonctionne bien dans VisualStudio.

EDIT: apparemment, il n'a pas encore été implémenté dans Tio!

Essayez-le en ligne!

Innat3
la source
7
C # out-golfing les langues de golf pour une fois. Il y a une première ...
Darrel Hoffman
2
Je suis surpris que Javascript n'ait aucun moyen d'accéder à la liste mais C # le fait
JollyJoker
1
@JollyJoker Cette réponse Node.js importe un package contenant les données.
Arnauld
14

Node.js , 1488 octets

Prend l'entrée comme un entier de 24 bits. Sorties en minuscules.

v=>(require('zlib').inflateRawSync(Buffer('TVRbm6o4EPxLE27CowziDOiIV+bwFkkrWUPCBBg/9tdvLurZFzGX7uqqrs6Z4fr2xvHv5OYEy9uZjRC3QOjY6r/oaH4X+ugqAXiWI/P1M28AzGxQPWHuBBkB6PrbpCPmyZs+GEb5Mwrag/O9sEn7TlJ+NSnCr4TRFk7z/+25mc7l5i0lnF6bQef6Pn6tiCBXkHo12yxTpo96wCbEqfbxRUjoB7tcxfvn0fJ4POgyeoYHuEo8IafINaY59co8exT1uJ+Uq/hVsn8KUykmzDTqzin6AcD8n/nb3Sur3nDSD9cmegUf5hHlhF6F6ySOviwY/bWwi/UO1ZiA4baIj1EtJL8wcbf8gspLJJyhrnE3yo6BExUbmx3/jLjFSis4pitCW83I/SrTVyEo3uQGiEh8Rpvi80U8+OMXVrXnTnTKowf7Z7i/fFsxfOdWx9l6XjdYDhLGHrxwvvkL75fqKwRHoS3RtahFsDEl5U8TRMudBbXrVP/8UsFgcOMP4xwJBPmlsVeLr8AH7J56TAiDsxR3nmTvRulHf4LotDQJzQptlsgyeFTxeUr1bYuwT/cdZlbyoDog0wRZN5TMy3wCpgS3PCNn0VPgHM927smgBvvvwhpeCRc/7GYEOq0KE2TjZ3mkIf6avPiOLd+nVVAQvXfiTmxr/ez9QlVvJa1vaLc01K6CEeBSkLDyfcvGVulk6zcp+slU5HrZUt++NfhG0Tote8p+QXpRVtgYy1mpGZb+h3Ye5npxWKQdyDF0dnUjaqEbHZzmswHzRbl4KKmmIt+ehob2A4OgLP0HfpI5r+Lm8VEzfaEgL9jVkra94GV8uGLK+7OQArnrTcfGVo3Z4TxKNt2FICgLtwbKTPYs8hj+Ba4kCedLO0eYtYK7u31p8wdlFZrWPdFz13ZdDQpmTpgHRobc32BGa+Nc92vWCA4TgTtKEvzvKCHtMSdWPd8LonsDeEBbd3YGegUvL+4NHaBvxQ2KlvKhloBbVEXXRvSDOfOCuLClOX78hflAf0YwJ6uZmiUOvKqshM86rSvQHzUNRD2rKsP2XYu1zOcPc89c/UZ2lN/cU6jYcPWoAYnyZBAtHoRfxY0Y9DGKCsPWizbWuPqq8xlae5mqPLS222Vgdk3Wz8hEVwtdlJd8d4Drphsvl+2HeuPxP8IQ2HutUO9LTzkKyjPtFbG0Vf2flOHgcGaY1w0Qg0JQoprR4QmryG6/eTZPqd434ZuazL5RtKtEv2LKlbf8yEDFKQtdLoInB/WyKR4Gtuq5uM+tSvu1KdougpD+Cjktza30Pw','base64'))+'').replace(m=/([a-z]+)([^a-z]+)/g,(_,s,d)=>[e=0,8,16].map(x=>e+=Math.abs((v>>x&255)-(t>>x&255)),t+=parseInt(d,36))|e>m||(o=s,m=e),t=0)&&o

Essayez-le en ligne!

Comment?

La chaîne compressée comporte 1683 caractères et ressemble à ceci:

"black0navy3KdarkblueBmediumblue1Ublue1EdarkgreenJK1green5J4(…)lightyellow68ivoryGwhiteF"

Les couleurs sont classées de la valeur la plus basse à la plus élevée. Chaque couleur est codée comme son nom en minuscules suivi de la différence entre sa valeur et la valeur précédente en base-36 et en majuscules:

black[0]        | 0x000000 + 0     --> 0x000000
navy[3K]        | 0x000000 + 128   --> 0x000080
darkblue[B]     | 0x000080 + 11    --> 0x00008B
mediumblue[1U]  | 0x00008B + 66    --> 0x0000CD
blue[1E]        | 0x0000CD + 50    --> 0x0000FF
darkgreen[JK1]  | 0x0000FF + 25345 --> 0x006400
green[5J4]      | 0x006400 + 7168  --> 0x008000
...             | ...
lightyellow[68] | 0xFFFF00 + 224   --> 0xFFFFE0
ivory[G]        | 0xFFFFE0 + 16    --> 0xFFFFF0
white[F]        | 0xFFFFF0 + 15    --> 0xFFFFFF

Commenté

v =>                            // v = input
  ( require('zlib')             // using zlib,
    .inflateRawSync(            // inflate the
      Buffer(                   //   buffer obtained by
        'TVRbm(…)Pw',           //     converting this string
        'base64'                //     encoded in base-64
      )                         //
    ) + ''                      // and coerce it back to a string
  ).replace(                    // on which we invoke replace():
    m =                         //   initialize m to a non-numeric value
    /([a-z]+)([^a-z]+)/g,       //   for each color encoded as ...
    (_, s, d) =>                //   ... s = name, d = delta in base-36:
      [e = 0, 8, 16]            //     using x = 0 for blue, 8 for green and 16 for red,
      .map(x =>                 //     compute the error e:
        e +=                    //       add to e:
          Math.abs(             //         the absolute value of the difference between
            (v >> x & 255) -    //           the component of the target color
            (t >> x & 255)      //           and the component of the current color
          ),                    //
        t += parseInt(d, 36)    //       start by adding the delta to t
      ) | e > m ||              //     end of map(); if e is less than or equal to m:
        (o = s, m = e),         //       update o to s and m to e
    t = 0                       //   start with t = 0
  ) && o                        // end of replace(); return o
Arnauld
la source
Pourquoi ne pas compresser vos codes avec la chaîne de données ensemble, puis les évaluer? Aviez-vous essayé cela?
tsh
@tsh Le code JS ne se comprime pas assez bien pour compenser la surcharge induite par le codage base64. Ce serait donc plus long. Il pourrait être réécrit pour le rendre plus facile à dégonfler (par exemple en déroulant la boucle de la carte) mais je doute que ce soit suffisant.
Arnauld
Ne pourriez-vous pas générer vous-même les noms des couleurs? Il y a probablement une façon meilleure / plus rapide de le faire, mais vous pouvez simplement le forcer brutalement: q=i=>{b=document.createElementd ;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}(notez que cela rgb(36, 39, 41)change avec le ...
Geza Kerecsenyi
... feuille de style, celle-ci fonctionne avec StackExchange - c'est juste la couleur de police par défaut). De plus, je ne sais pas si cela compte, car cela prendrait littéralement des jours, mais je l'ai testé à petite échelle et je peux voir que cela fonctionne (essayez de remplacer 7988090793663851220822006848646 par 39999)
Geza Kerecsenyi
9

Gelée , 1015 914 octets

“¥.⁻ḲU3ŒẆȯ§.eḊC¤ŀ"}Ʋ59£Uŀ'⁶ɠıṇȥLcṆɓ?^¢Ỵɠ.ȮẆẆḊqʠu½ỊƑfĠ⁴ µ¥ɓƭÑUC½ṁUĿẆṃ⁹S/÷Ɓɗ>ṭ"»Ḳ33r64¤,Ọy“µṂFŀƲOḌẇȤạ2œxṾk,E.LẸpḄ2s⁵Ṛç¦ṆkAẋ=çw©ḌĊẒƤm`;ṄȧṄİɦbṠṆṛ⁴Ḟ[CƊėQẏƑ<:⁾Þḍ?çⱮ3ƈṗ¬!7Hẏywœ⁽Ẉ¤ṾƈpHṗ(⁾ƲḢdƲḃ'¦ṇ9ẏP¡ċ⁻ȤẒṬf§®ṬẒpJÞẒẸṪÄƊhḊḃ7ʠ%ƈėc+ġȦı©ḄO⁸ṗ:WṠß@Ä|ż_g¹Ʋ®[*ẹ5¡Ẹßė¶~[ȷ'ȧẊṖZẋ¦ẉ7Ġ⁽ė⁽ƁLP`²¶⁶* Ġv|$ṭⱮẋ_ƭø¦Ẇ-*ɓɼhCUṙƭƭƓS7Ø⁵¤³¢Ʋẉ!§ḟƇṣḟṛḳṠƬ4ẓḢTḌZżƇȦQxw}ḃçṣȮv⁷ȤĊẏyNỵʠÄ⁸hLġị³TİọȧfÞȤTO&ṡ°⁼`WẹạẇḂvðFmż]ɦo½ƓṂḟȯ#Æ⁺T)ṃç=ḣṆø⁽Wpʂqṫ&⁷¶S®¢ð:\ṚMĖḌ½⁽_ạ⁵]Xlȷg¿£⁺x0ṁo8ẒṛżøuɲẈ®§Bṡr:ċ³ḷb|Mku¬V°ḟƲ!ɦɠ4¬>ḷ^XḶɼ5[ṇƑȮ.XȮƙẎbḊÐþFæṁoOṗ⁺mṪ-&ƊṅƑḋ$!`€ɓḥƤ¡ɗbH⁻ḃÄ⁵!Ñėḅƈḳm⁴ḳcÐⱮ⁷ỤḍġḷȥṀSĖ»Ḳ
“⁸¢!İƝ\8¢[V⁸¢Ñ"ĠƙḶ-Æ⁷⁾Æ⁵¢⁸¢ƙhLṂS×®Ẓ©Aḅ¦ṚÆ&nj£ÇØ¿waþM=ÆḂḌ¢³(Ñḷx¦DẊ¢Aẓ©ḋ¬!ƁV  ṾÐẉœ¦2Ä¢⁼C®⁶ẇ£ḋṀ¤çẠÐȧIæḌH€5ẋ¥®⁹µ⁻£⁴⁸¢AƇ¢⁸¢£*ç-Ụz¬>ƈ£ʋ¢^ạṭ(ÇṪĠ¤Çŀ¬ÇḞ¢ṪĠÐCȥṖÞ¦ø}×⁹YÐƬAÇ×CÆævÇ#©ḥƙ£sVṀṙ¤ỊAÞtỤ¦AǬ⁶ʠ¤⁼ƈµ£ŒÞ¿§Œ÷~2~Ðɲċ×⁻¤SƤÐ}Z¦Fƙ°¹£Ḣ©£Ṁx£⁹j£Ƒs¤ɓ8¬_ḶØz°®ʂƬÐḢ@¢ẉ€¦ỴA¢Ä8gß-Ė⁸¿zṛ¤mGKÄœ>jµ\ạ¥>R¢ƤÐƤœⱮpµỴI¤Œ¤a<[Ɱa]ṠŒɲB"'(?ŀÆȦ6ȯœ|Dy¿1€ƤØ-WXßm€v¤Uнµẋ¦iœg€Ḥ£0-‘©ṛ®Ḣ¤⁺;$%¡3¤®Ð¿Ḋḅ249:3ÄŻ,b⁹UạN,§ʋ@€/MṪị¢

Essayez-le en ligne!

Merci à @Arnauld pour une suggestion qui a permis d'économiser 41 octets!

Programme complet. Prend la couleur comme entier 24 bits comme argument et renvoie le nom de la couleur.

Explication

Lien d'aide

Noms de couleurs. Stocké à l'aide d'une chaîne compressée, mais avec des mots courants remplacés par des caractères ASCII uniques compris entre 33 et 64

“¥...»                  | Compressed string "blue brown coral..."
      Ḳ                 | Split at spaces
       33r64¤,          | Pair the numbers 33 to 64 with these words [[33,34,35,...],["blue","brown","coral",...]]
              Ọ         | Convert the numbers to Unicode characters [["!",'"',"#",...],["blue","brown","coral",...]]
               y“µ...»  | Translate the compressed string "black navy %! ..." using the mapping generated above
                      Ḳ | Split at spaces

Lien principal

Étape 1: Commencez à générer une liste de numéros de couleur. Les incréments entre les numéros de couleur sont stockés entre 1 et 3 chiffres de base 249. L'incrément a été multiplié par 3, converti en base 249, puis le nombre de chiffres moins 1 a été ajouté au chiffre le moins significatif, avant d'inverser l'ordre des chiffres.

“⁸...‘©                | Copy compressed integers 136,1,33,198,... to register
       ṛ               | Right value (will yield value of the following):
                 ¤®Ð¿  | - While the register is non-empty, do the following, collecting values as we go:
        ®Ḣ¤            |   - Take the first value from the list held in the register, popping it from the list, x
              %¡3      |   - Repeat the following (x mod 3 times)
           ⁺;$         |     - Concatenate the first value from the list held in the register, popping it from the list
                     Ḋ | Remove the first item (will be 'None')

Étape 2: terminer la génération des numéros de couleur et rechercher l'entrée

ḅ249                     | Convert from base 249 to integer
    :3                   | Integer divide by 3
      Ä                  | Cumulative sum: 128,139,205,255,25600,...
       Ż                 | Prepend zero
        ,                | Pair with input
         b⁹              | Convert to base 256: [[0],[128],[139],[205],[255],[100,0],...], [input in base 256]
           U             | Reverse order of innermost lists (so RGB becomes BGR, GB becomes BG and B remains as B); this is because colours with no red component will be a list with only two members, and colours with only blue will just have one member
                ʋ@€/     | Reduce using the following as a dyad for each; effectively calls the following once for each colour with the reversed base-256 colour as left argument and the reversed base-256 input as right
            ạ            | - Absolute difference of the colour and the output of stage 1
             N           | Negate
              ,          | - Pair with the colour
               §         |   - Sum each of these
                    M    | Indices of maximum
                     Ṫ   | Tail (will be the index of the largest colour value)
                      ị¢ | Index into helper link

Les couleurs sont inversées avant la comparaison car les couleurs sans composant rouge (par exemple) se retrouveront comme une liste à 2 composants.

Le lien TIO génère 10 couleurs aléatoires et affiche la sortie sera donc différente à chaque fois.

Nick Kennedy
la source
L'entrée peut être de 24 bits. J'ai déjà dit que les E / S standard s'appliquent.
Geza Kerecsenyi
@GezaKerecsenyi Merci. Vous avez également dit qu'il devait s'agir d'une chaîne hexadécimale à six chiffres, il serait donc bon de clarifier la question.
Nick Kennedy
je×4+nje×3+njen
Voici du code JS pour illustrer ce que je veux dire. (Il s'agit d'une version fixe avec encodage + décodage. Désolé pour les messages multiples.)
Arnauld
@Arnauld merci. J'avais besoin d'utiliser la base 249. En bref, j'ai multiplié les incréments par 3, converti en base 249, inversé l'ordre des chiffres et ajouté la longueur 1 au premier chiffre. Ceux-ci sont ensuite encodés en caractères Jelly. Pour le décodage, je pop le premier chiffre, puis pop un autre (premier chiffre mod 3) chiffres et les concaténer (inverser l'ordre dans le processus). Je répète jusqu'à ce qu'il ne reste plus de chiffres. Il est ensuite reconverti de la base 249 en entier. La raison de 249 est que 250, le chiffre le moins significatif n'est pas nécessairement un multiple de 3.
Nick Kennedy
3

Wolfram Language (Mathematica), 164 octets

Remarque: cela ne fonctionne que dans Mathematica 12.0 en raison d'un bogue dans les versions précédentes. Cela signifie également qu'il n'y a pas de lien TIO.

g[c_]:=Last@Keys@SortBy[Round[255List@@@<|"HTML"~ColorData~"ColorRules"~Join~{"RebeccaPurple"->RGBColor@"#639"}|>],{-Total@Abs[IntegerDigits[c,256,3]-#]&,Total,#&}]

Définit la fonction g, qui prend un entier en entrée. Cas de test:

AssociationMap[g, {327581, 3483113, 2820178, 4358965,
  2058772, 13569770, 8698378, 2897368, 3896382, 12856883}]

(* <|
  327581 -> "MediumSpringGreen",
  3483113 -> "RoyalBlue", 
  2820178 -> "MidnightBlue",
  4358965 -> "DarkOliveGreen", 
  2058772 -> "ForestGreen", 
  13569770 -> "Magenta",
  8698378 -> "Olive",
  2897368 -> "RoyalBlue",
  3896382 -> "DarkOliveGreen",
  12856883 -> "Brown"
|> *)

Malheureusement, pas mal d'octets sont gaspillés en ajoutant "RebeccaPurple" à la liste de couleurs intégrée, ce qui manque pour une raison quelconque. Le reste est assez simple, nous trions simplement les couleurs par leur distance à l'entrée, rompant les liens avec la somme des valeurs de canal, puis l'ordre absolu.

Lukas Lang
la source
1
RebeccaPurpleest nouveau (ish) et un hommage à la fille d'Eric Meyer: lists.w3.org/Archives/Public/www-style/2014Jun/0312.html . Je vais le soulever comme une amélioration de fonctionnalité avec Mathmatica.
Robin Whittleton
2

JavaScript (Firefox), 1050 octets

c=>(b=document.body,_.match(/.[a-z]*/g).map(t=>getComputedStyle(b,b.style.color=t).color.match(/\d+/g).map((v,i)=>s+=Math.abs((c>>16-8*i&255)-v),s=0)|m>=s&&(m=s,r=t),r=m=c),r)
_='BlackNavy}~x~B2e}|G^ETeU}cy@Deeps,}t`xs*LimeS*Cy@Midnight~Dodg9~{s:GFo^1|S:|}s]JLime|xs:|T`RoyU~Steel~}s]~xt`Indigo}o6|Cadet~C?nfl59~Rebeccap<xa;DimJS]~O6drabS]J{s]Jxs]~Lawn|Chart^useA;Maro4P<O6GrayG^yS,{s,B2ev[}0}m+Saddleb>}s:|{|xp<}v[7|}?/YZ|SiEnaB>}J{~G^EyZ7t`{1eel~P5d9~Fi^brick}g_x?/Rosyb>}khakiSilv9xv[0Indi@0P9uChoco]T@{JT81leOr/G_7v[0Crims4GaQsb?oP2mBurlywood{cy@3}s=V[7g_{c?UKhakiAlice~H4eydewAzu^S@dyb>Wh:tBeigeWXsmokeMQtc^amGho1wXS=AntiquewXLQE{g_yZOldlaceRedM+Deep.Or-0TomatoHot.C?U}?-{s=Or-{.PQkGoldP:chpuffNavaj5XMoccasQBisqueMi1yroseBl@ched=dPapayaw8p3b2shS:shellC?nsilkLem4c8ff4Fl?UwXSn5YZ{yZIv?yWX~b2e}Dark|g^E{LightxMedium`urquoise_oldErod^re]late[ioletZell5X8teUalQinJg^yEen@an?or>r5n=Um4<urple;quamarQe:ea9er8hi7PUe6live5ow4on3LavEd92lu1st0^d/c8d.pQk-@ge,ky~+agEta*prQg|';for(i of'*+,-./0123456789:;<=>?@EJQUXZ[]^_`x{|}~')with(_.split(i))_=join(pop())

Troisième langage JavaScript dans cette question maintenant ...

getComputedStylerenvoie toujours les couleurs sous rgb(x, y, z)forme si alpha == 1sur Firefox.

_La variable contient la chaîne avec tous les noms de couleurs du formulaire BlackNavyDarkblueMediumblueBlueDarkgreen...White.

Économisez 11 octets grâce à Kevin Cruijssen en supprimant les couleurs inutiles. Économisez ~ 350 octets grâce à Arnauld en introduisant un étrange algorithme d'emballage.

tsh
la source
Vous devriez économiser plus de 350 octets en RegPack'ing votre chaîne, ou peut-être le code entier, cette fois. ;)
Arnauld
Enregistrez quelques octets en les affectant document.bodyà l' bintérieur getComputedStyle, ce qui vous permet de supprimer les parenthèses englobantes.
Shaggy
FuchsiaMagentaet AquaCyanpeuvent tous deux être l'un des deux au lieu des deux, car ils sont (tout comme les Gray/Grey) les mêmes codes de couleur.
Kevin Cruijssen
@Shaggy mais les parenthèses sont toujours requises par ,rpeut
tsh
@tsh, utilisez &&rplutôt.
Shaggy
2

JavaScript (Node.js) + color-namepackage, 259 279 284 259 278 282 299 312 364 octets

c=>{w=[]
K=Object.keys
for(x in d=require('color-name')){(w[W=(p=i=>Math.abs(d[x][2-i]-(255&("0x"+c)>>8*i)))(2)+p(1)+p(0)]=w[W]||[]).push(x)}S=[]
for(s of r=w[K(w)[0]]){(S[z=(W=d[s])[0]+W[1]+W[2]]=S[z]||[]).push([d[s],s])}return S[K(S).pop()].sort().pop()[1]}

Essayez-le en ligne!

Commenté:

c=>{w=[]                      // build dict of arrays of names, by color distance:
K=Object.keys
for(x in d=require('color-name')){
  (w[W=
      (p=i=>Math.abs(d[x][2-i]-(255&("0x"+c)>>8*i)))(2) + p(1) +p(0)
    ] = w[W]||[]).push(x)
}S=[]                         // distances were ordered by Object.keys()
for(s of r=w[K(w)[0]]){       // build dict of [[RGB, name]+] by channel sum for distance ties:
  (S[ z= (W=d[s])[0] + W[1] + W[2] ]= S[z]||[]).push([d[s],s])
} return S[ K(S).pop()        // highest channel sum
          ].sort().pop()[1]}  // [name of] highest RGB

j'ai dû

npm install color-name

pour que require () fonctionne. Je ne pense pas pouvoir installer npm sur TIO, j'ai donc codé en dur le dictionnaire dans l'en-tête.

Ce package contient les mêmes 148 entrées que la page w3schools, les noms sont en minuscules. Je ne sais pas qui l'a créé et quand, je l'ai trouvé en cherchant sur Google. Il y a un paquet Debian pour cela, donc je suppose qu'il est plus ancien que cette question.

[Édition: troisième réduction de taille / révision majeure]
[Édition 5e / correction: cette version avait 282 octets mais il manquait le bris d'égalité par la valeur RVB. Je ne pense pas que je puisse réparer celui-ci, puis le jouer au golf plus petit que celui-ci, j'ai donc supprimé ce code de la publication.]

Cette fois, j'ai réécrit la plupart du code. Je pense que c'est tellement différent d'avant, ça n'a pas de sens de garder l'histoire dans le post.

@Shaggy m'a sauvé 4 octets de la dernière version en omettant les parenthèses autour des paramètres de la fonction flèche unique. Maintenant, il y en a 6, donc en gros je dois 12 octets de remerciements.

Je suis passé de la construction manuelle de dict / listes à l'utilisation mapet filterpartout, ce qui a permis / déclenché beaucoup de restructurations. J'ai également trouvé d'autres situations où je pourrais attribuer des variables plus tard.

[Edit: 4ème rétrécissement, retour aux sources]

Moins d'une minute après avoir rejeté l'histoire (ci-dessus), j'ai réalisé mon erreur en disant cela.
J'ai appliqué les leçons apprises jusqu'à présent à l'ancien code, et j'ai vu que la deuxième sorte () était inutile. Donc en ce moment, ce code est en avance de 4 octets.
[Edit: 4.1ème: DUH! toutes sortes étaient inutiles. -19 octets de plus]

[Edit: 5ème itération, en croissance mais maintenant (espérons-le) correct]

@Lukas Lang a souligné que mon code n'était pas correct dans les cas où la somme des canaux était liée. J'ai eu la mauvaise impression que cela ne se produit jamais.
Pour y remédier, j'avais besoin de remplir les tableaux Savec des paires [RGBarray, nom] au lieu de simplement des noms. De cette façon, le tri par défaut des tableaux termine le travail.

[Modifier: 6e réduction - cadeau d'un royaume supérieur]

@Shaggy obtient tout le crédit pour ce tour. .reverse()[0]est .pop(). Évidemment ... En outre, la conversion de type implicite fait ('0x'+c)fonctionner au lieu de parseInt(c,16). Et si vous obtenez les bonnes parenthèses, CHAQUE variable peut être affectée à la première utilisation. Cette fois, c'était Wet p.

Paul Thomann
la source
12
Si vous avez un package requis qui n'est pas une partie standard de la langue, il doit être dans l'en-tête de la langue en haut de votre entrée (c'est-à-dire JavaScript (Node.js) + nom-couleur). Cela signifie qu'il est en concurrence avec d'autres entrées utilisant le même package, mais pas directement avec d'autres entrées JavaScript (Node.js).
Nick Kennedy
Ça a du sens. Merci!
Paul Thomann
3
Si une fonction de flèche n'a qu'un seul paramètre, elle n'a pas besoin d'être placée entre parenthèses.
Shaggy
1
À moins que je ne me trompe, le code échoue pour les cas où la deuxième règle de bris d'égalité est nécessaire, tels que e8fcf8: les deux Azureet MintCreamont une distance de 18cette couleur, et une somme de canaux de 750. Ainsi, le résultat devrait être MintCream, tandis que ce code retourne Azure.
Lukas Lang
1
Quelques ajustements rapides de mon téléphone: tio.run/…
Shaggy
1

05AB1E , 1175 octets

.•ŒRǝJÖ¤|DÕGø∊ŸγÜuÕפJÓΩaĀhºΔè₆ìkh¥ù§¸β?|"qтy¥Œ›ιM?z*Ω3¿ƒLò·¡ËÌóñD#Ë‰в††α½ÅÎëLpÄäÍEáyø‡§*ßtÓñ7тÜöãô±‘§—ÄGfΔ½~10'–ßaÔ´?ç"&$&¾¬ÍTʒ}M‰8βÔŽÙûQ[мvαн'YW:ΘÌiнœ+ĀβWŬŽø%ð°¤]γθγçkÌã©Ð:8•
#`“ƒÏª©–°0‡—–í0‡—‡—–°0ˆ¨ˆ¨¤Æl–°ÿ•³0¤Ð0‡—–°ÿ–í0Ž¹0ˆ¨ë¿Ž¹0ˆ¨Ü„Àš0‡—·¡r0‡—‡Ž0í™0ˆ¨ï×0ˆ¨í™0ˆ¨–°s0Ž¦0°¯ë¿0ˆ¨–í0í™0ˆ¨ ÿïˆ0‡—–Í0‡—–°s0Ž¦0‡—–íÿ ÿ–°0Ê£0ˆ¨ ÿ0‡—ÃÅ0žç0‡—Ôî0´Ò–í0Ü„0›Ðæá0°¯ s0Ž¦0‡—Ê£ÿ s0Ž¦0°¯¦º0Ž¦0°¯–ís0Ž¦0‡—į0ˆ¨œëre0€ÅÜ„0›Ð ÿ´ÒÊ£°¯¤Ð0‡—‡Ž0¤Ð0‡—‡—ÿ–°0†¾–°m0î±a»Ïÿ0ŽÌ–°0í™0ˆ¨‡Ž0ˆ¨–í0´Ò–°ÿæ§0ˆ¨–°ÿŠÛ0ˆ¨ ÿŽÌ–°0°¯‡Ž0‡—ˆ¨0ŠÛæ§ÿ‡Ž0–Í0‡—¼ì0‡—ŠÄ0Ñ´–°0ž®0»³–íÿ ÿ0ŽÌ–°ÿ‹ß–íÿ0†¾•‹0†¾¾ç¨ËÇ⇎0°¯€Œÿ ÿž®0»³æ§ÿ0†¾ ÿÆŠÿ ÿ ÿ0–œ‡Žÿ ÿ–°0ÇÝ ÿæ§0ž®0»³‡Ž0Í€ ÿ¿í0‡—Æàÿ ÿǨ0ŽÌÍÍ ÿ„¸0³«¼Õ0¥â·ä0„¸ÇÝ°Š0„¸ƒ£n‡Ž0ž®0»³0ŠÛ„Ï0ÕÚ†¾ m0î±a•³0™Å›È0†¾æž…ß0™ÅÍ€–°0›È‡Ž0ÇݛȇŽ0™Å™Åˆ° p0‚Ìÿ ÿ0„¸ ÿ ÿ ÿ0šÓ ÿ ÿ ÿí™0¬•ÃÅ0»»ËÃÿÄ‚0„¸œÒŠÛ‡Ž0ŠÛ؉„¸“„0 K#•zÑĪåð≠K¯&u+UhĆõ;Éðf.ã₂=нH,ª@O¶ü˜ˆ₂Ɔ¥2Œ’Ktθu1Sнdw΀(#ç¹ü‹U¹³αh+8R∍±æ”ÇKë₆ßõk₃¿θòĀηú¿ζвî!Vs©₂™CÖ.∍JнαθWÀhzαÐé3¾¯|ë¡×°'βâá—P‘Å_uë_§₃P∊%ý/=i]¥5óO₃^E‘[∞₆ć:βU=J€¦†˜X'Žāìd4Ā’δ‹a°∊›ÊÐƶoÂö mвæÁƵ¨¼Yü“à §‚₂¾¤н7Þ9úÂuœ¿®jF™SΛ¬ìr½ƒxßU‘Lβ7≠°oι—ĀÅýÆgBÐγö™α₆©vÝeEXεò₁Uт3ÈĀ(wº4{ºö쾫Â
åUøò${J#₃O<!øN”;GÑéÈfm ½™×γäJǝõ¥àÐι)λÓ:α–ù?6¦¨·ã™ζÙ4ÍHd›-Iž|ï¦{Ö9ÊàÛ§¥–Σÿ%ć8ùćYáþǝC±;••O褕в.¥εI‚₄S₁β+₁∦`αO}Wkè

Cela a pris un bon moment .. 139 couleurs pour créer une chaîne de ..>.>

Prend l'entrée sous forme d'entiers 24 bits pour enregistrer 1 octet.

Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires . (Les deux sont légèrement modifiés pour prendre à la place des chaînes hexadécimales en entrée, car il est plus facile à tester.)

Explication:

Nous générons d'abord toutes les chaînes de couleurs:

.•ŒRǝJÖ¤|DÕGø∊ŸγÜuÕפJÓΩaĀhºΔè₆ìkh¥ù§¸β?|"qтy¥Œ›ιM?z*Ω3¿ƒLò·¡ËÌóñD#Ë‰в††α½ÅÎëLpÄäÍEáyø‡§*ßtÓñ7тÜöãô±‘§—ÄGfΔ½~10'–ßaÔ´?ç"&$&¾¬ÍTʒ}M8βÔŽÙûQvαн'YW:ΘÌiнœ+ĀβWŬŽø%ð°¤]γθγçkÌã©Ð:8•
                '# Push compressed string "chiffon lavenderblush papayawhip blanchedalmond misty bisque moccasin navajo puff beige azure dew khaki violet lavender cyan burly plum boro crimson violet orchid tle violet khaki rosy orchid turquoise sienna orchid violet dle violet maroon drab cadet indigo turquoise turquoise cyan turquoise steelblue"
  #              # Split this string on spaces
   `             # Push each string separately to the stack
    “ƒÏª©–°0‡—–í0‡—‡—–°0ˆ¨ˆ¨¤Æl–°ÿ•³0¤Ð0‡—–°ÿ–í0Ž¹0ˆ¨ë¿Ž¹0ˆ¨Ü„Àš0‡—·¡r0‡—‡Ž0í™0ˆ¨ï×0ˆ¨í™0ˆ¨–°s0Ž¦0°¯ë¿0ˆ¨–í0í™0ˆ¨ ÿïˆ0‡—–Í0‡—–°s0Ž¦0‡—–íÿ ÿ–°0Ê£0ˆ¨ ÿ0‡—ÃÅ0žç0‡—Ôî0´Ò–í0Ü„0›Ðæá0°¯ s0Ž¦0‡—Ê£ÿ s0Ž¦0°¯¦º0Ž¦0°¯–ís0Ž¦0‡—į0ˆ¨œëre0€ÅÜ„0›Ð ÿ´ÒÊ£°¯¤Ð0‡—‡Ž0¤Ð0‡—‡—ÿ–°0†¾–°m0î±a»Ïÿ0ŽÌ–°0í™0ˆ¨‡Ž0ˆ¨–í0´Ò–°ÿæ§0ˆ¨–°ÿŠÛ0ˆ¨ ÿŽÌ–°0°¯‡Ž0‡—ˆ¨0ŠÛæ§ÿ‡Ž0–Í0‡—¼ì0‡—ŠÄ0Ñ´–°0ž®0»³–íÿ ÿ0ŽÌ–°ÿ‹ß–íÿ0†¾•‹0†¾¾ç¨ËÇ⇎0°¯€Œÿ ÿž®0»³æ§ÿ0†¾ ÿÆŠÿ ÿ ÿ0–œ‡Žÿ ÿ–°0ÇÝ ÿæ§0ž®0»³‡Ž0Í€ ÿ¿í0‡—Æàÿ ÿǨ0ŽÌÍÍ ÿ„¸0³«¼Õ0¥â·ä0„¸ÇÝ°Š0„¸ƒ£n‡Ž0ž®0»³0ŠÛ„Ï0ÕÚ†¾ m0î±a•³0™Å›È0†¾æž…ß0™ÅÍ€–°0›È‡Ž0ÇݛȇŽ0™Å™Åˆ° p0‚Ìÿ ÿ0„¸ ÿ ÿ ÿ0šÓ ÿ ÿ ÿí™0¬•ÃÅ0»»ËÃÿÄ‚0„¸œÒŠÛ‡Ž0ŠÛ؉„¸“
                 # Push dictionary string "black navy dark0 blue medium0 blue blue dark0 green green teal darkÿ deep0 sky0 blue darkÿ medium0 spring0 green lime spring0 green aqua midnight0 blue dodger0 blue light0 sea0 green forest0 green sea0 green darks0 late0 grey lime0 green medium0 sea0 green ÿ royal0 blue steel0 blue darks0 late0 blue mediumÿ ÿ dark0 olive0 green ÿ0 blue corn0 flower0 blue rebecca0 purple medium0 aqua0 marine dim0 grey s0 late0 blue oliveÿ s0 late0 grey lights0 late0 grey mediums0 late0 blue lawn0 green chartre0 use aqua0 marine ÿ purple olive grey sky0 blue light0 sky0 blue blueÿ dark0 red darkm0 agenta sadÿ0 brown dark0 sea0 green light0 green medium0 purple darkÿ pale0 green darkÿ yellow0 green ÿ brown dark0 grey light0 blue green0 yellow paleÿ light0 steel0 blue powder0 blue fire0 brick dark0 golden0 rod mediumÿ ÿ0 brown darkÿ silver mediumÿ0 red indian0 red peru chocolate tan light0 grey thisÿ ÿ golden0 rod paleÿ0 red ÿ gainsÿ ÿ ÿ0 wood lightÿ ÿ dark0 salmon ÿ pale0 golden0 rod light0 coral ÿ alice0 blue honeyÿ ÿ sandy0 brown wheat ÿ white0 smoke mint0 cream ghost0 white salmon antique0 white linen light0 golden0 rod0 yellow old0 lace red m0 agenta deep0 pink orange0 red tomato hot0 pink coral dark0 orange light0 salmon orange light0 pink pink gold p0 eachÿ ÿ0 white ÿ ÿ ÿ0 rose ÿ ÿ ÿ sea0 shell corn0 silk lemonÿ floral0 white snow yellow light0 yellow ivory white"
                 # Where all `ÿ` are automatically filled with the strings on the stack
      0 K       # Remove all "0 " from this string
          #      # Split the colors on spaces

Ensuite, nous générons une liste de différences directes (deltas) entre chaque valeur entière des couleurs:

zÑĪåð≠K¯&u+UhĆõ;Éðf.ã₂=нH@O¶ü˜ˆ₂Ɔ¥2Œ’Ktθu1Sнdw΀(#ç¹ü‹U¹³αh+8R∍±æ”ÇKë₆ßõk₃¿θòĀηú¿ζвî!Vs©₂™CÖ.∍JнαθWÀhzαÐé3¾¯|ë¡×°'βâá—P‘Å_uë_§₃P∊%ý/=i]¥5óO₃^E‘[∞₆ć:βU=J€¦†˜X'Žāìd4Ā’δ‹a°∊›ÊÐƶoÂö mвæÁƵ¨¼Yü“à §‚₂¾¤н7Þ9úÂuœ¿®jFSΛ¬ìr½ƒxßULβ7≠°oι—ĀÅýÆgBÐγö™α₆©vÝeEXεò₁Uт3ÈĀ(wº4{ºö쾫Â
åUøò${J#₃O<!øN”;GÑéÈfm ½™×γäJǝõ¥àÐι)λÓ:α–ù?6¦¨·ã™ζÙ4ÍHd›-Iž|ï¦{Ö9ÊàÛ§¥–Σÿ%ć8ùćYáþǝC±;•
                 # Push compressed integer 199435987809271424589508700952987345999804200072375133628254343692108407476588500135573281889031649216370100759626064238727072489415325130552011943231372407222964404763401980843968947657212497212027480199840300219769136432328209307347145119976644138878553798683794751309798787883572249589074597119540397124774131357786254535108429605287982569524294490533853150008626425797260994727581899181000813165364870780739754491720041566206327597753141661846275821649635815830948299823383964329384068145070200611196756567681968774265025511020508722510627341700584849057763591073777679021648285012447092662591008342199952284925672007531443930335828262810273697784303468071652124201899153101970895280421720006686387730894329535589566680885995478455871002071758051626349351150223272343920758114226776399859623393233070539000599481915926111317851112136858026586181791
O褕            # Push compressed integer 1579378
     в           # Convert the larger integer to Base-1579378 as list: [128,11,66,50,25345,7168,128,2827,13428,3794,11209,1126,127,128,1579377,358287,139691,120952,786485,50168,228835,648767,273759,35089,334035,113367,37953,143030,682669,668529,325453,105900,39441,170943,61796,78678,324205,460809,254037,103186,197376,212,44,128,32640,128,478827,15,154856,54302,139,17544,292732,78337,164427,36856,326341,14132,105062,361723,317437,294783,274237,9801,126911,54768,7176,82236,418793,118728,145852,75740,198997,414917,411351,10467,320479,19310,73543,322565,110846,13386,52083,41897,51360,50177,71594,149368,386811,176000,322676,26044,104406,26124,4723,1777,15,238689,80467,5929,25,2565,194821,100211,27493,1295,2540,195348,68122,255,5012,12397,7751,1645,5532,3248,5242,1158,4545,2570,5685,953,1012,1544,15,29,1772,1032,288,1273,750,497,35,10,1030,224,16,15]
               # Undelta this list: [0,128,139,205,255,25600,32768,32896,35723,49151,52945,64154,65280,65407,65535,1644912,2003199,2142890,2263842,3050327,3100495,3329330,3978097,4251856,4286945,4620980,4734347,4772300,4915330,5597999,6266528,6591981,6697881,6737322,6908265,6970061,7048739,7372944,7833753,8087790,8190976,8388352,8388564,8388608,8388736,8421376,8421504,8900331,8900346,9055202,9109504,9109643,9127187,9419919,9498256,9662683,9699539,10025880,10040012,10145074,10506797,10824234,11119017,11393254,11403055,11529966,11584734,11591910,11674146,12092939,12211667,12357519,12433259,12632256,13047173,13458524,13468991,13789470,13808780,13882323,14204888,14315734,14329120,14381203,14423100,14474460,14524637,14596231,14745599,15132410,15308410,15631086,15657130,15761536,15787660,15792383,15794160,15794175,16032864,16113331,16119260,16119285,16121850,16316671,16416882,16444375,16445670,16448210,16643558,16711680,16711935,16716947,16729344,16737095,16738740,16744272,16747520,16752762,16753920,16758465,16761035,16766720,16767673,16768685,16770229,16770244,16770273,16772045,16773077,16773365,16774638,16775388,16775885,16775920,16775930,16776960,16777184,16777200,16777215]

Ensuite, nous déterminons l'indice de la valeur la plus proche de l'entrée (en termes de différences absolues entre chaque couleur RVB - et ici, je pensais pouvoir utiliser la fonction intégrée .x.. ), déterminer l'indice de cet entier le plus proche dans la liste, et l'utiliser pour index dans les chaînes de couleurs que nous avons créées plus tôt:

ε                # Map each integer to:
 I              #  Pair it with the input-integer
   S            #  Push 1000, split to digits: [1,0,0,0]
     ₁β          #  Converted from base-256 to an integer: 16777216
       +         #  Add that to both integers in the pair
        ₁в       #  Convert both integers to base-256 as list (we now have [1,R,G,B])
          €¦     #  Remove the leading 1
            `    #  Push both lists to the stack
             α   #  Get the absolute difference between the lists (at the same indices)
              O  #  Sum these differences
}W               # After the map: get the minimum (without popping the list itself)
  k              # Get the index of this minimum in the list
   è             # And use it to index into the string-color list
                 # (after which the result is output implicitly)

Consultez cette astuce 05AB1E (les quatre sections) pour comprendre pourquoi:

  • .•ŒRǝ...Ð:8• est "chiffon lavenderblush papayawhip ... cyan turquoise steelblue"
  • “ƒÏª©–°0‡—...‡Ž0ŠÛ؉„¸“ est "black navy dark0 blue ... light0 yellow ivory white"
  • •zÑÄ...C±;• est 199...791
  • •O褕 est 1579378
  • •zÑÄ...C±;••O褕в est [128,11,66,...,224,16,15]
Kevin Cruijssen
la source
1
Cette. Est le programme 05AB1E le plus long. Que j'ai jamais vu.
connectyourcharger
@connectyourcharger Oui, de loin le plus gros que j'ai écrit, battant mon précédent plus grand programme de 176 octets. ;)
Kevin Cruijssen
1
Vous avez quand même gagné mon vote positif :)
connectyourcharger le