ট্র্যাক
/
Gleam
Gleam
/
অনুশীলনী
/
হাই স্কোর বোর্ড
হাই স্কোর বোর্ড

হাই স্কোর বোর্ড

লার্নিং অনুশীলনী

ভূমিকা

টাইপ অ্যালিয়াস

টাইপ অ্যালিয়াস

Gleam-এ কোনো টাইপ অ্যালিয়াস ব্যবহার করে এমন একটি বিদ্যমান টাইপের জন্য সুবিধাজনক নাম দেওয়া যায়, যা অন্যথায় লিখতে ঝামেলার হতো।

pub type Headers =
  List(#(String, String))

pub fn html_headers() -> Headers {
  [
    #("content-type", "text/html"),
    #("x-frame-options", "DENY"),
  ]
}

pub type দিয়ে লেখা হলে অ্যালিয়াসটি যে মডিউলে ডিফাইন করা হয়েছে তার বাইরেও ব্যবহার করা যায়। pub বাদ দিলে অ্যালিয়াসটি প্রাইভেট হয়ে যায় এবং অন্য মডিউল থেকে রেফারেন্স করা যায় না।

ডিক্ট

Gleam-এ ডিক্ট হলো কী (key) আর মানের জোড়া হিসেবে তথ্য সংরক্ষণ করার ডেটা স্ট্রাকচার। অন্য ভাষায় এগুলোকে অ্যাসোসিয়েটিভ অ্যারে, হ্যাশ বা ডিকশনারি নামেও চেনা যায়।

ডিক্টে কী (key) ও মানের জন্য যেকোনো টাইপ ব্যবহার করা যায়, আর অ্যাক্সেস বা রিটার্ন করার সময় ডিক্ট তার এন্ট্রিগুলোর ক্রম নিশ্চিত করে না।

ডিক্ট নিয়ে কাজ করা

gleam/dict মডিউলের ফাংশন ব্যবহার করে ডিক্ট তৈরি ও ম্যানিপুলেট করা হয়।

// Create an empty dict
let dict1 = dict.new()

// Create a dict with some values
let dict2 = dict.from_list([
  #("name", "Gleam"),
  #("colour", "Pink"),
])

// Add a value to a dict
let dict3 = dict.insert(dict2, "website", "https://gleam.run")

// Get a value from a dict
let name = dict.get(dict3, "name")
// -> Ok("Gleam")

নির্দেশনা

এই অনুশীলনীতে আপনি আপনার এলাকার আর্কেড হলে সবচেয়ে জনপ্রিয় গেমটির হাই স্কোরের হিসাব রাখার একটি উপায় তৈরি করছেন।

আপনার ৫টি ফাংশন তৈরি করতে হবে, যার বেশিরভাগই হাই স্কোর ধারণ করা একটি অবজেক্ট নিয়ে কাজ করার সাথে সম্পর্কিত।

1. নতুন একটি হাই স্কোর বোর্ড তৈরি করুন

এমন একটি ফাংশন create_score_board তৈরি করুন যা একটি ডিক্ট রিটার্ন করে, যেটি হাই স্কোর বোর্ড হিসেবে কাজ করে। এই অবজেক্টের কী (key) গুলো হবে খেলোয়াড়দের নাম, আর মানগুলো হবে তাদের স্কোর। পরীক্ষার সুবিধার জন্য, আপনি অবজেক্টটিতে সরাসরি একটি এন্ট্রি রাখতে চান। এই প্রাথমিক এন্ট্রিতে খেলোয়াড়ের নাম হিসেবে "The Best Ever" এবং স্কোর হিসেবে 1_000_000 থাকা উচিত।

create_score_board()
// returns an object with one initial entry

2. স্কোর বোর্ডে খেলোয়াড় যোগ করুন

হাই স্কোর বোর্ডে একজন খেলোয়াড় যোগ করতে add_player ফাংশনটি ডিফাইন করুন। এটি ৩টি প্যারামিটার নেয়:

  • প্রথম প্যারামিটারটি হলো একটি বিদ্যমান স্কোর বোর্ড ডিক্ট।
  • দ্বিতীয় প্যারামিটারটি হলো খেলোয়াড়ের নাম, একটি স্ট্রিং হিসেবে।
  • তৃতীয় প্যারামিটারটি হলো স্কোর, একটি ইন্টিজার হিসেবে।

ফাংশনটি নতুন খেলোয়াড় ও স্কোরসহ একটি ডিক্ট রিটার্ন করে।

3. স্কোর বোর্ড থেকে খেলোয়াড় সরান

কোনো খেলোয়াড় আর্কেড হলের নিয়ম ভাঙলে তাকে ম্যানুয়ালি হাই স্কোর বোর্ড থেকে সরিয়ে ফেলা হয়। remove_player ডিফাইন করুন, যেটি ২টি প্যারামিটার নেয়:

  • প্রথম প্যারামিটারটি হলো একটি বিদ্যমান স্কোর বোর্ড ডিক্ট।
  • দ্বিতীয় প্যারামিটারটি হলো খেলোয়াড়ের নাম, একটি স্ট্রিং হিসেবে।

এই ফাংশনটি সরিয়ে ফেলা খেলোয়াড়টি ছাড়া ডিক্টটি রিটার্ন করা উচিত।

খেলোয়াড়টি যদি শুরুতেই বোর্ডে না থাকে, তাহলে বোর্ডটির কোনো পরিবর্তন হওয়া উচিত নয়; এটি যেমন আছে তেমনই রিটার্ন করতে হবে।

4. খেলোয়াড়ের স্কোর বাড়ান

কোনো খেলোয়াড় আর্কেড হলে আরেকটি গেম শেষ করলে, বোর্ডে থাকা আগের স্কোরের সাথে নির্দিষ্ট পরিমাণ পয়েন্ট যোগ হবে। update_score বাস্তবায়ন করুন, যেটি ৩টি প্যারামিটার নেয়:

  • প্রথম প্যারামিটারটি হলো একটি বিদ্যমান স্কোর বোর্ড ডিক্ট।
  • দ্বিতীয় প্যারামিটারটি হলো সেই খেলোয়াড়ের নাম, যার স্কোর বাড়ানো উচিত।
  • তৃতীয় প্যারামিটারটি হলো সেই স্কোর, যা আপনি সংরক্ষিত হাই স্কোরে যোগ করতে চান।

ফাংশনটি আপডেট করা স্কোরসহ একটি ডিক্ট রিটার্ন করা উচিত।

খেলোয়াড়টি যদি শুরুতেই বোর্ডে না থাকে, তাহলে বোর্ডটির কোনো পরিবর্তন হওয়া উচিত নয়; এটি যেমন আছে তেমনই রিটার্ন করতে হবে।

5. সোমবারের বোনাস পয়েন্ট প্রয়োগ করুন

আর্কেড হল সোমবারে আলাদা একটি স্কোর বোর্ড রাখে। দিনের শেষে, ওই বোর্ডের প্রতিটি খেলোয়াড় ১০০টি অতিরিক্ত পয়েন্ট পায়।

apply_monday_bonus ফাংশনটি বাস্তবায়ন করুন, যেটি একটি স্কোর বোর্ড গ্রহণ করে। ফাংশনটি ওই বোর্ডে তালিকাভুক্ত প্রতিটি খেলোয়াড়ের জন্য যোগ করা বোনাস পয়েন্টসহ একটি ডিক্ট রিটার্ন করে।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Gleam Exercism

হাই স্কোর বোর্ড শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।