ETL

ETL

سهل

مقدمة

أنت تعمل في شركة تطوّر لعبة جماعية عبر الإنترنت تُدعى Lexiconia.

لخوض اللعبة، يُمنح كل لاعب 13 حرفًا، عليه أن يعيد ترتيبها لتكوين كلمات. ولكل حرف قيمة نقاط مختلفة، لأن تكوين الكلمات ببعض الأحرف أسهل من غيرها.

صدرت اللعبة في البداية باللغة الإنجليزية، لكنها لاقت شعبية كبيرة، والآن تريد الشركة التوسّع إلى لغات أخرى أيضًا.

تحتاج كل لغة إلى دعم قيم نقاط مختلفة للأحرف، وتُحدَّد قيم النقاط بحسب مدى شيوع استخدام الحرف مقارنة ببقية أحرف تلك اللغة.

على سبيل المثال، الحرف 'C' شائع جدًا في الإنجليزية، وقيمته 3 نقاط فقط. أما في النرويجية فهو حرف نادر جدًا، وقيمته 10 نقاط.

ولتسهيل إضافة لغات جديدة، يحتاج فريقك إلى تغيير طريقة تخزين الأحرف وقيم نقاطها في اللعبة.

التعليمات

مهمتك هي تغيير صيغة البيانات الخاصة بالحروف وقيمها النقطية في اللعبة.

حاليًا، تُخزَّن الحروف في مجموعات بناءً على نقاطها، وذلك في علاقة واحد إلى متعدد.

  • 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" قيمته 1 نقطة.
  • الحرف "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 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.