والدینتان شما و خواهر یا برادرتان را به یک بازی بسکتبال دو در دو دعوت کردهاند. آنها که مطمئناند برنده میشوند، اجازه میدهند چند امتیاز اول را بگیرید، اما بعد کمکم بازی را در دست میگیرند. برای اینکه کمی روحیه بگیرید، شروع میکنید به حرف زدن به «پیگ لاتین»، زبانی ساختگی و کودکانه که فهمیدنش برای کسانی که دیگر کودک نیستند دشوار است. این به شما برتری میدهد تا بر والدینتان پیروز شوید!
وظیفهی شما ترجمهی متن از انگلیسی به 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 را هم بررسی میکنیم و از شما میپرسیم: آیا تمرین را حل کردید یا فقط تستها را پاس کردید؟