256色Xterm兼容终端在通常的16种系统颜色之上增加了240种颜色。颜色16-231使用6级(0、95、135、175、215、255)红色,绿色和蓝色(按字典顺序排列)。颜色232-255仅是24级灰度(8 ... 238 x 10s)。要更好地了解我在说什么,请参阅此表。
挑战
您的目标是制作一个程序或函数,将rgb值作为输入,并输出与该rgb值最接近的Xterm颜色对应的数字。由于通常可以自定义16种系统颜色(颜色0-15),因此您将无法将它们从此转换中排除。
为了更好地定义“最接近的”颜色是什么,请沿红色,绿色和蓝色分量使用曼哈顿距离。例如,rgb(10, 180, 90)
距离rgb(0, 175, 95)
(颜色35)20个单位abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20
。如果输入颜色等于两个或多个Xterm颜色,则输出具有最高索引的Xterm颜色。
例子
R G B Xterm
0 0 0 ==> 16
95 135 0 ==> 64
255 255 255 ==> 231
238 238 238 ==> 255
90 133 140 ==> 66
218 215 216 ==> 188
175 177 178 ==> 249
175 0 155 ==> 127
75 75 75 ==> 239
23 23 23 ==> 234
115 155 235 ==> 111
规则
- 禁止出现标准漏洞
- 您的程序或函数可以采用任何合理格式的rgb值,包括:
- 红色,绿色和蓝色的单独参数
- 列表,元组,字典或类似内容
- 分隔符分隔的字符串或标准输入
- 十六进制颜色(例如
#ff8000
)
- 您可以假设所有r,g和b值都是0到255之间的整数。
- 由于将从映射中排除16种系统颜色,因此所有输出应在16 ... 255范围内。
这是代码高尔夫球,因此最短的代码获胜。