شما برای شرکتی کار میکنید که یک بازی آنلاین چندنفره به اسم Lexiconia میسازد.
برای بازی کردن، به هر بازیکن ۱۳ حرف داده میشود که باید آنها را بازآرایی کند تا کلمه بسازد. حروف مختلف امتیازهای متفاوتی دارند، چون ساختن کلمه با بعضی حروف آسانتر از حروف دیگر است.
این بازی در ابتدا به انگلیسی عرضه شد، اما بسیار محبوب است و حالا شرکت میخواهد به زبانهای دیگر هم گسترش پیدا کند.
زبانهای مختلف باید از امتیازهای متفاوتی برای حروف پشتیبانی کنند. امتیازها بر اساس این تعیین میشوند که هر حرف در مقایسه با حروف دیگر آن زبان چقدر استفاده میشود.
برای مثال، حرف «C» در انگلیسی کاملاً رایج است و فقط ۳ امتیاز ارزش دارد. اما در نروژی حرفی بسیار کمیاب است و ۱۰ امتیاز ارزش دارد.
برای اینکه افزودن زبانهای جدید آسانتر شود، تیم شما باید روش ذخیرهسازی حروف و امتیازهایشان را در بازی تغییر دهد.
وظیفهی شما این است که قالب دادهی حروف و ارزش امتیازی آنها را در بازی تغییر دهید.
در حال حاضر، حروف بر اساس امتیازشان در گروههایی ذخیره میشوند، به شکل یک «نگاشت» یکبهچند.
این باید تغییر کند تا هر حرف بهصورت جداگانه همراه با امتیازش در یک نگاشت یکبهیک ذخیره شود.
بهعنوان بخشی از این تغییر، تیم تصمیم گرفته است حروف را از بزرگ به کوچک تغییر دهد.
اگر میخواهید ببینید دادهها پیشتر چگونه ساختاربندی شده بودند و چگونه باید تغییر کنند، به نمونههای موجود در مجموعهی تست نگاهی بیندازید.
این تمرین با دادههای متنی کار میکند. به دلایل تاریخی، نوع String در Haskell با [Char]، یعنی فهرستی از نویسهها، هممعناست. برای پردازش کارآمدتر دادههای متنی، میتوان از نوع Text استفاده کرد.
بهعنوان یک افزودنی اختیاری به این تمرین، میتوانید
در Haskell دربارهی انواع رشته بخوانید.
- text را به فهرست وابستگیهایتان در package.yaml اضافه کنید.
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 را جستوجو کنید.
این بخش کاملاً اختیاری است.