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

हाई स्कोर

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

परिचय

मैप

Elixir में मैप वह डेटा स्ट्रक्चर है जिसमें जानकारी की-वैल्यू जोड़ों के रूप में रखी जाती है। दूसरी भाषाओं में इन्हें associative arrays (PHP), hashes (Perl 5, Raku) या dictionaries (Python) जैसे नामों से भी जाना जाता है।

की और वैल्यू किसी भी डेटा टाइप की हो सकती हैं, लेकिन अगर की एक एटम है, तो हम संक्षिप्त रूप इस्तेमाल कर सकते हैं। मैप इस बात की गारंटी नहीं देते कि उनकी प्रविष्टियाँ पढ़ने या लौटाने पर किस क्रम में मिलेंगी।

लिटरल रूप

खाली मैप को सिर्फ %{} से घोषित किया जाता है। अगर हमें मैप लिटरल में चीज़ें जोड़नी हैं, तो हम दो रूप इस्तेमाल कर सकते हैं:

# If the key is an atom:
%{atom_key: 1}

# If the key is a different type:
%{1 => :atom_value}

# You can even mix these if the atom form comes second:
%{"first_form" => :a, atom_form: :b}

हालाँकि कोई एक तय मानक रूप नहीं है, फिर भी की-वैल्यू लिटरल जोड़ों को लिखने का एक तरीका चुनिए और उसे हर जगह एक जैसा अपनाइए।

Map मॉड्यूल के फंक्शन

Elixir, Map मॉड्यूल में मैप के साथ काम करने के लिए कई फंक्शन देता है। Map मॉड्यूल के कुछ फंक्शन ऐसे हैं जिनमें मैप में बदलाव करने के लिए आपको एक अनाम फंक्शन देना होता है।

स्थिरांक के रूप में मॉड्यूल एट्रिब्यूट

Elixir में हम मॉड्यूल एट्रिब्यूट बना सकते हैं, जिन्हें अपने फंक्शन में स्थिरांक की तरह इस्तेमाल किया जा सकता है।

defmodule Example do
  # Defines the attribute as the value 1
  @constant_number 1

  def example_value() do
    # Returns the value 1
    @constant_number
  end
end

मॉड्यूल स्थिरांक बनाने के लिए इस्तेमाल करने पर एट्रिब्यूट कोई भी एक्सप्रेशन हो सकता है, जिसका मूल्यांकन कंपाइल होते समय किया जा सके। कंपाइल होने के बाद मॉड्यूल एट्रिब्यूट उपलब्ध नहीं रहते, क्योंकि वे कंपाइल होते समय ही एक्सपैंड हो जाते हैं, ठीक वैसे ही जैसे C जैसी भाषाओं में परिभाषित मैक्रो।

निर्देश

इस अभ्यास में आप अपने इलाके के आर्केड हॉल के सबसे लोकप्रिय खेल के हाई स्कोर का हिसाब रखने का तरीका बनाएँगे।

1. एक नया हाई स्कोर मैप बनाइए

नया हाई स्कोर मैप बनाने के लिए HighScore.new/0 फंक्शन बनाइए, जो कोई आर्गुमेंट नहीं लेता और हाई स्कोर का एक नया, खाली मैप लौटाता है।

HighScore.new()
# => %{}

2. हाई स्कोर मैप में खिलाड़ी जोड़िए

हाई स्कोर मैप में कोई खिलाड़ी जोड़ने के लिए HighScore.add_player/3 बनाइए, जो एक ऐसा फंक्शन है जो 3 आर्गुमेंट लेता है:

  • पहला आर्गुमेंट स्कोर का मैप है।
  • दूसरा आर्गुमेंट खिलाड़ी का नाम है, जो एक स्ट्रिंग के रूप में दिया जाता है।
  • तीसरा आर्गुमेंट स्कोर है, जो एक पूर्णांक के रूप में दिया जाता है। यह आर्गुमेंट वैकल्पिक है, इसलिए तीसरे आर्गुमेंट को डिफॉल्ट वैल्यू 0 के साथ बनाइए।

डिफॉल्ट शुरुआती स्कोर को एक मॉड्यूल एट्रिब्यूट में रखिए। इसकी ज़रूरत आगे फिर पड़ेगी।

score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas")
# => %{"Dave Thomas" => 0}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"Dave Thomas" => 0, "José Valim"=> 486_373}

3. स्कोर मैप से खिलाड़ी हटाइए

हाई स्कोर मैप से किसी खिलाड़ी को हटाने के लिए HighScore.remove_player/2 बनाइए, जो 2 आर्गुमेंट लेता है:

  • पहला आर्गुमेंट स्कोर का मैप है।
  • दूसरा आर्गुमेंट खिलाड़ी का नाम है, जो एक स्ट्रिंग के रूप में दिया जाता है।
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas")
# => %{"Dave Thomas" => 0}
score_map = HighScore.remove_player(score_map, "Dave Thomas")
# => %{}

4. किसी खिलाड़ी का स्कोर रीसेट कीजिए

किसी खिलाड़ी का स्कोर रीसेट करने के लिए HighScore.reset_score/2 बनाइए, जो 2 आर्गुमेंट लेता है:

  • पहला आर्गुमेंट स्कोर का मैप है।
  • दूसरा आर्गुमेंट खिलाड़ी का नाम है, जो एक स्ट्रिंग के रूप में दिया जाता है और जिसका स्कोर आप रीसेट करना चाहते हैं।

अगर खिलाड़ी का कोई स्कोर न हो, तब भी यह फंक्शन काम करना चाहिए।

score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"José Valim"=> 486_373}
score_map = HighScore.reset_score(score_map, "José Valim")
# => %{"José Valim"=> 0}

5. किसी खिलाड़ी का स्कोर अपडेट कीजिए

किसी खिलाड़ी के स्कोर को पिछले स्कोर में जोड़कर अपडेट करने के लिए HighScore.update_score/3 बनाइए, जो 3 आर्गुमेंट लेता है:

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

अगर खिलाड़ी का कोई पिछला स्कोर न हो, तब भी यह फंक्शन काम करना चाहिए। ऐसी स्थिति में मान लीजिए कि पिछला स्कोर 0 है।

score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"José Valim"=> 486_373}
score_map = HighScore.update_score(score_map, "José Valim", 5)
# => %{"José Valim"=> 486_378}

6. खिलाड़ियों का ऐरे पाइए

खिलाड़ियों का ऐरे पाने के लिए HighScore.get_players/1 बनाइए, जो 1 आर्गुमेंट लेता है:

  • पहला आर्गुमेंट स्कोर का मैप है।
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas", 2_374)
# => %{"Dave Thomas" => 2_374}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"Dave Thomas" => 2_374, "José Valim"=> 486_373}
HighScore.get_players(score_map)
# => ["Dave Thomas", "José Valim"]
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elixir Exercism

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

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