ट्रैक
/
Common Lisp
Common Lisp
/
अभ्यास
/
क्रिप्टो स्क्वायर
क्रिप्टो स्क्वायर

क्रिप्टो स्क्वायर

मध्यम

निर्देश

गुप्त संदेश तैयार करने का क्लासिक तरीका लागू कीजिए, जिसे स्क्वायर कोड कहते हैं।

आपको एक अंग्रेज़ी टेक्स्ट दिया जाएगा, और उस टेक्स्ट का एन्कोड किया हुआ रूप देना है।

सबसे पहले इनपुट को सामान्य किया जाता है: अंग्रेज़ी टेक्स्ट से स्पेस और विराम चिह्न हटा दिए जाते हैं और संदेश को छोटे अक्षरों में बदल दिया जाता है।

इसके बाद इन सामान्य किए गए अक्षरों को पंक्तियों में बाँटा जाता है। इन पंक्तियों को बीच में नई लाइनें डालकर छापने पर एक आयत बनाती हुई माना जा सकता है।

उदाहरण के लिए, यह वाक्य

"If man was meant to stay on the ground, god would have given us roots."

सामान्य करने पर यह बनता है:

"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"

प्लेनटेक्स्ट को एक ऐसे आयत में व्यवस्थित किया जाना चाहिए जो जितना संभव हो सके वर्ग के करीब हो। आयत का आकार संदेश की लंबाई से तय होना चाहिए।

अगर c कॉलमों की संख्या है और r पंक्तियों की संख्या है, तो r x c आयत के लिए वह सबसे छोटा पूर्णांक c निकालिए जिसके लिए ये बातें सही हों:

  • r * c >= length of message,
  • और c >= r,
  • और c - r <= 1.

हमारा सामान्य किया गया टेक्स्ट 54 अक्षरों का है, इसलिए आयत c = 8 और r = 7 वाला बनता है:

"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots  "

कोड किया गया संदेश कॉलमों को बाएँ से दाएँ नीचे की ओर पढ़ने पर मिलता है।

ऊपर दिया गया संदेश इस तरह कोड किया जाता है:

"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"

एन्कोड किए गए टेक्स्ट को ऐसे टुकड़ों में दीजिए जो पूरे आयत (r X c) भर दें, यानी r लंबाई के c टुकड़े, जो स्पेस से अलग हों। जो संदेश पूरे आयत से n अक्षर कम हों, उनमें अंतिम n टुकड़ों में से हर एक के अंत में एक स्पेस लगाइए।

"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn  sseoau "

ध्यान दीजिए कि अगर इन टुकड़ों को एक के ऊपर एक रखा जाए, तो सिफरटेक्स्ट को देखकर ही मूल संदेश फिर से पढ़ा जा सकता है:

"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Common Lisp Exercism

क्रिप्टो स्क्वायर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Common Lisp को 27 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।