Tìm tên màu HTML gần nhất


13

Đầu vào

Một mã màu 6 chữ số hex đơn, chữ in hoa, không có #. Cũng có thể là số nguyên 24 bit nếu bạn thích.

Đầu ra

Tên màu HTML gần nhất (ví dụ: redhoặc dark-salmon, như được định nghĩa là https://www.w3schools.com/colors/colors_names.asp hoặc xem bên dưới). Khoảng cách được xác định bằng cách tổng hợp sự khác biệt trong các kênh màu đỏ, xanh lá cây và xanh dương.

Ví dụ

FF04FE: magenta

FFFFFF: white

457CCB(giữa chừng steelbluedarkslateblue): steelblue(làm tròn lên )

Quy tắc

  • Tiêu chuẩn áp dụng.
  • Áp dụng I / O tiêu chuẩn
  • Làm tròn đến màu với tổng kênh cao hơn nếu ở giữa hai màu. Nếu hai màu có cùng một tổng kênh, xuất ra màu cao hơn dưới dạng mã hex: eg red= #FF0000= 16711680> blue= #0000FF= 256
  • Nếu một mã hex có hai tên (ví dụ greygray), hãy xuất một trong hai.
  • Đầu ra có thể được viết hoa và gạch nối theo cách bạn muốn
  • Trailing / không gian trước / dòng mới là tốt
  • Bạn phải xuất tên đầy đủ.
  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.

Màu sắc

Theo đề xuất trong các nhận xét, đây là tất cả các tên màu có giá trị hex tương ứng ở định dạng 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

1
Liên quan (về cơ bản là nhiệm vụ ngược lại)
Arnauld

2
5785

1
Không nên làm tròn bằng thép thay vì darksleetblue?
tsh

Đối với bất kỳ ai khác thực hiện thử thách này, đây là các màu trùng lặp mà bạn có thể chọn một trong : Aqua/Cyan; DarkSlateGray/DarkSlateGrey; DimGray/DimGrey; SlateGray/SlateGrey; LightSlateGray/LightSlateGrey; Gray/Grey; DarkGray/DarkGrey; LightGray/LightGrey; Fuchsia/Magenta. Tôi chỉ lọc ra các màu xám trùng lặp, nhưng không lọc hai màu kia. Vì vậy, tôi đã nhận được các lỗi ngoài thiết lập do không khớp trong danh sách chuỗi và số nguyên của mình ..>.> Hình tôi sẽ đăng bài này ở đây để ngăn người khác mắc lỗi tương tự tôi đã làm.
Kevin Cruijssen

Câu trả lời:


17

C # (Trình biên dịch tương tác Visual C #) , 231 + 21 = 252 byte

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

Giải trình:

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

Vì một số lý do, Tio phàn nàn rằng không gian tên 'Bản vẽ' không tồn tại trong không gian tên 'Hệ thống', mặc dù dự án nguồn Mono cho biết nó tương thích. Nó hoạt động tốt trong VisualStudio mặc dù.

EDIT: dường như nó chưa được triển khai vào Tio!

Hãy thử trực tuyến!


7
C # out-golfing các ngôn ngữ chơi golf một lần. Có một ...
Darrel Hoffman

2
Tôi ngạc nhiên khi Javascript không có cách nào để truy cập danh sách nhưng C # thì có
JollyJoker

1
@JollyJoker Câu trả lời Node.js này không nhập gói chứa dữ liệu.
Arnauld

14

Node.js , 1488 byte

Lấy đầu vào dưới dạng số nguyên 24 bit. Đầu ra trong trường hợp thấp hơn.

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

Hãy thử trực tuyến!

Làm sao?

Chuỗi nén dài 1683 ký tự và trông như thế:

"black0navy3KdarkblueBmediumblue1Ublue1EdarkgreenJK1green5J4(…)lightyellow68ivoryGwhiteF"

Các màu được sắp xếp từ giá trị thấp nhất đến cao nhất. Mỗi màu được mã hóa như tên của nó trong chữ thường theo sau là sự khác biệt giữa giá trị của nó và giá trị trước đó trong cơ sở-36 và trong chữ hoa:

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

Đã bình luận

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

Tại sao không nén các mã của bạn với chuỗi dữ liệu với nhau sau đó đánh bại nó? Bạn đã thử điều này?
tsh

@tsh Mã JS không nén đủ tốt để bù cho sự quá tải gây ra bởi mã hóa base64. Vì vậy, nó sẽ dài hơn. Nó có thể được viết lại để làm cho nó trở nên thân thiện hơn (ví dụ như bằng cách hủy bỏ vòng lặp bản đồ) nhưng tôi nghi ngờ điều đó là đủ.
Arnauld

Bạn không thể tự tạo tên màu sao? Có lẽ có một cách tốt hơn / nhanh hơn để làm điều đó, nhưng bạn chỉ có thể vũ phu nó: 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}(lưu ý rằng rgb(36, 39, 41)thay đổi với ...
Geza Kerecsenyi

... bản định kiểu, cái này hoạt động với StackExchange - nó chỉ là màu phông chữ mặc định). Ngoài ra, tôi không biết nếu điều này được tính, vì sẽ mất nhiều ngày để chạy, nhưng tôi đã thử nó ở quy mô nhỏ và có thể thấy nó hoạt động (thử thay 7988090793663851220822006848646 bằng 39999)
Geza Kerecsenyi

9

Thạch , 1015 914 byte

“¥.⁻Ḳ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Ṫị¢

Hãy thử trực tuyến!

Cảm ơn @Arnauld về một đề xuất đã lưu 41 byte!

Chương trình đầy đủ. Lấy màu là số nguyên 24 bit làm đối số của nó và trả về tên màu.

Giải trình

Liên kết trợ giúp

Tên màu. Được lưu trữ bằng chuỗi nén, nhưng với các từ phổ biến được thay thế bằng các ký tự ASCII đơn lẻ trong phạm vi 33 đến 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

Liên kết chính

Giai đoạn 1: Bắt đầu tạo danh sách các số màu. Gia số giữa các số màu được lưu trữ trong khoảng từ 1 đến 3 chữ số cơ sở 249. Gia số đã được nhân với 3, được chuyển đổi thành cơ sở 249 và sau đó số chữ số trừ 1 đã được thêm vào chữ số có nghĩa ít nhất, trước khi đảo ngược thứ tự các chữ số.

“⁸...‘©                | 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')

Giai đoạn 2: Hoàn tất việc tạo số màu và tra cứu đầu vào

ḅ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

Màu sắc được đảo ngược trước khi so sánh vì màu sắc không có thành phần màu đỏ (ví dụ) sẽ kết thúc dưới dạng danh sách 2 thành phần.

Liên kết TIO tạo ra 10 màu ngẫu nhiên và hiển thị đầu ra do đó sẽ khác nhau mỗi lần.


Đầu vào có thể là 24 bit. Tôi đã nói I / O tiêu chuẩn áp dụng.
Geza Kerecsenyi

@GezaKerecsenyi Cảm ơn. Bạn cũng nói rằng nó cần phải là một chuỗi hex sáu chữ số, vì vậy sẽ rất tốt để làm rõ trong câu hỏi.
Nick Kennedy

i×4+ni×3+nin

Đây là một số mã JS để minh họa những gì tôi muốn nói. (Đây là phiên bản cố định với mã hóa + giải mã. Xin lỗi về nhiều bài đăng.)
Arnauld

@Arnauld cảm ơn. Tôi cần sử dụng cơ sở 249. Tóm lại, tôi đã nhân số gia lên 3, chuyển đổi thành cơ sở 249, đảo ngược thứ tự các chữ số và thêm độ dài-1 vào chữ số đầu tiên. Sau đó chúng được mã hóa thành các ký tự Jelly. Để giải mã, tôi bật chữ số đầu tiên, sau đó bật thêm một chữ số (chữ số đầu tiên mod 3) và nối chúng (đảo ngược thứ tự trong quy trình). Tôi lặp lại cho đến khi không còn chữ số nào. Điều này sau đó được chuyển đổi trở lại từ cơ sở 249 sang số nguyên. Lý do cho 249 là 250, chữ số có nghĩa ít nhất không nhất thiết phải là bội số của 3.
Nick Kennedy

3

Ngôn ngữ Wolfram (Mathicala), 164 byte

Lưu ý: Điều này chỉ hoạt động trong Mathicala 12.0 do lỗi trong các phiên bản trước. Điều này cũng có nghĩa là không có liên kết TIO.

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

Xác định hàm g, lấy một số nguyên làm đầu vào. Các trường hợp thử nghiệm:

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"
|> *)

Thật không may, khá nhiều byte bị lãng phí khi thêm "RebeccaPurple" vào danh sách màu tích hợp, vì một số lý do bị thiếu. Phần còn lại khá đơn giản, chúng tôi chỉ sắp xếp các màu theo khoảng cách của chúng đến đầu vào, phá vỡ các mối quan hệ với tổng giá trị kênh và sau đó là thứ tự tuyệt đối.


1
RebeccaPurplelà mới (ish) và là một cống nạp cho con gái của Eric Meyer : lists.w3.org/Archives/Public/www-style/2014Jun/0312.html . Tôi sẽ nâng nó lên như một tính năng nâng cao với Mathmatica.
Robin Whittleton

2

JavaScript (Firefox), 1050 byte

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())

Ngôn ngữ JavaScript thứ ba trong câu hỏi này bây giờ ...

getComputedStyleluôn trả về màu sắc ở rgb(x, y, z)dạng nếu alpha == 1trên Firefox.

_biến giữ chuỗi với tất cả các tên màu trong biểu mẫu BlackNavyDarkblueMediumblueBlueDarkgreen...White.

Lưu 11 byte nhờ Kevin Cruijssen bằng cách loại bỏ các màu không cần thiết. Tiết kiệm ~ 350 byte nhờ Arnauld bằng cách giới thiệu một số thuật toán đóng gói lạ.


Bạn nên lưu hơn 350 byte bằng cách RegPack'ing chuỗi của bạn, hoặc có thể toàn bộ mã, lần này. ;)
Arnauld

Lưu một vài byte bằng cách gán document.bodyvào bbên trong getComputedStyle, cho phép bạn loại bỏ các dấu ngoặc đơn kèm theo.
Shaggy

FuchsiaMagentaAquaCyancả hai có thể là một trong hai thay vì cả hai, vì chúng (giống như Gray/Grey) cùng một mã màu.
Kevin Cruijssen

@Shaggy nhưng dấu ngoặc đơn vẫn ,rcó thể được yêu cầu bởi
tsh

@tsh, sử dụng &&rthay thế.
Shaggy

2

color-nameGói JavaScript (Node.js) + , 259 279 284 259 278 282 299 312 364 byte

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]}

Hãy thử trực tuyến!

Đã bình luận:

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

tôi phải

npm install color-name

cho các yêu cầu () để làm việc. Tôi không nghĩ rằng tôi có thể cài đặt npm trên TIO, vì vậy tôi đã mã hóa từ điển trong tiêu đề.

Gói này chứa 148 mục tương tự như trang w3schools, tên là chữ thường. Tôi không biết ai đã tạo ra nó và khi nào, tôi chỉ tìm thấy nó trong khi googling. Có một gói Debian cho nó, vì vậy tôi cho rằng nó cũ hơn câu hỏi này.

[Chỉnh sửa: giảm kích thước thứ ba / đại tu chính]
[Chỉnh sửa lần thứ 5 / chỉnh sửa: phiên bản đó có 282 byte nhưng bị thiếu giá trị tiebreak theo giá trị RGB. Tôi không nghĩ rằng tôi có thể sửa cái đó và sau đó đánh nó nhỏ hơn cái này, vì vậy tôi đã xóa mã đó khỏi bài viết.]

Lần này, tôi viết lại hầu hết các mã. Tôi cảm thấy rằng nó rất khác so với trước đây, nó không có ý nghĩa để giữ lịch sử trong bài viết.

@Shaggy đã lưu cho tôi 4 byte từ phiên bản trước bằng cách bỏ qua dấu ngoặc đơn xung quanh các tham số chức năng mũi tên đơn. Bây giờ, có 6 trong số đó, vì vậy về cơ bản tôi nợ 12 byte cảm ơn.

Tôi đã chuyển từ xây dựng các danh sách / danh sách theo cách thủ công sang sử dụng mapfilterở mọi nơi, điều này cho phép / nhắc nhở rất nhiều cơ cấu lại. Tôi cũng tìm thấy một số tình huống nữa trong đó tôi có thể gán các biến sau này.

[Chỉnh sửa: Thu nhỏ thứ 4, trở về gốc]

Trong vòng một phút sau khi gạt bỏ lịch sử (ở trên), tôi nhận ra sai lầm của mình khi nói điều đó.
Tôi đã áp dụng các bài học kinh nghiệm cho đến mã cũ và tôi thấy rằng loại thứ hai () là vô nghĩa. Vì vậy, ngay bây giờ, mã đó đi trước 4 byte.
[Chỉnh sửa: 4.1th: DUH! tất cả các loại là vô nghĩa. -19 byte nữa]

[Chỉnh sửa: Lặp lại lần thứ 5, đang phát triển nhưng bây giờ (hy vọng) chính xác]

@Lukas Lang chỉ ra rằng mã của tôi không chính xác trong trường hợp tổng kênh bị ràng buộc. Tôi đã có ấn tượng sai lầm rằng điều này không bao giờ xảy ra.
Để khắc phục, tôi cần điền vào các mảng bằng các Scặp [RGBarray, name] thay vì chỉ các tên. Bằng cách này, sắp xếp mảng mặc định hoàn thành công việc.

[Chỉnh sửa: Giảm thứ 6 - món quà từ vương quốc cao hơn]

@Shaggy nhận được tất cả tín dụng cho vòng này. .reverse()[0].pop(). Rõ ràng ... Ngoài ra, chuyển đổi loại ngầm làm cho ('0x'+c)công việc thay vì parseInt(c,16). Và nếu bạn nhận được các dấu hiệu đúng, MỌI biến có thể được chỉ định ở lần sử dụng đầu tiên. Lần này, đó là Wp.


12
Nếu bạn có một gói bắt buộc không phải là một phần tiêu chuẩn của ngôn ngữ, thì nó cần phải nằm trong tiêu đề ngôn ngữ ở đầu mục nhập của bạn (ví dụ: JavaScript (Node.js) + tên màu). Điều này có nghĩa là nó cạnh tranh với các mục khác bằng cách sử dụng cùng một gói, nhưng không trực tiếp với các mục nhập JavaScript (Node.js) khác.
Nick Kennedy

Điều đó có ý nghĩa. Cảm ơn!
Paul Thomann

3
Nếu một hàm mũi tên chỉ có một tham số, thì nó không cần được đặt trong dấu ngoặc đơn.
Shaggy

1
Trừ khi tôi nhầm, mã không thành công trong trường hợp cần quy tắc ngắt kết nối thứ hai, chẳng hạn như e8fcf8: cả hai AzureMintCreamcó khoảng cách 18đến màu đó và tổng kênh 750. Do đó, kết quả sẽ được MintCream, trong khi mã này trả về Azure.
Lukas Lang

1
Một vài điều chỉnh nhanh từ điện thoại của tôi: tio.run/ Mạnh
Shaggy

1

05AB1E , 1175 byte

.•Œ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è

Điều đó mất khá nhiều thời gian .. 139 màu để tạo ra một chuỗi ..>.>

Lấy đầu vào dưới dạng số nguyên 24 bit để lưu 1 byte.

Hãy thử trực tuyến hoặc xác minh một vài trường hợp thử nghiệm . (Cả hai đều được sửa đổi một chút để lấy chuỗi thập lục phân làm đầu vào, vì nó dễ kiểm tra hơn.)

Giải trình:

Đầu tiên chúng ta tạo ra tất cả các chuỗi màu:

.•Œ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

Sau đó, chúng tôi tạo ra một danh sách các khác biệt về phía trước (deltas) giữa mỗi giá trị nguyên của các màu:

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]

Sau đó, chúng tôi xác định chỉ số của giá trị gần nhất với đầu vào (về sự khác biệt tuyệt đối giữa mỗi màu RGB - và ở đây tôi nghĩ rằng tôi có thể sử dụng nội dung .x.. ), xác định chỉ mục của số nguyên gần nhất này trong danh sách và sử dụng chỉ số đó để lập chỉ mục vào chuỗi màu chúng ta đã tạo trước đó:

ε                # 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)

Xem mẹo 05AB1E này của tôi (tất cả bốn phần) để hiểu lý do:

  • .•Œ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]

1
Cái đó. Là chương trình 05AB1E dài nhất. Tôi đã từng gặp.
Connectyourcharger

@connectyourcharger Yep, cho đến nay là lớn nhất tôi đã viết, đánh bại chương trình lớn nhất trước đây của tôi là 176 byte .. xD Tuy nhiên, không thực sự có gì đáng tự hào với một thử thách chơi gôn mã. ;)
Kevin Cruijssen

1
Bạn đã kiếm được upvote của tôi mặc dù :)
Connectyourchargeer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.