यहाँ अंग्रेजी वर्णमाला के अक्षर क्रम से हैं:
e t a o i n s h r d l c u m w f g y p b v k j x q z
यही है, eसबसे अधिक इस्तेमाल किया जाने वाला पत्र है, और zकम से कम सामान्य है। ( विकिपीडिया से डेटा ।)
आपकी चुनौती कुछ ROT-n'd पाठ लेने की है, जैसे:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
यह ROT-21 (42 का आधा) के माध्यम से "एनक्रिप्टेड" है कि "thisisaverysecretmessagetisverysecureandsafe" पाठ है। आपका प्रोग्राम, ऊपर की आवृत्ति तालिका का उपयोग करके, यह निर्धारित करने में सक्षम होना चाहिए कि प्रत्येक वर्ण को कितना घुमाया गया था और मूल पाठ।
(यदि आप ROT-n से परिचित नहीं हैं, तो यह अनिवार्य रूप से प्रत्येक वर्ण को शिफ्ट कर रहा है n। उदाहरण के लिए, ROT-2 में a -> c, b -> d, ..., x -> z, y -> a, z -> b।)
कैसे, आप पूछें? (बहुत भोली) एल्गोरिथ्म जो आपको उपयोग करना चाहिए वह है:
- प्रत्येक के लिए
nसे0करने के लिए25समावेशी, ROT- लागू-nइनपुट स्ट्रिंग के लिए। (नकारात्मकnक्योंकि हम एन्क्रिप्शन को उलटना चाहते हैं । ROT- ROT--nके बराबर है26-n, अगर यह कोई आसान है।) - वर्णों के सापेक्ष आवृत्तियों को जोड़कर प्रत्येक इनपुट स्ट्रिंग को संख्या में परिवर्तित करें।
eहै0,tहै1,aहै2आदि उदाहरण के लिए, स्ट्रिंग के लिए इसी नंबर"hello"7 + 0 + 10 + 10 + 3 = 30 है। - वह स्ट्रिंग ढूंढें जिसमें सबसे कम संख्या हो।
- उत्पादन कि स्ट्रिंग और इसके अनुरूप
n।
नियम:
- इनपुट कहीं भी वाजिब हो सकता है (STDIN, फंक्शन आर्ग्युमेंट्स, किसी फाइल आदि से), और इसलिए आउटपुट (STDOUT, फंक्शन रिटर्न वैल्यू, फाइल के लिए इत्यादि) कर सकता है।
- आप एक अलग एल्गोरिथ्म का उपयोग कर सकते हैं, जब तक कि यह हमेशा समान परिणाम उत्पन्न करता है। उदाहरण के लिए,
z0 होना औरe25 होना और उच्चतम संख्या चुनना भी ठीक है। - यदि दो तारों में समान स्कोर हैं, तो आप उनमें से किसी एक (या दोनों) को आउटपुट करना चुन सकते हैं। यह एक एज केस है और आपको इसका हिसाब नहीं रखना है।
- यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा!
परीक्षण के मामलों:
इनपुट: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
आउटपुट:21 thisisaverysecretmessagethatisverysecureandsafe
इनपुट: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
आउटपुट:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
इनपुट: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
आउटपुट:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
इनपुट: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
आउटपुट:2 hereisthefinaltestcasethatyoumustdecrypt
यदि आप सोच रहे थे, तो यहां जावास्क्रिप्ट परीक्षण कोड का एक JSFiddle मैंने लिखा है, जो मैंने उस पर फेंकने वाले सभी परीक्षण मामलों को सफलतापूर्वक डिक्रिप्ट किया है।
wtaadदेना चाहिए0 wtaadपरिणाम के रूप में, औरvszzcदेना चाहिए25 wtaadपरिणाम के रूप में।