الماسة

الماسة

سهل

التعليمات

يأخذ كاتا الماسة حرفًا كمُدخل، ويُخرجه على شكل ماسة. عند إعطائه حرفًا، يطبع ماسة تبدأ بالحرف 'A'، ويكون الحرف المُعطى عند أوسع نقطة فيها.

المتطلبات

  • يحتوي الصف الأول على حرف 'A' واحد.
  • يحتوي الصف الأخير على حرف 'A' واحد.
  • تحتوي جميع الصفوف، ما عدا الأول والأخير، على حرفين متطابقين تمامًا.
  • تحتوي جميع الصفوف على عدد من المسافات في نهايتها مساوٍ لعدد المسافات في بدايتها. (قد يكون هذا العدد صفرًا).
  • الماسة متناظرة أفقيًا.
  • الماسة متناظرة رأسيًا.
  • الماسة مربعة الشكل (العرض يساوي الارتفاع).
  • تُشكّل الحروف شكل ماسة.
  • يحتوي النصف العلوي على الحروف بترتيب تصاعدي.
  • يحتوي النصف السفلي على الحروف بترتيب تنازلي.
  • الزوايا الأربع (التي تحتوي على المسافات) هي مثلثات.

الأمثلة

في الأمثلة التالية، تُشار إلى المسافات بالمحرف ·.

الماسة الخاصة بالحرف 'A':

A

الماسة الخاصة بالحرف 'C':

··A··
·B·B·
C···C
·B·B·
··A··

الماسة الخاصة بالحرف 'E':

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

تلميحات

عليك تنفيذ دالة diamond التي تطبع شكلًا ماسيًا يبدأ من A ويظهر فيه المحرف المعطى عند أوسع نقاطه. يمكنك استخدام التوقيع المرفق إذا لم تكن متأكدًا من الأنواع، لكن لا تدع ذلك يقيّد إبداعك:

diamond :: Char -> Maybe [String]

يتعامل هذا التمرين مع بيانات نصية. ولأسباب تاريخية، فإن النوع String في Haskell مرادف للنوع [Char]، أي مصفوفة من المحارف. ولمعالجة البيانات النصية بكفاءة أكبر، يمكن استخدام النوع Text.

وكامتداد اختياري لهذا التمرين، يمكنك

import qualified Data.Text as T
import           Data.Text (Text)
  • يمكنك الآن أن تكتب مثلًا diamond :: Char -> Maybe [Text] وتشير إلى مُركّبات Data.Text مثل T.pack،
  • أن تبحث عن التوثيق الخاص بـ Data.Text،
  • يمكنك بعد ذلك استبدال كل مواضع String بـ Text في Diamond.hs:
diamond :: Char -> Maybe [Text]

هذا الجزء اختياري بالكامل.


المصدر

Seb Roseيفتح الرابط في نافذة أو علامة تبويب جديدة
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Haskell Exercism

مستعد لبدء الماسة؟

سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.