ETL

ETL

সহজ

ভূমিকা

আপনি এমন একটি কোম্পানিতে কাজ করেন, যেটি Lexiconia নামের একটি অনলাইন মাল্টিপ্লেয়ার গেম তৈরি করে।

গেমটি খেলতে প্রতিটি খেলোয়াড়কে ১৩টি অক্ষর দেওয়া হয়, যা সাজিয়ে তাদের শব্দ তৈরি করতে হয়। ভিন্ন অক্ষরের পয়েন্ট মানও ভিন্ন, কারণ কিছু অক্ষর দিয়ে শব্দ তৈরি করা অন্যগুলোর চেয়ে সহজ।

গেমটি প্রথমে ইংরেজিতে চালু হয়েছিল, কিন্তু এটি খুব জনপ্রিয়, আর এখন কোম্পানিটি অন্যান্য ভাষাতেও বিস্তার করতে চায়।

ভিন্ন ভাষায় অক্ষরের জন্য ভিন্ন পয়েন্ট মান সমর্থন করা প্রয়োজন। ওই ভাষার অন্য অক্ষরগুলোর তুলনায় অক্ষরগুলো কত ঘন ঘন ব্যবহৃত হয়, তা দিয়েই পয়েন্ট মান নির্ধারিত হয়।

উদাহরণস্বরূপ, ইংরেজিতে 'C' অক্ষরটি বেশ কমন, তাই এর মূল্য মাত্র ৩ পয়েন্ট। কিন্তু নরওয়েজিয়ান ভাষায় এটি খুব বিরল অক্ষর, তাই এর মূল্য ১০ পয়েন্ট।

নতুন ভাষা যোগ করা সহজ করতে, গেমে অক্ষর ও তাদের পয়েন্ট মান সংরক্ষণের পদ্ধতিটি আপনার টিমকে পরিবর্তন করতে হবে।

নির্দেশনা

আপনার কাজ হলো গেমে অক্ষর এবং তাদের পয়েন্ট মানের ডেটা ফরম্যাট পরিবর্তন করা।

বর্তমানে অক্ষরগুলো তাদের স্কোরের ভিত্তিতে গ্রুপে গ্রুপে সংরক্ষিত থাকে, একটি এক-থেকে-অনেক ম্যাপিংয়ে।

  • ১ পয়েন্ট: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
  • ২ পয়েন্ট: "D", "G",
  • ৩ পয়েন্ট: "B", "C", "M", "P",
  • ৪ পয়েন্ট: "F", "H", "V", "W", "Y",
  • ৫ পয়েন্ট: "K",
  • ৮ পয়েন্ট: "J", "X",
  • ১০ পয়েন্ট: "Q", "Z",

এটি পরিবর্তন করে প্রতিটি আলাদা অক্ষরকে তার স্কোরসহ এক-থেকে-এক ম্যাপিংয়ে সংরক্ষণ করতে হবে।

  • "a" অক্ষরটির মান ১ পয়েন্ট।
  • "b" অক্ষরটির মান ৩ পয়েন্ট।
  • "c" অক্ষরটির মান ৩ পয়েন্ট।
  • "d" অক্ষরটির মান ২ পয়েন্ট।
  • ইত্যাদি।

এই পরিবর্তনের অংশ হিসেবে টিম আরও সিদ্ধান্ত নিয়েছে যে অক্ষরগুলো বড় হাতের নয়, ছোট হাতের হবে।

Note

আগে ডেটা কীভাবে সাজানো ছিল এবং তা কীভাবে পরিবর্তন করতে হবে তা দেখতে চাইলে টেস্ট স্যুটের উদাহরণগুলো একবার দেখুন।

jq টিপস

এই অনুশীলনীটি একটি ইনপুট অবজেক্ট নিয়ে সেটিকে নতুন একটি অবজেক্টে রূপান্তর করার বিষয়ে। সহায়ক হতে পারে এমন কয়েকটি বিল্ট-ইন ফাংশন:

  • to_entries
    • এই ফাংশনটি ইনপুট হিসেবে একটি অবজেক্ট নেয়
    • এটি একটি অ্যারে আউটপুট দেয়, অ্যারেটির প্রতিটি এলিমেন্ট একটি অবজেক্ট {"key": "K", "value": V}
      • প্রতিটি K ইনপুট অবজেক্টের একটি কী (key)
      • প্রতিটি 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।