रोटेशनल साइफर का एक इम्प्लीमेंटेशन बनाइए, जिसे कभी-कभी सीज़र साइफर भी कहा जाता है।
सीज़र साइफर एक सरल शिफ्ट साइफर है। यह 0 से 26 के बीच किसी पूर्णांक कुंजी की मदद से वर्णमाला के सभी अक्षरों की जगह बदल देता है।
मॉड्यूलर अंकगणित के कारण 0 या 26 की कुंजी इस्तेमाल करने पर हमेशा वही आउटपुट मिलता है।
हर अक्षर को कुंजी की वैल्यू के बराबर खिसकाया जाता है।
रोटेशनल साइफर के लिए सामान्य संकेतन ROT + <key> है।
सबसे ज़्यादा इस्तेमाल होने वाला रोटेशनल साइफर ROT13 है।
लैटिन वर्णमाला पर ROT13 इस तरह काम करता है:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
यह एटबैश साइफर से ज़्यादा मज़बूत है, क्योंकि इसमें 27 संभावित कुंजियाँ होती हैं और 25 काम की कुंजियाँ।
साइफरटेक्स्ट इनपुट के उसी फॉर्मेटिंग में लिखा जाता है, जिसमें स्पेस और विराम चिह्न भी शामिल होते हैं।
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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।