ETL

ETL

آسان

مقدمه

شما برای شرکتی کار می‌کنید که یک بازی آنلاین چندنفره به اسم Lexiconia می‌سازد.

برای بازی کردن، به هر بازیکن ۱۳ حرف داده می‌شود که باید آن‌ها را بازآرایی کند تا کلمه بسازد. حروف مختلف امتیازهای متفاوتی دارند، چون ساختن کلمه با بعضی حروف آسان‌تر از حروف دیگر است.

این بازی در ابتدا به انگلیسی عرضه شد، اما بسیار محبوب است و حالا شرکت می‌خواهد به زبان‌های دیگر هم گسترش پیدا کند.

زبان‌های مختلف باید از امتیازهای متفاوتی برای حروف پشتیبانی کنند. امتیازها بر اساس این تعیین می‌شوند که هر حرف در مقایسه با حروف دیگر آن زبان چقدر استفاده می‌شود.

برای مثال، حرف «C» در انگلیسی کاملاً رایج است و فقط ۳ امتیاز ارزش دارد. اما در نروژی حرفی بسیار کمیاب است و ۱۰ امتیاز ارزش دارد.

برای اینکه افزودن زبان‌های جدید آسان‌تر شود، تیم شما باید روش ذخیره‌سازی حروف و امتیازهایشان را در بازی تغییر دهد.

دستورالعمل‌ها

وظیفه‌ی شما این است که قالب داده‌ی حروف و ارزش امتیازی آن‌ها را در بازی تغییر دهید.

در حال حاضر، حروف بر اساس امتیازشان در گروه‌هایی ذخیره می‌شوند، به شکل یک «نگاشت» یک‌به‌چند.

  • 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» یک امتیاز است.
  • ارزش «b» 3 امتیاز است.
  • ارزش «c» 3 امتیاز است.
  • ارزش «d» 2 امتیاز است.
  • و غیره.

به‌عنوان بخشی از این تغییر، تیم تصمیم گرفته است حروف را از بزرگ به کوچک تغییر دهد.

Note

اگر می‌خواهید ببینید داده‌ها پیش‌تر چگونه ساختار‌بندی شده بودند و چگونه باید تغییر کنند، به نمونه‌های موجود در مجموعه‌ی تست نگاهی بیندازید.

راهنمایی‌ها

این تمرین با داده‌های متنی کار می‌کند. به دلایل تاریخی، نوع 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 را جست‌وجو کنید.

این بخش کاملاً اختیاری است.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Haskell Exercism

آماده‌اید ETL را شروع کنید؟

در Exercism ثبت‌نام کنید تا Haskell را همراه با 107 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.