ট্র্যাক
/
Haskell
Haskell
/
অনুশীলনী
/
অ্যাটবাশ সাইফার
অ্যাটবাশ সাইফার

অ্যাটবাশ সাইফার

মধ্যম

নির্দেশনা

মধ্যপ্রাচ্যে তৈরি একটি প্রাচীন এনক্রিপশন ব্যবস্থা, অ্যাটবাশ সাইফারের একটি ইমপ্লিমেন্টেশন তৈরি করুন।

অ্যাটবাশ সাইফার হলো একটি সরল সাবস্টিটিউশন সাইফার, যা বর্ণমালার সব অক্ষরের ক্রম উল্টে দেয়, ফলে যে বর্ণমালা পাওয়া যায় সেটি উল্টো হয়ে যায়। প্রথম অক্ষরের জায়গায় বসে শেষ অক্ষর, দ্বিতীয়টির জায়গায় শেষ থেকে দ্বিতীয়টি, আর এভাবেই চলতে থাকে।

লাতিন বর্ণমালার জন্য অ্যাটবাশ সাইফারটি হবে এমন:

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 টাইপটি ব্যবহার করা যায়।

এই অনুশীলনীর ঐচ্ছিক সম্প্রসারণ হিসেবে আপনি চাইলে:

  • Haskell-এ স্ট্রিং টাইপ সম্পর্কে পড়তে পারেন।
  • package.yaml ফাইলে আপনার ডিপেন্ডেন্সির তালিকায় - text যোগ করতে পারেন।
  • Data.Text ইমপোর্ট করতে পারেন নিচের পদ্ধতিতে:
import qualified Data.Text as T
import           Data.Text (Text)
  • Text টাইপ ব্যবহার করতে পারেন, যেমন decode :: Text -> Text, আর Data.Text-এর কম্বিনেটরগুলোকে যেমন T.pack নামে ডাকতে পারেন।
  • Data.Text-এর ডকুমেন্টেশন দেখে নিতে পারেন।
  • Atbash.hs ফাইলে String-এর সব জায়গায় Text বসাতে পারেন, অর্থাৎ:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

এই অংশটি সম্পূর্ণ ঐচ্ছিক।


সূত্র

Wikipediaলিংকটি নতুন উইন্ডো বা ট্যাবে খোলে
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Haskell Exercism

অ্যাটবাশ সাইফার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।