चुनौती
आपका कार्य ASCII वर्णों की एक स्ट्रिंग के रूप में एक पूर्णांक को एनकोड करना है, फिर कहा गया कि स्ट्रिंग बेतरतीब ढंग से फेरबदल के बाद इसे सफलतापूर्वक डिकोड कर सकती है।
आप दो प्रोग्राम / फ़ंक्शन लिखेंगे , जिसे एनकोडर और डिकोडर के रूप में संदर्भित किया जाएगा ।
एनकोडर
- इनपुट: सीमा में एक पूर्णांक ।
- आउटपुट: ASCII वर्णों का एक स्ट्रिंग (जरूरी नहीं कि मुद्रण योग्य हो)।
डिकोडर
- इनपुट: एक यादृच्छिक क्रमपरिवर्तन स्ट्रिंग के ।
- आउटपुट: पूर्णांक ।
स्कोरिंग
चलो होना अधिकतम लंबाई की के सभी संभव मूल्यों भर में । यदि एनकोडर गैर-नियतात्मक रूप से कार्य करता है (जिसे अनुमति दी गई है, तो नीचे देखें), तो की अधिकतम लंबाई होगी जो कि हो सकती है (संभवतः )।
चलो हो की लंबाई एनकोडर बाइट्स और में की लंबाई डिकोडर बाइट में।
फिर आपका स्कोर ।
सबसे कम अंक जमा करने पर विजय को सम्मानित किया जाता है ।
समय सीमा
एनकोडर और डिकोडर दोनों के निष्पादन समय पर 1 मिनट के लिए कुछ हद तक मनमानी समय सीमा है (यानी एन का एक मान )।
लक्ष्य समाधान से बचना है जो कुछ गुणों के साथ सभी दृश्यों की गणना करके एन्कोडिंग को बल प्रदान करता है। यदि आपका समाधान इससे कुछ अधिक चतुर है, तो यह सबसे अधिक संभावना है कि समय की कमी के अनुकूल होगा और इसे वैध माना जाएगा। इसी तरह, यदि यह n के कुछ बेतरतीब ढंग से चयनित मूल्यों के लिए TIO पर काम करता है तो इसे वैध माना जाएगा। अन्यथा मैं इसे अपनी मशीन पर परीक्षण करूंगा, लेकिन ध्यान दें कि यदि आपका समाधान शुद्ध ब्रूट-बल है तो यह लगभग निश्चित रूप से विफल हो जाएगा।
नियम
- एनकोडर और डिकोडर में लिखा होना चाहिए एक ही भाषा ।
- डिकोडर चाहिए उत्पादन सही पूर्णांक हर संभव परिवर्तन के लिए स्ट्रिंग के द्वारा दिया एनकोडर ।
- एनकोडर और डिकोडर कर रहे हैं नहीं करने की अनुमति दी जानकारी साझा (वैश्विक चर या फ़ाइलों के माध्यम से जैसे) किसी भी तरह से।
- के उत्पादन में एनकोडर की जरूरत नहीं हो नियतात्मक (जो है, एक ही इनपुट यदि विभिन्न उत्पादन तार का उत्पादन हो सकता एनकोडर कई बार चलाया जाता है), लेकिन डिकोडर हमेशा सही पूर्णांक लगता है चाहिए ।
- एनकोडर और डिकोडर लेने के लिए और पूर्णांक वापस आ सकते हैं में किसी भी सुविधाजनक तरीका (जैसे यदि यह ठीक है इनपुट होने के लिए
14
,"14"
या[1,4]
)। - एनकोडर हो सकता है उत्पादन स्ट्रिंग द्वारा या तो मुद्रण पर
stdout
या द्वारा लौट रहे एक स्ट्रिंग, एक सूची / सरणी पात्रों में से या किसी सूची / रेंज में पूर्णांकों की सरणी ; ध्यान दें कि डिकोडर का क्रमपरिवर्तन इनपुट के रूप में प्राप्त होगा रूप से वापस लौटे एनकोडर , तो यह स्ट्रिंग को स्वीकार करना चाहिए में एक ही प्रारूप के रूप में । - मानक खामियों को मना किया जाता है।
- यदि संभव हो, तो यह बताएं कि आपका कोड कैसे काम करता है और आपके द्वारा दावा किया गया स्कोर सही क्यों है।
उदाहरण
मान लें ।
- एनकोडर प्राप्त करता है
14
इनपुट के रूप में। यह उत्पादन हो सकता है"qwerty"
।- डिकोडर का क्रमपरिवर्तन प्राप्त करता है
"qwerty"
उदाहरण के लिए, के रूप में इनपुट"tweyqr"
। इसका आउटपुट14
(किसी भी सुविधाजनक प्रारूप में) होना चाहिए ।
एनकोडर लौटे किया जा सकता था [113,119,101,114,116,121]
और साथ ही, जिस स्थिति में डिकोडर प्राप्त होता है (उदाहरण के लिए) [116,119,101,121,113,114]
।
ध्यान दें कि एनकोडर द्वारा लौटाए गए स्ट्रिंग में गैर-मुद्रण योग्य ASCII वर्ण (लेकिन हमेशा सीमा में [0x00, ..., 0x7F]
) शामिल हो सकते हैं।