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