मेरा RGB पहचानो: Guess My RGB
(susam.net)- Guess My RGB एक सरल रंग अनुमान गेम है, जिसमें स्क्रीन की बैकग्राउंड RGB वैल्यू को सीधे पहचानना होता है
- उपयोगकर्ता ऊपर दिए गए slider को खिसकाकर R, G, B वैल्यू समायोजित करता है और बैकग्राउंड रंग के करीब का संयोजन ढूँढता है
- स्क्रीन पर 0 से 9, A से F तक के hexadecimal अक्षर और R, G, B लेबल साथ में दिखते हैं
New Gameबटन से नया गेम शुरू किया जा सकता है- स्कोर, सही उत्तर दिखाने का तरीका, कठिनाई, और implementation का तरीका उपलब्ध सारांश जानकारी से पुष्टि नहीं किया जा सकता
स्क्रीन और लक्ष्य
- शीर्षक Guess My RGB है
- लक्ष्य slider समायोजित करके बैकग्राउंड RGB रंग का अनुमान लगाना है
- स्क्रीन पर 0 से 9, A से F तक के अक्षर दिखते हैं
- R, G, B लेबल साथ में दिखते हैं, ताकि हर रंग चैनल को अलग पहचाना जा सके
संचालन का तरीका
- निर्देश वाक्य है: “Move the sliders above to guess the background RGB colour.”
- उपयोगकर्ता ऊपर के slider से R, G, B वैल्यू समायोजित करता है
New Gameबटन से नया गेम शुरू होता है
1 टिप्पणियां
Hacker News की राय
अगर रंग देखे बिना submit करने के बाद सिर्फ score ही दिखे, तो सबसे बेहतर strategy क्या होगी, यह जानने की उत्सुकता है
साधारण hill climbing भी काफ़ी असरदार है: हर slider को 0 से शुरू करके score गिरने तक दाईं ओर ले जाएँ, फिर एक step बाएँ लौट आएँ
औसतन हर slider पर 9 बार, यानी एक रंग पर लगभग 27 कोशिशें लगेंगी
0 से 1 पर ले जाने पर score में जो फ़र्क आता है, उससे दाईं ओर कितना जाना है इसका मोटा अंदाज़ लगाया जा सकता है, लेकिन rounding की वजह से सही दूरी नहीं मिलती
अगर strategy optimal हो, तो औसतन हर slider पर 4 बार, यानी एक रंग पर लगभग 12 कोशिशें काफ़ी होंगी
result percentage की rounding की वजह से पास-पास के रंगों का score एक जैसा हो सकता है, इसलिए कम-से-कम दो बार दोहराना पड़ेगा
triangulation के नतीजे में सही जवाब के दो candidate निकलते हैं, इसलिए उनमें से एक को random चुनें तो औसतन 4.5 कोशिशों में काम हो सकता है
https://en.wikipedia.org/wiki/Golden-section_search
0-F range में 6 और 9 को measure करके, जो ज़्यादा हो उसके हिसाब से 0-9 या 6-F तक दायरा घटाएँ
उसके बाद पहले से measure किए गए values को reuse करते हुए range घटाएँ, तो worst case में हर slider पर 6 बार, औसतन लगभग 5 बार लगते हैं
शायद इसे और optimize किया जा सकता है, लेकिन मैंने यहीं तक देखा
तरीका यह है कि ऐसे guesses चुने जाएँ जो possible colors को 100 score buckets में जितना हो सके बराबर बाँट दें, यानी variance को minimize किया जाए
सभी रंगों में से आधे से ज़्यादा को सिर्फ 2 guesses में पहचाना जा सकता है
अगर code को सबसे बड़े bucket size को minimize करने के लिए बदला जाए, तो average थोड़ा खराब होता है, लेकिन किसी भी case में 4 से ज़्यादा कोशिशें नहीं लगतीं
यह ऐसा solution है जिसे साइट के browser console में paste करके चलाया जा सकता है
scaling और rounding को थोड़ी देर के लिए नज़रअंदाज़ करें, तो target color से एक ही सीध में न आने वाले किसी भी तीन points तक की दूरी, axis precision चाहे जो हो, candidate को ज़्यादा-से-ज़्यादा दो तक सीमित कर देती है
इसलिए तीसरी guess में सही होने की संभावना 50% और चौथी में भी 50% होती है
scaling आ जाने पर भी इसे spheres के intersection की problem की तरह देखा जा सकता है, लेकिन distance function symmetric नहीं रहती, इसलिए spheres का आकार अजीब हो जाता है
उदाहरण के लिए अगर पहली guess cube का कोई vertex हो, तो आपने सबसे दूर वाला point चुना है, इसलिए space का 1/8 हिस्सा वही 0% score साझा करता है
rounding से होने वाली precision loss तक को देखें तो इसे discrete problem मानकर ऐसे points के tuples ढूँढना बेहतर है जो सभी colors को अलग कर सकें, और कुछ कोशिशों के बाद [11,7,4], [4,4,8], [11,8,11], [4,11,7] ये चार points काम करते मिले
इससे छोटा set भी हो सकता है, लेकिन यह पूरी तरह जाँचने के लिए कि क्या तीन points से सब अलग किए जा सकते हैं, लगभग 2^48 operations चाहिए होंगे, और अगर पहले result के हिसाब से दूसरा point चुना जाए तो शायद और बेहतर हो सके
यही मेरा party trick है
अगर आप कोई रंग describe करें, तो मैं उसका hex color code बता सकता हूँ
जैसा आप सोच सकते हैं, पार्टियों में इसकी बहुत धूम रहती है
पहला clue एक शब्द होता है, दूसरा clue दो शब्दों का, और हर कोई अपनी रंग-guess की जगह पर token रखता है
दूरी के हिसाब से score मिलता है, इसलिए खेलना आसान है
https://boardgamegeek.com/boardgame/302520/hues-and-cues
मैंने पहले एक लेख पढ़ा था कि Netscape कैसे ऐसे शब्दों को रंग में बदलता था जो official color names list में नहीं होते थे; वह non-hex characters को हटा देता था, फिर बचे हुए characters को pad और chunk करके RGB numbers बना देता था
इसलिए “dumptruck” कभी DC0 बनकर पीले जैसा रंग दे सकता है
यह देखते ही मैंने /usr/share/dict/words के सारे शब्द parse करके, उनके Lab color representation के साथ sqlite DB में डालने वाला एक छोटा app बना लिया
वह किसी मनचाहे RGB के सबसे नज़दीक आने वाले 100 नकली color words को असली रंग में दिखाता था और नज़दीकी के क्रम में sort करके दिखाता था; यूँ अचानक बने एक शाम के project के लिए यह काफ़ी मज़ेदार था
मध्य अमेरिका और अमेरिका के दक्षिणी हिस्से में मिलने वाले खट्टे-मीठे फल की याद दिलाने वाला मटमैला पीला
यह paint description से लिया गया वाक्य है
submit करने के बाद match result दिखाने वाले box का background color मेरे guessed color में बदल जाता है
जिस रंग को guess करना हो उसके हिसाब से यह शायद obvious लगे, लेकिन मेरे case में रंग काफ़ी gray था, इसलिए कई guesses के बाद जाकर मुझे यह अहम visual hint समझ आया
यह अनजाने में perceptual color spaces का शानदार विज्ञापन बन गया
कुछ हद तक पास पहुँचने पर रंग को नज़रअंदाज़ करके सिर्फ percentage change देखना ज़्यादा आसान लगा
सोचता हूँ, अगर यह Guess My OKLCH जैसा game हो तो क्या फ़र्क पड़ेगा
95% पर जैसे कोई ceiling आ जाती हो
पेज पर link नहीं है, लेकिन जिन लोगों की रुचि हो उनके लिए GitHub repository यहाँ है
https://github.com/susam/myrgb
संयोग से मैंने अभी-अभी अलग-अलग color formats सिखाने वाली क्लास सामग्री पूरी की है, और यह मज़ेदार है
उसमें मैंने समझाया था कि RGB values के आधार पर रंग चुनना कितना कठिन है, क्योंकि इंसान रंगों के बारे में इस तरह नहीं सोचते
यह गेम उसका एक अच्छा उदाहरण है
HSL कहीं ज़्यादा intuitive है, और अगर color wheel की थोड़ी समझ हो तो saturation और lightness के स्तरों से रंग को परिभाषित करना बहुत आसान हो जाता है
मैं छात्रों से अभ्यास के तौर पर यह करवाता हूँ कि वे अपने पहने हुए कपड़ों के रंगों के अंतर को HSL में परिभाषित करें
अगर आपको RGB को conceptualize करना कठिन लगता है, तो Lab भी एक बार आज़मा सकते हैं
मैंने पहला रंग एक ही बार में सही पकड़ लिया, और अब डर लग रहा है कि यहाँ से प्रदर्शन बस नीचे ही जाएगा
समस्या क्या है? बस developer tools में background color देखो और उसे 16-step में normalize कर दो, हाहा
सच में, यह अच्छी तरह बनाया गया, मज़ेदार और चुनौतीपूर्ण गेम है
मैं Guess my HSL स्पिनऑफ़ भी खेलना चाहूँगा
https://bottosson.github.io/posts/oklab/
https://codepen.io/kaliedarik/full/YzvYadX
आइडिया सच में बहुत बढ़िया है
पहली दो बार मैं जल्दी से 94% तक पहुँच गया, लेकिन उसके बाद पूरी तरह अटक गया
94% किसी local optimum जैसा लग रहा था, और ऐसा महसूस हो रहा था कि किसी भी slider को एक step ऊपर या नीचे करने से बात नहीं बन रही
क्या कोई इसका कारण समझा सकता है? और अगर हार माननी हो तो उत्तर देखने का कोई तरीका भी होना चाहिए
फ़ोन पर मेरी उँगलियाँ मोटी होने की वजह से मुझे पता ही नहीं चला कि मैं slider को ठीक एक step नहीं, बल्कि दो step खिसका रहा था
पहले target color से संभव अधिकतम error निकाली जाती है, फिर आपके actual guess की Euclidean distance को उस अधिकतम दूरी से भाग देकर
Math.floor(100 * (1 - dist / maxDist))लौटाया जाता हैयह हर round में percentages को लगभग समान महसूस कराने का तरीका है, इसलिए यह ठीक लगता है
नहीं तो middle gray किसी भी guess पर अपेक्षाकृत ऊँचा score पा लेता
आपके सवाल का जवाब दूँ तो, जो local optimum वाली स्थिति आपने बताई, वह संभव नहीं लगती
मैं mathematician नहीं हूँ, लेकिन इस function को देखकर लगता है कि जब तक उत्तर सही न हो, हमेशा किसी न किसी slider को हिलाकर बेहतर score पाने की दिशा होनी चाहिए
ज़्यादा संभावना यही है कि आपने वह एक-step move मिस कर दिया, और उत्तर के करीब पहुँचने पर ऐसा होना और आसान हो जाता है
अगर आपने एक को हिलाया और बात नहीं बनी, तो दूसरे को आज़माने से पहले पहले slider को उसकी मूल स्थिति पर वापस ले जाना होगा
मैंने जब इसे आज़माया, तो सिर्फ एक number बदलने पर भी match percentage या तो बढ़ी या घटी