विपर्यय

विपर्यय

मध्यम

परिचय

एक गैराज सेल में आपको बहुत सस्ते दाम पर एक सुंदर पुराना टाइपराइटर मिलता है! उत्साह में भरकर आप घर दौड़ते हैं, कागज़ का एक पन्ना डालते हैं और टाइप करने लगते हैं। लेकिन जब आप आउटपुट देखते हैं, तो आपका उत्साह ठंडा पड़ जाता है: सभी शब्द गड़बड़ निकलते हैं! जैसे, यह "post" की जगह "stop" छापता है और "stale" की जगह "least"। ध्यान से आप फिर कोशिश करते हैं, लेकिन अब यह "spot" और "slate" छापता है।

कुछ प्रयोग करने के बाद आप पाते हैं कि हर अक्षर छपने से पहले एक अनियमित देरी होती है, जिससे क्रम बिगड़ जाता है। अब आप समझ गए कि उन्होंने इसे इतने कम पैसों में क्यों बेचा!

आपको एहसास होता है कि इसी खूबी से आप एनाग्राम बना सकते हैं, यानी ऐसे शब्द जो किसी दूसरे शब्द के अक्षरों को नए क्रम में रखकर बनते हैं। अपनी खोज से खुश होकर आप दिन का बाकी समय सैकड़ों एनाग्राम बनाने में बिताते हैं।

निर्देश

आपको एक लक्ष्य शब्द और उम्मीदवार शब्दों का एक समूह दिया जाएगा। इनमें से वे शब्द चुनने हैं जो लक्ष्य के एनाग्राम हैं।

एनाग्राम एक नया शब्द है जो अक्षरों को नए क्रम में रखकर बनाया जाता है। जैसे, "owns", "snow" का एनाग्राम है। कोई शब्द अपना ही एनाग्राम नहीं होता। जैसे, "stop", "stop" का एनाग्राम नहीं है।

लक्ष्य और उम्मीदवार एक या अधिक ASCII अक्षरों से बने शब्द होते हैं (A-Z और a-z)। छोटे और बड़े अक्षर एक जैसे माने जाते हैं। जैसे, "PoTS", "sTOp" का एनाग्राम है, लेकिन StoP, sTOp का एनाग्राम नहीं है। एनाग्राम समूह उम्मीदवार समूह का वह उपसमूह है जिसके शब्द लक्ष्य के एनाग्राम हैं (किसी भी क्रम में)। एनाग्राम समूह के शब्दों में छोटे और बड़े अक्षरों का वही रूप होना चाहिए जो उम्मीदवार समूह में है।

मान लीजिए लक्ष्य "stone" है और उम्मीदवार "stone", "tones", "banana", "tons", "notes", "Seton" हैं, तो एनाग्राम समूह "tones", "notes", "Seton" है।

संकेत

इस अभ्यास को पूरा करने के लिए आपको anagramsFor फंक्शन बनाना है, जो एक शब्द और शब्दों का एक समूह लेता है और उनमें से वे शब्द लौटाता है जो दिए गए शब्द के एनाग्राम हैं।

आपको ये एनाग्राम उसी क्रम में लौटाने हैं जिस क्रम में वे उम्मीदवार शब्दों की सूची में दिए गए हैं।

अगर आप यह अभ्यास पहली बार हल कर रहे हैं, तो बेहतर होगा कि आप दिए गए सिग्नेचर का ही इस्तेमाल करें:

anagramsFor :: String -> [String] -> [String]

बाद में आप इस समस्या पर फिर से लौट सकते हैं और दूसरे डेटा टाइप तथा लाइब्रेरी के साथ खेल सकते हैं:

  • Text, पैकेज text से।
  • Sequence और Set, पैकेज containers से।
  • MultiSet, पैकेज multiset से

टेस्ट सूट जानबूझकर ऐसा बनाया गया है कि वह लगभग हर समझ में आने वाला टाइप सिग्नेचर स्वीकार कर ले, इसलिए आप बेझिझक वह चुनिए जो आपको सबसे अच्छा लगे।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Haskell Exercism

विपर्यय शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।