ETL

ETL

आसान

परिचय

आप एक ऐसी कंपनी के लिए काम करते हैं जो Lexiconia नाम का ऑनलाइन मल्टीप्लेयर गेम बनाती है।

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

यह गेम पहले अंग्रेज़ी में शुरू किया गया था, लेकिन अब यह बहुत लोकप्रिय है। इसलिए कंपनी अब इसे दूसरी भाषाओं में भी शुरू करना चाहती है।

हर भाषा में अक्षरों के अंक अलग-अलग होने चाहिए। ये अंक इस बात से तय होते हैं कि उस भाषा के दूसरे अक्षरों की तुलना में वे अक्षर कितनी बार इस्तेमाल होते हैं।

उदाहरण के लिए, अंग्रेज़ी में 'C' अक्षर काफी आम है और इसके सिर्फ 3 अंक मिलते हैं। लेकिन नॉर्वेजियाई में यह बहुत कम इस्तेमाल होने वाला अक्षर है और इसके 10 अंक मिलते हैं।

नई भाषाएँ जोड़ना आसान बनाने के लिए आपकी टीम को गेम में अक्षरों और उनके अंकों को रखने का तरीका बदलना होगा।

निर्देश

आपको गेम में अक्षरों और उनके अंकों का डेटा फॉर्मेट बदलना है।

फिलहाल अक्षर अपने स्कोर के आधार पर समूहों में संग्रहीत किए जाते हैं, जो एक-से-अनेक मैपिंग है।

  • 1 अंक: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
  • 2 अंक: "D", "G",
  • 3 अंक: "B", "C", "M", "P",
  • 4 अंक: "F", "H", "V", "W", "Y",
  • 5 अंक: "K",
  • 8 अंक: "J", "X",
  • 10 अंक: "Q", "Z",

इसे बदलकर हर अक्षर को उसके स्कोर के साथ एक-से-एक मैपिंग में संग्रहीत करना है।

  • "a" का 1 अंक है।
  • "b" का 3 अंक है।
  • "c" का 3 अंक है।
  • "d" का 2 अंक है।
  • इत्यादि।

इस बदलाव के साथ टीम ने यह भी तय किया है कि अक्षर अब बड़े अक्षरों की जगह छोटे अक्षरों में होंगे।

Note

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

jq के लिए सुझाव

यह अभ्यास एक इनपुट ऑब्जेक्ट लेकर उसे एक नए ऑब्जेक्ट में बदलने के बारे में है। कुछ बिल्ट-इन फंक्शन हैं जो इसमें मदद कर सकते हैं:

  • to_entries
    • यह फंक्शन इनपुट के रूप में एक ऑब्जेक्ट लेता है
    • यह एक ऐरे देता है। ऐरे का हर एलिमेंट एक ऑब्जेक्ट होता है: {"key": "K", "value": V}
      • हर K इनपुट ऑब्जेक्ट में मौजूद एक की है
      • हर V उस K से जुड़ी वैल्यू है।
  • from_entries
    • इसका उल्टा काम
    • {"key": K, "value": V} ऑब्जेक्टों का एक ऐरे लेता है और उससे एक ऑब्जेक्ट बनाता है

एक उदाहरण:

jq -n '
    {
        "username": "glennj",
        "tracks": ["bash", "awk", "jq"],
        "reputation": 123
    }
    | to_entries
'

तो आउटपुट मिलता है:

[
  {
    "key": "username",
    "value": "glennj"
  },
  {
    "key": "tracks",
    "value": ["bash", "awk", "jq"]
  },
  {
    "key": "reputation",
    "value": 123
  }
]
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
jq Exercism

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

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