رمز چرخشی

رمز چرخشی

متوسط

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

«رمز چرخشی» را پیاده‌سازی کنید، که گاهی به آن «رمز سزار» هم می‌گویند.

رمز سزار یک «رمز جابه‌جایی» ساده است که بر جابه‌جا کردن همه‌ی حروف الفبا با یک کلید صحیح میان 0 و 26 تکیه می‌کند. استفاده از کلید 0 یا 26 بهدلیل «حساب پیمانه‌ای» همیشه خروجی یکسانی به دست می‌دهد. هر حرف به اندازه‌ی مقدار کلید جابه‌جا می‌شود.

نماد کلی رمزهای چرخشی ROT + <key> است. رایج‌ترین رمز چرخشی ROT13 است.

یک ROT13 روی الفبای لاتین به این صورت است:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

این رمز از «رمز آتباش» قوی‌تر است، چون ۲۷ کلید ممکن و ۲۵ کلید قابل استفاده دارد.

«متن رمزشده» با همان قالب‌بندی ورودی نوشته می‌شود، از جمله فاصله‌ها و علائم نگارشی.

مثال‌ها

  • ROT5 روی omg خروجی trl را می‌دهد.
  • ROT0 روی c خروجی c را می‌دهد.
  • ROT26 روی Cool خروجی Cool را می‌دهد.
  • ROT13 روی The quick brown fox jumps over the lazy dog. خروجی Gur dhvpx oebja sbk whzcf bire gur ynml qbt. را می‌دهد.
  • ROT13 روی Gur dhvpx oebja sbk whzcf bire gur ynml qbt. خروجی The quick brown fox jumps over the lazy dog. را می‌دهد.

نکته‌ها

باید تابع rotate را پیاده‌سازی کنید که یک Int و یک String می‌گیرد و سپس آن را با یک رمز چرخشی کدگذاری می‌کند. اگر درباره‌ی نوع‌ها مطمئن نیستید می‌توانید از امضای ارائه‌شده استفاده کنید، اما نگذارید خلاقیت‌تان را محدود کند.

این تمرین با داده‌های متنی کار می‌کند. به دلایل تاریخی، نوع String در Haskell هم‌معنی [Char] است، یعنی لیستی از کاراکترها. برای پردازش کارآمدتر داده‌های متنی می‌توان از نوع Text استفاده کرد.

به عنوان یک گسترش اختیاری برای این تمرین، می‌توانید

  • درباره‌ی انواع رشته در Haskell بخوانید.
  • - text را به لیست وابستگی‌هایتان در package.yaml اضافه کنید.
  • Data.Text را به این شکل وارد کنید:
import qualified Data.Text as T
import           Data.Text (Text)
  • از نوع Text استفاده کنید، مثلاً rotate :: Int -> Text -> Text، و ترکیب‌کننده‌های Data.Text را مثلاً به شکل T.pack به کار ببرید.
  • به مستندات Data.Text نگاهی بیندازید.
  • همه‌ی رخدادهای String را در RotationalCipher.hs با Text جایگزین کنید، یعنی:
rotate :: Int -> Text -> Text

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


منبع

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

آماده‌اید رمز چرخشی را شروع کنید؟

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