के आधार पर निकटतम रंग का नाम प्राप्त करें I दिए गए हेक्स-मान के आधार पर सबसे मिलान रंग का नाम प्राप्त करने का प्रयास करें। उदाहरण के लिए यदि हमारे पास हेक्स-रंग #f00
है तो हमें colorname red
प्राप्त करना होगा।हेक्स-रंग
'#ff0000' => 'red'
'#000000' => 'black'
'#ffff00' => 'yellow'
मैं वर्तमान में Levenshtein दूरी एल्गोरिथ्म का उपयोग निकटतम रंग नाम पाने के लिए, अब तक अच्छी तरह से काम, लेकिन कभी कभी नहीं की उम्मीद के रूप में।
उदाहरण के लिए:
'#0769ad' => 'chocolate'
'#00aaee' => 'mediumspringgreen'
तो किसी भी विचार कैसे परिणाम प्राप्त करीब के लिए?
Array.closest = (function() {
// http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript
function levDist(s, t) {
if (!s.length) return t.length;
if (!t.length) return s.length;
return Math.min(
levDist(s.substring(1), t) + 1,
levDist(t.substring(1), s) + 1,
levDist(s.substring(1), t.substring(1)) + (s[0] !== t[0] ? 1 : 0)
);
}
return function (arr, str) {
// http://stackoverflow.com/q/11919065/1250044#comment16113902_11919065
return arr.sort(function (a, b) {
return levDist(a, str) - levDist(b, str);
});
};
}());
http://jsfiddle.net/ARTsinn/JUZVd/2/
एक और बात प्रदर्शन है:
यहाँ है कि मैं क्या निकटतम रंग प्राप्त करने के लिए किया जाता है! ऐसा लगता है कि यह वास्तव में एक बड़ा मुद्दा है जो इसे वास्तव में धीमा बनाता है (क्या यह एल्गोरिदम है?)।
अधिक समान रंगों के लिए [एचएसएल] (https://en.wikipedia.org/wiki/HSL_and_HSV) रंगों का उपयोग करना बेहतर होगा। – Sirko
यदि आप सॉर्ट करने से पहले दूरी को पूर्ववत करना चाहते हैं तो आप सॉर्ट चरण ** ** बहुत ** तेज कर सकते हैं। – Pointy
इसके अलावा मुझे यकीन नहीं है कि आप एक साधारण कार्टेशियन दूरी गणना का उपयोग क्यों नहीं करेंगे। (असल में मुझे लगता है कि मैं एक कोणीय समन्वय अंतरिक्ष में परिवर्तित हो जाऊंगा और एचएसएल या एचएसवी टर्न में दूरी करूंगा।) – Pointy