আপনি এমন একটি কোম্পানিতে কাজ করেন, যেটি Lexiconia নামের একটি অনলাইন মাল্টিপ্লেয়ার গেম তৈরি করে।
গেমটি খেলতে প্রতিটি খেলোয়াড়কে ১৩টি অক্ষর দেওয়া হয়, যা সাজিয়ে তাদের শব্দ তৈরি করতে হয়। ভিন্ন অক্ষরের পয়েন্ট মানও ভিন্ন, কারণ কিছু অক্ষর দিয়ে শব্দ তৈরি করা অন্যগুলোর চেয়ে সহজ।
গেমটি প্রথমে ইংরেজিতে চালু হয়েছিল, কিন্তু এটি খুব জনপ্রিয়, আর এখন কোম্পানিটি অন্যান্য ভাষাতেও বিস্তার করতে চায়।
ভিন্ন ভাষায় অক্ষরের জন্য ভিন্ন পয়েন্ট মান সমর্থন করা প্রয়োজন। ওই ভাষার অন্য অক্ষরগুলোর তুলনায় অক্ষরগুলো কত ঘন ঘন ব্যবহৃত হয়, তা দিয়েই পয়েন্ট মান নির্ধারিত হয়।
উদাহরণস্বরূপ, ইংরেজিতে 'C' অক্ষরটি বেশ কমন, তাই এর মূল্য মাত্র ৩ পয়েন্ট। কিন্তু নরওয়েজিয়ান ভাষায় এটি খুব বিরল অক্ষর, তাই এর মূল্য ১০ পয়েন্ট।
নতুন ভাষা যোগ করা সহজ করতে, গেমে অক্ষর ও তাদের পয়েন্ট মান সংরক্ষণের পদ্ধতিটি আপনার টিমকে পরিবর্তন করতে হবে।
আপনার কাজ হলো গেমে অক্ষর এবং তাদের পয়েন্ট মানের ডেটা ফরম্যাট পরিবর্তন করা।
বর্তমানে অক্ষরগুলো তাদের স্কোরের ভিত্তিতে গ্রুপে গ্রুপে সংরক্ষিত থাকে, একটি এক-থেকে-অনেক ম্যাপিংয়ে।
এটি পরিবর্তন করে প্রতিটি আলাদা অক্ষরকে তার স্কোরসহ এক-থেকে-এক ম্যাপিংয়ে সংরক্ষণ করতে হবে।
এই পরিবর্তনের অংশ হিসেবে টিম আরও সিদ্ধান্ত নিয়েছে যে অক্ষরগুলো বড় হাতের নয়, ছোট হাতের হবে।
আগে ডেটা কীভাবে সাজানো ছিল এবং তা কীভাবে পরিবর্তন করতে হবে তা দেখতে চাইলে টেস্ট স্যুটের উদাহরণগুলো একবার দেখুন।
এই অনুশীলনীটি টেক্সটভিত্তিক ডেটা নিয়ে কাজ করে। ঐতিহাসিক কারণে Haskell-এর String টাইপ [Char]-এর সমার্থক, যা ক্যারেক্টারগুলোর একটি অ্যারে। টেক্সটভিত্তিক ডেটা আরও দক্ষভাবে সামলানোর জন্য Text টাইপটি ব্যবহার করা যেতে পারে।
এই অনুশীলনীর ঐচ্ছিক সম্প্রসারণ হিসেবে আপনি যা করতে পারেন:
Haskell-এ স্ট্রিং টাইপ সম্পর্কে পড়ুন।
package.yaml-এ আপনার ডিপেন্ডেন্সিগুলোর তালিকায় - text যোগ করুন।
Data.Text নিম্নলিখিত উপায়ে ইমপোর্ট করুন:
import qualified Data.Text as T
import Data.Text (Text)
এখন আপনি যেমন transform :: Map Int Text -> Map Char Int লিখতে পারেন, এবং Data.Text-এর কম্বিনেটরগুলোকে যেমন T.toLower হিসেবে উল্লেখ করতে পারেন।
Data.Text-এর ডকুমেন্টেশন দেখে নিন।
এই অংশটি সম্পূর্ণ ঐচ্ছিক।
Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।