ट्रैक
/
Python
Python
/
अभ्यास
/
सापेक्ष दूरी
सापेक्ष दूरी

सापेक्ष दूरी

मध्यम

परिचय

आपको कुलीनों के लिए बने सबसे चर्चित नए डेटिंग ऐप Noble Knots को बनाने का काम मिला है! शाही परिवारों में सदियों से होते आए आपसी विवाहों की वजह से मामला उलझ गया है। अरे, हम तो जुड़वाँ निकले जैसी किसी भी स्थिति से बचने के लिए आपको एक ऐसा सिस्टम बनाना है जो जाँचता है कि दो लोग कितने करीबी रिश्तेदार हैं।

Noble Knots आइसलैंड के "Islendinga-App" से प्रेरित है, जिसके पीछे एक डेटाबेस है जो आइसलैंड में बसावट के समय से आइसलैंडवासियों के बीच के सभी ज्ञात पारिवारिक संबंधों का पता लगाता है। आपका एल्गोरिदम शाही वंशावली में दो व्यक्तियों के बीच रिश्तेदारी की दूरी तय करेगा।

तो क्या आपका ऐप एक बेहतरीन जोड़ी चुन पाएगा?

निर्देश

आपको एक वंश वृक्ष में दो व्यक्तियों के बीच अलगाव की डिग्री पता लगानी है। यह उस पॉप कल्चर विचार के समान है कि हर हॉलीवुड अभिनेता Kevin Bacon की छह डिग्री के भीतर होता है।

  • आपको एक इनपुट दिया जाएगा, जिसमें सभी माता-पिता के नाम और उनके बच्चे होंगे।
  • प्रत्येक नाम अद्वितीय है, एक बच्चे के एक या दो माता-पिता हो सकते हैं।
  • अलगाव की डिग्री को एक व्यक्ति से दूसरे व्यक्ति तक के कनेक्शनों की सबसे छोटी संख्या के रूप में परिभाषित किया गया है।
  • यदि दो व्यक्ति जुड़े हुए नहीं हैं, तो एक ऐसी वैल्यू लौटाइए जो "कोई ज्ञात संबंध नहीं" को दर्शाती हो। कृपया वास्तविक इम्प्लीमेंटेशन के लिए टेस्ट केस देखिए।

उदाहरण

निम्नलिखित वंश वृक्ष दिया गया है:

      ┌──────────┐            ┌──────────┐     ┌───────────┐
      │  Helena  │            │  Erdős   ├─────┤  Shusaku  │
      └───┬───┬──┘            └─────┬────┘     └────┬──────┘
      ┌───┘   └───────┐             └───────┬───────┘
┌─────┴────┐     ┌────┴───┐           ┌─────┴────┐
│   Isla   ├─────┤ Tariq  │           │   Kevin  │
└────┬─────┘     └────┬───┘           └──────────┘
     │                │
┌────┴────┐      ┌────┴───┐
│   Uma   │      │ Morphy │
└─────────┘      └────────┘

Tariq और Uma के बीच अलगाव की डिग्री 2 है (Tariq → Isla → Uma)। Isla और Kevin के बीच कोई ज्ञात संबंध नहीं है, क्योंकि दिए गए डेटा में कोई कनेक्शन नहीं है। Uma और Isla के बीच अलगाव की डिग्री 1 है।

Note

Isla और Tariq सगे भाई-बहन हैं और उनके बीच अलगाव 1 है। इसी तरह, यह इम्प्लीमेंटेशन आपसे आपके पिता के भाई तक अलगाव 2 रिपोर्ट करेगा।

Python ट्रैक में यह अभ्यास किस तरह से बनाया गया है

इस अभ्यास के टेस्ट चाहते हैं कि आपका हल Python में एक RelativeDistance class के रूप में लिखा जाए। अगर आप Python में class से परिचित नहीं हैं, तो classes और आधिकारिक Python डॉक्युमेंटेशन में classes से शुरुआत करना अच्छा रहेगा।

RelativeDistance को family_tree की मदद से इनिशियलाइज़ करना चाहिए (ज़्यादा जानकारी के लिए __init__() देखिए)। family_tree एक डिक्शनरी है जिसमें keys अलग-अलग व्यक्ति होते हैं और values उस व्यक्ति के बच्चों की list होती हैं। आपको एक degree_of_separation मेथड भी बनाना होगा, जो पास की गई फैमिली ट्री में मौजूद person_a और person_b के बीच का डिग्री ऑफ सेपरेशन लौटाएगा।

आपको RelativeDistance क्लास का इंस्टेंस बनाने वाले __init__ स्पेशल मेथड का स्टब दिया गया है, और degree_of_separation मेथड का भी। सबसे पहले आपको __init__ को इस तरह बदलना होगा कि वह self (यानी इंस्टेंस) पर family_tree डेटा दर्शाने वाला एक उपयुक्त एट्रिब्यूट बना दे। इसके बाद आप degree_of_separation मेथड में अपना लॉजिक जोड़कर person_a और person_b के बीच का डिग्री ऑफ सेपरेशन निकाल सकते हैं।

एक्सेप्शन मैसेज

कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर मैसेज देना चाहिए, जो बताए कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में बहुत मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत किसी खास टाइप का होगा, वहाँ आप बिल्ट-इन एरर टाइप्स में से कोई एक चुनकर उठा सकते हैं, लेकिन तब भी एक अर्थपूर्ण मैसेज ज़रूर देना चाहिए।

इस अभ्यास में आपको raise स्टेटमेंट का इस्तेमाल करके कई ValueError उठाने होते हैं। पहली स्थिति में, जब RelativeDistance.degree_of_separation मेथड को दिए गए लोगों में से कोई एक या दोनों फैमिली ट्री में मौजूद न हों, तब आपको एक ValueError उठाना होगा।

# Example when Person A is not in the tree.
raise ValueError("Person A not in family tree.")

अगर दोनों लोग फैमिली ट्री में मौजूद हैं, तो जब नियमों के मुताबिक उनके बीच कोई मान्य संबंध न हो, तब आपको एक ValueError उठाना होगा।

# Example when there are no valid connections.
raise ValueError("No connection between person A and person B.")

टेस्ट तभी पास होंगे जब आप raise से अपेक्षित exception टाइप उठाएँगे और उसके साथ अपेक्षित मैसेज भी देंगे। कृपया टेस्ट और उनके अपेक्षित नतीजे ध्यान से देखिए, क्योंकि ये निर्देश हर चीज़ को नहीं समेटते।


स्रोत

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

सापेक्ष दूरी शुरू करने के लिए तैयार हैं?

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