ट्रैक
/
Clojure
Clojure
/
अभ्यास
/
अनलिन की घुसपैठ
अनलिन की घुसपैठ

अनलिन की घुसपैठ

सीखने का अभ्यास

परिचय

Clojure में बूलियन को true या false से दर्शाया जाता है।

प्रेडिकेट फंक्शन (वे फंक्शन जो बूलियन लौटाते हैं) आम तौर पर प्रश्न चिह्न (?) पर खत्म होते हैं, लेकिन यह सिर्फ एक परंपरा है।

कोर लाइब्रेरी में not, and और or जैसे लॉजिकल ऑपरेटरों के लिए फंक्शन शामिल हैं।

निर्देश

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

कुछ समय तक पदचिह्नों का पीछा करने के बाद Annalyn को वह शिविर मिल जाता है जहाँ उसकी दोस्त कैद है। पता चलता है कि अपहरणकर्ता दो हैं: एक शक्तिशाली नाइट और एक चालाक तीरंदाज़।

अपहरणकर्ताओं का पता लगने के बाद Annalyn सोचती है कि वह नीचे बताई गई किन कार्रवाइयों को कर सकती है:

  • तेज़ हमला: तेज़ हमला तभी किया जा सकता है जब नाइट सो रहा हो, क्योंकि उसे अपना कवच पहनने में समय लगता है, इसलिए वह असुरक्षित रहेगा।
  • जासूसी: अगर तीनों में से कम से कम एक जागा हुआ हो, तो उन पर जासूसी की जा सकती है। वरना जासूसी करना समय की बर्बादी है।
  • कैदी को संकेत देना: अगर कैदी जागा हुआ हो और तीरंदाज़ सो रहा हो, तो पक्षियों की आवाज़ों से कैदी को संकेत दिया जा सकता है। तीरंदाज़ों को पक्षियों की आवाज़ से संकेत देने की ट्रेनिंग मिली होती है, और अगर वे जागे हुए हों तो वे संदेश को बीच में ही पकड़ सकते हैं।
  • कैदी को आज़ाद करना: Annalyn कैदी को आज़ाद करने के लिए चुपके से शिविर में घुसने की कोशिश कर सकती है। यह जोखिम भरा है और यह सिर्फ दो में से किसी एक तरीके से ही सफल हो सकता है:
    • अगर Annalyn के साथ उसका पालतू कुत्ता है, तो वह कैदी को तब बचा सकती है जब तीरंदाज़ सो रहा हो। नाइट कुत्ते से डरता है और Annalyn तथा कैदी के भागने से पहले तीरंदाज़ को तैयार होने का समय नहीं मिलेगा।
    • अगर Annalyn के पास उसका पालतू कुत्ता नहीं है, तो उसे और कैदी को बहुत चुपचाप रहना होगा! Annalyn कैदी को तब आज़ाद कर सकती है जब कैदी जागा हुआ हो और नाइट तथा तीरंदाज़ दोनों सो रहे हों। लेकिन अगर कैदी सो रहा हो, तो उसे बचाया नहीं जा सकता, क्योंकि Annalyn को अचानक सामने देखकर कैदी चौंक जाएगा और नाइट तथा तीरंदाज़ को जगा देगा।

आपको चार काम करने हैं: जंगल में उन तीन पात्रों की स्थिति और Annalyn का पालतू कुत्ता साथ है या नहीं, इसके आधार पर यह तय करने का तर्क लिखना कि ऊपर बताई गई कार्रवाइयाँ की जा सकती हैं या नहीं।

1. जाँचिए कि तेज़ हमला किया जा सकता है या नहीं

can-fast-attack? फंक्शन बनाइए, जो एक बूलियन वैल्यू लेता है। यह वैल्यू बताती है कि नाइट जागा हुआ है या नहीं। नाइट की स्थिति के आधार पर तेज़ हमला किया जा सकता है तो यह फंक्शन true लौटाता है, वरना false लौटाता है:

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

2. जाँचिए कि समूह पर जासूसी की जा सकती है या नहीं

can-spy? फंक्शन बनाइए, जो तीन बूलियन वैल्यू लेता है। ये वैल्यू क्रमशः बताती हैं कि नाइट, तीरंदाज़ और कैदी जागे हुए हैं या नहीं। तीनों पात्रों की स्थिति के आधार पर समूह पर जासूसी की जा सकती है तो यह फंक्शन true लौटाता है, वरना false लौटाता है:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

3. जाँचिए कि कैदी को संकेत दिया जा सकता है या नहीं

can-signal-prisoner? फंक्शन बनाइए, जो दो बूलियन वैल्यू लेता है। ये वैल्यू क्रमशः बताती हैं कि तीरंदाज़ और कैदी जागे हुए हैं या नहीं। दोनों पात्रों की स्थिति के आधार पर कैदी को संकेत दिया जा सकता है तो यह फंक्शन true लौटाता है, वरना false लौटाता है:

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

4. जाँचिए कि कैदी को आज़ाद किया जा सकता है या नहीं

can-free-prisoner? फंक्शन बनाइए, जो चार बूलियन वैल्यू लेता है। पहले तीन पैरामीटर क्रमशः बताते हैं कि नाइट, तीरंदाज़ और कैदी जागे हुए हैं या नहीं। अंतिम पैरामीटर बताता है कि Annalyn का पालतू कुत्ता साथ है या नहीं। तीनों पात्रों की स्थिति और Annalyn के पालतू कुत्ते की मौजूदगी के आधार पर कैदी को आज़ाद किया जा सकता है तो यह फंक्शन true लौटाता है, वरना false लौटाता है:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Clojure Exercism

अनलिन की घुसपैठ शुरू करने के लिए तैयार हैं?

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