ट्रैक
/
Haskell
Haskell
/
अभ्यास
/
घूर्णी सिफर
घूर्णी सिफर

घूर्णी सिफर

मध्यम

निर्देश

रोटेशनल साइफर का एक इम्प्लीमेंटेशन बनाइए, जिसे कभी-कभी सीज़र साइफर भी कहा जाता है।

सीज़र साइफर एक सरल शिफ्ट साइफर है। यह 0 से 26 के बीच किसी पूर्णांक कुंजी की मदद से वर्णमाला के सभी अक्षरों की जगह बदल देता है। मॉड्यूलर अंकगणित के कारण 0 या 26 की कुंजी इस्तेमाल करने पर हमेशा वही आउटपुट मिलता है। हर अक्षर को कुंजी की वैल्यू के बराबर खिसकाया जाता है।

रोटेशनल साइफर के लिए सामान्य संकेतन ROT + <key> है। सबसे ज़्यादा इस्तेमाल होने वाला रोटेशनल साइफर ROT13 है।

लैटिन वर्णमाला पर ROT13 इस तरह काम करता है:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

यह एटबैश साइफर से ज़्यादा मज़बूत है, क्योंकि इसमें 27 संभावित कुंजियाँ होती हैं और 25 काम की कुंजियाँ।

साइफरटेक्स्ट इनपुट के उसी फॉर्मेटिंग में लिखा जाता है, जिसमें स्पेस और विराम चिह्न भी शामिल होते हैं।

उदाहरण

  • 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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।