أنشئ تطبيقًا لشفرة أتباش، وهو نظام تشفير قديم نشأ في الشرق الأوسط.
شفرة أتباش هي شفرة استبدال بسيطة تعتمد على عكس كل حروف الأبجدية بحيث تصبح الأبجدية الناتجة معكوسة. يُستبدل الحرف الأول بالحرف الأخير، والثاني بثاني الحروف من الآخر، وهكذا.
وتكون شفرة أتباش للأبجدية اللاتينية كما يلي:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
إنها شفرة ضعيفة جدًا لأنها تملك مفتاحًا واحدًا ممكنًا فقط، وهي شفرة استبدال أحادية الأبجدية بسيطة. غير أن هذا ربما لم يكن مشكلة في زمن هذه الشفرة.
يُكتب النص المشفَّر في مجموعات ذات طول ثابت، والحجم التقليدي للمجموعة هو 5 أحرف، مع ترك الأرقام كما هي واستبعاد علامات الترقيم. وهذا لجعل تخمين المحتوى بناءً على حدود الكلمات أكثر صعوبة. سيُشفَّر كل النص على هيئة أحرف صغيرة.
test يعطي gvhg
x123 yes يعطي c123b vh
gvhg يعطي test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt يعطي thequickbrownfoxjumpsoverthelazydog
عليك تنفيذ الدالتين decode وencode، اللتين تفكّان تشفير قيمة من النوع String وتشفّرانها باستخدام شفرة Atbash.
يمكنك استخدام التوقيع المرفق إن لم تكن متأكدًا من الأنواع، لكن لا تدعه يقيّد إبداعك.
يعمل هذا التمرين على بيانات نصية. ولأسباب تاريخية، فإن النوع String في Haskell مرادف للنوع [Char]، وهو مصفوفة من المحارف. وللتعامل مع البيانات النصية بكفاءة أكبر، يمكن استخدام النوع Text.
وكامتداد اختياري لهذا التمرين، يمكنك
- text إلى قائمة التبعيات في package.yaml.Data.Text بالطريقة التالية:import qualified Data.Text as T
import Data.Text (Text)
Text، مثل decode :: Text -> Text، وتشير إلى مُركِّبات Data.Text مثل T.pack.Data.Text.String بـ Text في Atbash.hs، أي:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
هذا الجزء اختياري بالكامل.
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.