রোটেশনাল সাইফার, যাকে মাঝে মাঝে সিজার সাইফারও বলা হয়, তার একটি ইমপ্লিমেন্টেশন তৈরি করুন।
সিজার সাইফার হলো একটি সরল শিফট সাইফার, যা 0 থেকে 26-এর মধ্যে থাকা একটি ইন্টিজার কী ব্যবহার করে বর্ণমালার সব অক্ষর স্থানান্তরের উপর নির্ভর করে।
মডুলার অ্যারিথমেটিকের কারণে 0 বা 26 কী ব্যবহার করলে সবসময় একই আউটপুট পাওয়া যায়।
কী-এর মান যত, অক্ষরটি ঠিক ততবার শিফট করা হয়।
রোটেশনাল সাইফারের সাধারণ নোটেশন হলো ROT + <key>।
সবচেয়ে বেশি ব্যবহৃত রোটেশনাল সাইফারটি হলো ROT13।
ল্যাটিন বর্ণমালায় একটি ROT13 হলে তা দাঁড়াবে এমন:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
এটি অ্যাটবাশ সাইফারের চেয়ে শক্তিশালী, কারণ এতে সম্ভাব্য কী ২৭টি, আর ব্যবহারযোগ্য কী ২৫টি।
সাইফারটেক্সট ইনপুটের মতো একই ফরম্যাটিংয়ে লেখা হয়, যার মধ্যে স্পেস ও যতিচিহ্নও থাকে।
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 নেয়, এবং তারপর একটি রোটেশনাল সাইফার দিয়ে সেটি এনকোড করে।
টাইপগুলো নিয়ে নিশ্চিত না থাকলে আপনি প্রদত্ত সিগনেচারটি ব্যবহার করতে পারেন, তবে এটি যেন আপনার সৃজনশীলতাকে সীমাবদ্ধ না করে।
এই অনুশীলনীটি টেক্সট ডেটা নিয়ে কাজ করে। ঐতিহাসিক কারণে Haskell-এর String টাইপটি [Char]-এর সমার্থক, অর্থাৎ ক্যারেক্টারের একটি অ্যারে। টেক্সট ডেটা আরও দক্ষভাবে পরিচালনার জন্য Text টাইপটি ব্যবহার করা যেতে পারে।
এই অনুশীলনীর ঐচ্ছিক সম্প্রসারণ হিসেবে আপনি
- text যোগ করতে পারেন।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 বসাতে পারেন, অর্থাৎ:rotate :: Int -> Text -> Text
এই অংশটি সম্পূর্ণ ঐচ্ছিক।
Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।