أنشئ تطبيقًا لشفرة التدوير، التي تُسمى أيضًا شفرة قيصر.
شفرة قيصر هي شفرة إزاحة بسيطة تعتمد على إزاحة جميع حروف الأبجدية باستخدام مفتاح من الأعداد الصحيحة بين 0 و26.
استخدام مفتاح بقيمة 0 أو 26 سيعطي دائمًا المخرجات نفسها بسبب الحساب النمطي.
يُزاح الحرف بعدد من القيم يساوي قيمة المفتاح.
الصيغة العامة لشفرات التدوير هي ROT + <key>.
وأكثر شفرات التدوير استخدامًا هي ROT13.
تطبيق ROT13 على الأبجدية اللاتينية يكون كما يلي:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
وهي أقوى من شفرة أتبش لأن لديها 27 مفتاحًا ممكنًا، و25 مفتاحًا صالحًا للاستخدام.
يُكتب النص المشفَّر بنفس تنسيق المُدخَل، بما في ذلك المسافات وعلامات الترقيم.
omg تُعطي trl
c تُعطي c
Cool تُعطي Cool
The quick brown fox jumps over the lazy dog. تُعطي Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
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 بـ Text في RotationalCipher.hs، أي:rotate :: Int -> Text -> Text
هذا الجزء اختياري تمامًا.
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.