মধ্যপ্রাচ্যে তৈরি একটি প্রাচীন এনক্রিপশন ব্যবস্থা, অ্যাটবাশ সাইফারের একটি ইমপ্লিমেন্টেশন তৈরি করুন।
অ্যাটবাশ সাইফার হলো একটি সরল সাবস্টিটিউশন সাইফার, যা বর্ণমালার সব অক্ষরের ক্রম উল্টে দেয়, ফলে যে বর্ণমালা পাওয়া যায় সেটি উল্টো হয়ে যায়। প্রথম অক্ষরের জায়গায় বসে শেষ অক্ষর, দ্বিতীয়টির জায়গায় শেষ থেকে দ্বিতীয়টি, আর এভাবেই চলতে থাকে।
লাতিন বর্ণমালার জন্য অ্যাটবাশ সাইফারটি হবে এমন:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
এটি খুবই দুর্বল একটি সাইফার, কারণ এর সম্ভাব্য কী (key) মাত্র একটিই, আর এটি একটি সরল মনো-অ্যালফাবেটিক সাবস্টিটিউশন সাইফার। তবে সাইফারটির সময়ে হয়তো এটি কোনো সমস্যাই ছিল না।
সাইফারটেক্সট নির্দিষ্ট দৈর্ঘ্যের দলে দলে লেখা হয়, যেখানে প্রচলিত দলের আকার ৫ অক্ষর; সংখ্যাগুলো অপরিবর্তিত থাকে এবং যতিচিহ্ন বাদ দেওয়া হয়। এটি করা হয় যাতে শব্দের সীমানা দেখে অনুমান করা আরও কঠিন হয়। সমস্ত টেক্সট ছোট হাতের অক্ষরে এনকোড করা হবে।
test এনকোড করলে পাওয়া যায় gvhg
x123 yes এনকোড করলে পাওয়া যায় c123b vh
gvhg ডিকোড করলে পাওয়া যায় test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt ডিকোড করলে পাওয়া যায় thequickbrownfoxjumpsoverthelazydog
আপনাকে decode ও encode ফাংশন দুটি ইমপ্লিমেন্ট করতে হবে, যেগুলো Atbash সাইফার ব্যবহার করে একটি String ডিকোড ও এনকোড করে।
টাইপগুলো নিয়ে নিশ্চিত না থাকলে দেওয়া সিগনেচারটি ব্যবহার করতে পারেন, তবে সেটি যেন আপনার সৃজনশীলতাকে বাধা না দেয়।
এই অনুশীলনীটি টেক্সট ডেটা নিয়ে কাজ করে। ঐতিহাসিক কারণে Haskell-এর
String টাইপ [Char]-এরই সমার্থক, যা ক্যারেক্টারগুলোর একটি অ্যারে। টেক্সট
ডেটা আরও দক্ষভাবে সামলাতে Text টাইপটি ব্যবহার করা যায়।
এই অনুশীলনীর ঐচ্ছিক সম্প্রসারণ হিসেবে আপনি চাইলে:
- text যোগ করতে পারেন।Data.Text ইমপোর্ট করতে পারেন নিচের পদ্ধতিতে:import qualified Data.Text as T
import Data.Text (Text)
Text টাইপ ব্যবহার করতে পারেন, যেমন decode :: Text -> Text, আর
Data.Text-এর কম্বিনেটরগুলোকে যেমন T.pack নামে ডাকতে পারেন।Data.Text-এর
ডকুমেন্টেশন দেখে নিতে পারেন।String-এর সব জায়গায় Text বসাতে পারেন, অর্থাৎ:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
এই অংশটি সম্পূর্ণ ঐচ্ছিক।
Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।