ट्रैक
/
Common Lisp
Common Lisp
/
अभ्यास
/
हाई स्कोर
हाई स्कोर

हाई स्कोर

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

परिचय

हैश टेबल

Common Lisp में हैश टेबल एसोसिएटिव डेटा संग्रहीत करने वाली डेटा संरचनाएँ हैं। ये की (जो कोई भी ऑब्जेक्ट हो सकती हैं) को वैल्यू (जो कोई भी ऑब्जेक्ट हो सकती हैं) से जोड़ती हैं। अन्य भाषाएँ इस कॉन्सेप्ट को मैप, डिक्शनरी या हैश कह सकती हैं।

हैश टेबल बनाना

हैश टेबल बनाने के लिए आप make-hash-table फंक्शन इस्तेमाल कर सकते हैं।

(make-hash-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {10024AD2B3}>

(ध्यान दीजिए कि हैश टेबल का छपा हुआ रूप इम्प्लीमेंटेशन पर निर्भर करता है, इसलिए आपके REPL में यह अलग दिख सकता है।)

की के ज़रिए वैल्यू निकालना

हैश टेबल से किसी की के ज़रिए वैल्यू निकालने के लिए आप gethash फंक्शन इस्तेमाल करते हैं:

*h* ; => #<HASH-TABLE :TEST EQL :COUNT 3 {10024AD2B3}>`
(gethash :foo *h*) ; => :bar
                   ;    T

gethash एक से अधिक वैल्यू लौटाता है, जिन्हें किसी अन्य कॉन्सेप्ट में समझाया जाएगा।

वैल्यू डालना

हैश टेबल में वैल्यू डालने के लिए आप setf का gethash के साथ इस तरह इस्तेमाल करते हैं:

(setf (gethash :foo *hash-table*) :bar) : => :bar

यह हैश टेबल *hash-table* में की :foo से जुड़ी वैल्यू को :bar में बदल देगा। यह वैल्यू लौटाता है।

setf का उपयोग किसी अन्य कॉन्सेप्ट में समझाया जाएगा।

निर्देश

लैमॉन्ट एक Lisp एलियन है जो अपना खुद का वीडियो गेम बनाना चाहता है। उसने आपसे जिस एक काम में मदद माँगी है, वह है हाई स्कोर की सूची का हिसाब रखना।

1. हाई स्कोर टेबल बनाना

एक फंक्शन make-high-score-table बनाइए जो कोई आर्गुमेंट नहीं लेता और एक नई खाली हैश टेबल देता है:

(make-high-score-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {1005A90103}>

2. टेबल में खिलाड़ी जोड़ना

टेबल में एक खिलाड़ी जोड़ने के लिए एक फंक्शन add-player बनाइए जो दो आर्गुमेंट लेता है:

  • हाई स्कोर टेबल
  • खिलाड़ी का नाम, एक कीवर्ड के रूप में

खिलाड़ी का शुरुआती स्कोर शून्य रखिए।

(add-player hash-table :louis) ; => 0
(add-player hash-table :lilly) ; => 0

3. खिलाड़ी का स्कोर सेट करना

किसी खिलाड़ी का स्कोर सेट करने के लिए एक फंक्शन set-score बनाइए जो तीन आर्गुमेंट लेता है:

  • हाई स्कोर टेबल
  • खिलाड़ी का नाम, एक कीवर्ड के रूप में
  • खिलाड़ी का स्कोर, एक पूर्णांक के रूप में
(set-score hash-table :louis 1234) ; => 1234

4. टेबल से स्कोर पाना

टेबल से किसी खिलाड़ी का स्कोर पाने के लिए एक फंक्शन get-score बनाइए जो दो आर्गुमेंट लेता है:

  • हाई स्कोर टेबल
  • खिलाड़ी का नाम, एक कीवर्ड के रूप में

इस फंक्शन को खिलाड़ी के लिए संग्रहीत स्कोर देना चाहिए। अगर उस खिलाड़ी के लिए कोई स्कोर संग्रहीत नहीं है, या वह खिलाड़ी अभी टेबल में नहीं है, तो इसका मान 0 होना चाहिए।

(get-score hash-table :louis)                         ; => 1234
(get-score hash-table :lilly)                         ; => 0
(get-score hash-table :not-a-character-in-this-story) ; => 0

5. टेबल से खिलाड़ी हटाना

हाई स्कोर टेबल से किसी खिलाड़ी को हटाने के लिए एक फंक्शन remove-player बनाइए जो दो आर्गुमेंट लेता है:

  • हाई स्कोर टेबल
  • खिलाड़ी का नाम, एक कीवर्ड के रूप में

इस फंक्शन को ऐसे मामले भी ठीक से संभालने चाहिए जिनमें खिलाड़ी को अभी टेबल में जोड़ा ही नहीं गया हो। स्वाभाविक है कि किसी खिलाड़ी को हटाने के बाद अगर टेबल से उसका स्कोर लिया जाए, तो वह शून्य होगा।

(set-score hash-table :louis 1234)           ; => 1234
(remove-player hash-table :louis)            ; => T
(get-score hash-table :louis)                ; => 0

(remove-player hash-table :not-in-the-table) ; => NIL
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Common Lisp Exercism

हाई स्कोर शुरू करने के लिए तैयार हैं?

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