تحدّاك أنت وشقيقك والداكما في مباراة كرة سلة اثنين ضد اثنين. واثقَين من فوزهما، سمحا لك بتسجيل أول نقطتين، ثم بدآ بالسيطرة على المباراة. ولأنك كنت بحاجة إلى دفعة صغيرة، بدأت تتحدث بلغة Pig Latin، وهي لغة أطفال مُختلقة يصعب على غير الأطفال فهمها. سيمنحك هذا الأفضلية لتتفوق على والديك!
مهمتك هي ترجمة النص من الإنجليزية إلى Pig Latin. تُحدَّد الترجمة بأربع قواعد تنظر إلى نمط الحروف المتحركة والساكنة في بداية الكلمة. تنظر هذه القواعد إلى استخدام كل كلمة للحروف المتحركة والساكنة:
a وe وi وo وu
إذا بدأت الكلمة بحرف متحرك، أو بدأت بـ "xr" أو "yt"، فأضف صوت "ay" إلى نهاية الكلمة.
على سبيل المثال:
"apple" -> "appleay" (تبدأ بحرف متحرك)"xray" -> "xrayay" (تبدأ بـ "xr")"yttria" -> "yttriaay" (تبدأ بـ "yt")إذا بدأت الكلمة بحرف ساكن واحد أو أكثر، فانقل تلك الحروف الساكنة أولًا إلى نهاية الكلمة، ثم أضف صوت "ay" إلى نهاية الكلمة.
على سبيل المثال:
"pig" -> "igp" -> "igpay" (تبدأ بحرف ساكن واحد)"chair" -> "airch" -> "airchay" (تبدأ بعدة حروف ساكنة)"thrush" -> "ushthr" -> "ushthray" (تبدأ بعدة حروف ساكنة)إذا بدأت الكلمة بصفر أو أكثر من الحروف الساكنة متبوعة بـ "qu"، فانقل تلك الحروف الساكنة (إن وُجدت) والجزء "qu" أولًا إلى نهاية الكلمة، ثم أضف صوت "ay" إلى نهاية الكلمة.
على سبيل المثال:
"quick" -> "ickqu" -> "ickquay" (تبدأ بـ "qu"، دون حروف ساكنة قبلها)"square" -> "aresqu" -> "aresquay" (تبدأ بحرف ساكن واحد متبوع بـ "qu")إذا بدأت الكلمة بحرف ساكن واحد أو أكثر متبوعًا بـ "y"، فانقل الحروف الساكنة التي تسبق "y" أولًا إلى نهاية الكلمة، ثم أضف صوت "ay" إلى نهاية الكلمة.
بعض الأمثلة:
"my" -> "ym" -> "ymay" (تبدأ بحرف ساكن واحد متبوع بـ "y")"rhythm" -> "ythmrh" -> "ythmrhay" (تبدأ بعدة حروف ساكنة متبوعة بـ "y")تقدّم اختبارات الوحدة أمثلة على الكلمات. جرّب تجميع الحروف الساكنة في مجموعات بغض النظر عن التوليفات المحددة للحروف الساكنة في اختبارات الوحدة.
يتعامل هذا التمرين مع بيانات نصية. ولأسباب تاريخية، فإن النوع String في Haskell مرادف للنوع [Char]، وهو مصفوفة من الأحرف. وللتعامل مع البيانات النصية بكفاءة أكبر، يمكن استخدام النوع Text.
وكامتداد اختياري لهذا التمرين، يمكنك
قراءة المزيد عن أنواع السلاسل النصية في Haskell.
إضافة - text إلى قائمة الاعتماديات لديك في package.yaml.
استيراد Data.Text بالطريقة التالية:
import qualified Data.Text as T
import Data.Text (Text)
يمكنك الآن كتابة شيء مثل translate :: Text -> Text، والإشارة إلى المُركِّبات في Data.Text مثل T.isSuffixOf.
اطّلع على توثيق Data.Text،
هذا الجزء اختياري بالكامل.
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.
نلقي نظرة على مطابقة الأنماط والتعبيرات النمطية، وعلى حل أنيق بلغة Prolog، ونسأل: هل حللت التمرين فعلًا أم جعلت الاختبارات تنجح فحسب؟