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

রোটেশনাল সাইফার

মধ্যম

নির্দেশনা

রোটেশনাল সাইফার, যাকে মাঝে মাঝে সিজার সাইফারও বলা হয়, তার একটি ইমপ্লিমেন্টেশন তৈরি করুন।

সিজার সাইফার হলো একটি সরল শিফট সাইফার, যা 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 নেয়, এবং তারপর একটি রোটেশনাল সাইফার দিয়ে সেটি এনকোড করে। টাইপগুলো নিয়ে নিশ্চিত না থাকলে আপনি প্রদত্ত সিগনেচারটি ব্যবহার করতে পারেন, তবে এটি যেন আপনার সৃজনশীলতাকে সীমাবদ্ধ না করে।

এই অনুশীলনীটি টেক্সট ডেটা নিয়ে কাজ করে। ঐতিহাসিক কারণে Haskell-এর String টাইপটি [Char]-এর সমার্থক, অর্থাৎ ক্যারেক্টারের একটি অ্যারে। টেক্সট ডেটা আরও দক্ষভাবে পরিচালনার জন্য Text টাইপটি ব্যবহার করা যেতে পারে।

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

import qualified Data.Text as T
import           Data.Text (Text)
  • Text টাইপ ব্যবহার করতে পারেন, যেমন rotate :: Int -> Text -> Text, এবং Data.Text-এর কম্বিনেটরগুলোকে যেমন T.pack বলে উল্লেখ করতে পারেন।
  • Data.Text-এর ডকুমেন্টেশন দেখে নিতে পারেন।
  • RotationalCipher.hs ফাইলে String-এর সব জায়গায় Text বসাতে পারেন, অর্থাৎ:
rotate :: Int -> Text -> Text

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


সূত্র

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

রোটেশনাল সাইফার শুরু করতে প্রস্তুত?

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