इस प्रश्न को पूछने के लिए पिछले कुछ प्रयास हुए हैं, लेकिन न तो इस साइट पर आधुनिक मानकों के अनुरूप हैं। मेटा पर चर्चा के अनुसार , मैं इसे अपने आधुनिक नियमों के तहत उचित प्रतिस्पर्धा के लिए अनुमति देता हूं।
पृष्ठभूमि
एक पैलिंड्रोम एक स्ट्रिंग है जो "आगे और पीछे एक ही पढ़ता है", अर्थात स्ट्रिंग का उलटा स्ट्रिंग के समान ही होता है। हम यहां "सुविधाजनक पैलिंड्रोम्स" के बारे में बात नहीं कर रहे हैं, लेकिन एक सख्त चरित्र-दर-चरित्र उलट; उदाहरण के लिए, ()()
एक पैलेंड्रोम नहीं है, लेकिन ())(
है।
काम
एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में एक स्ट्रिंग एस (या आपकी भाषा में उपयुक्त समतुल्य) लेता है , और इसमें एक आउटपुट क्यू (आपकी पसंद का एक प्रकार) है। आप इनपुट लेने और आउटपुट प्रदान करने के लिए किसी भी उचित साधन का उपयोग कर सकते हैं ।
- जब इनपुट S एक पैलिंड्रोम होता है, तो आउटपुट Q का मान A होना चाहिए (जो कि किसी भी palindromic S के लिए समान है )।
- जब इनपुट S एक palindrome नहीं होता है, तो आउटपुट Q का मान B होना चाहिए (जो कि किसी भी गैर-palindromic S के लिए समान हो )।
- A और B एक दूसरे से अलग होना चाहिए।
या दूसरे शब्दों में: सभी palindromes को एक मान में, और सभी गैर-palindromes को दूसरे में मैप करें।
इसके अतिरिक्त, आप जो प्रोग्राम या फ़ंक्शन लिखते हैं, वह स्वयं एक palindrome होना चाहिए (अर्थात इसका स्रोत कोड palindromic होना चाहिए), जो इसे प्रतिबंधित-स्रोत चुनौती बनाता है ।
स्पष्टीकरण
- हालांकि
true
औरfalse
के लिए स्पष्ट विकल्प हैं एक और बी , आप के लिए अपने "विलोमपद" किसी भी दो अलग-अलग मान का उपयोग कर सकते और आउटपुट है, जो जरूरत बूलियन्स नहीं हो "विलोमपद नहीं है।" - हम यहां चरित्र स्तर पर स्ट्रिंग रिवर्सल को परिभाषित कर रहे हैं;
éé
इस कार्यक्रम की यूटीएफ -8 या लैटिन -1 में एन्कोड किए जाने के बावजूद यह यूटीएफ -8 एन्कोडिंग के बाद ओक्टेट्स का एक पैलिंड्रोमिक अनुक्रम नहीं है या नहीं, इसकी परवाह किए बिना। - हालांकि, भले ही आपके प्रोग्राम में गैर-एएससीआईआई अक्षर हों, लेकिन इसके लिए केवल एएससीआईआई इनपुट के लिए काम करना होगा। विशेष रूप से, इनपुट S में केवल मुद्रण योग्य ASCII वर्ण (अंतरिक्ष सहित, लेकिन न्यूलाइन शामिल नहीं होंगे)। अन्य बातों के अलावा, इसका मतलब है कि यदि आप वर्णों के अनुक्रम के बजाय इनपुट को बाइट्स के अनुक्रम के रूप में मानते हैं, तो आपका कार्यक्रम अभी भी विनिर्देशन का अनुपालन करेगा (जब तक कि आपकी भाषा का आई / ओ एन्कोडिंग बहुत अजीब नहीं है)। जैसे, पिछली बुलेट में एक पैलिंड्रोम की परिभाषा वास्तव में मायने रखती है जब जाँच की जाती है कि कार्यक्रम का सही रूप है।
- एक टिप्पणी या स्ट्रिंग शाब्दिक में आधा कार्यक्रम छिपाना, जबकि गैर-जिम्मेदार होना, कानूनी है; आपको लंबाई पर बनाया जा रहा है, रचनात्मकता नहीं, इसलिए अपने कार्यक्रम को सुनिश्चित करने के लिए "उबाऊ" तरीकों का उपयोग करने के लिए स्वतंत्र महसूस करें। बेशक, क्योंकि आपको लंबाई पर स्कोर किया जा रहा है, आपके कार्यक्रम के कुछ हिस्सों में जो कुछ भी नहीं करते हैं वे आपके स्कोर को खराब करने वाले हैं, इसलिए आपके कार्यक्रम के दोनों हिस्सों का उपयोग करने में सक्षम होने की संभावना है यदि आप इसे प्रबंधित कर सकते हैं। ।
- क्योंकि जीत मानदंड बाइट्स में मापा जाता है, आपको एन्कोडिंग निर्दिष्ट करना होगा जिसमें आपका प्रोग्राम इसे स्कोर करने में सक्षम होने के लिए लिखा गया है (हालांकि कई मामलों में यह स्पष्ट होगा कि आप किस एन्कोडिंग का उपयोग कर रहे हैं)।
विजय की कसौटी
भले ही कार्यक्रम को चरित्र स्तर पर एक तालमेल बनाने की आवश्यकता है, हम यह देखने के लिए बाइट्स का उपयोग कर रहे हैं कि कौन जीतता है। विशेष रूप से, आपका कार्यक्रम जितना छोटा होगा, बाइट्स में मापा जाएगा, उतना ही बेहतर होगा; यह एक कोड-गोल्फ चुनौती है। सबमिशन (विशेष रूप से एक ही भाषा में सबमिशन) की तुलना करने की अनुमति देने के लिए, अपने प्रोग्राम के लिए अपने सबमिशन के हेडर में एक बाइट काउंट रखें (प्लस कैरेक्टर काउंट, अगर यह बाइट्स की संख्या से अलग है)।
(
साथ a
और )
साथ की कोशिश करो b
। है abab
विलोमपद? नहीं, यह होना ही होगा abba
। तब ()()
या तो कोई तालमेल नहीं है; यह होना ही होगा ())(
।
()() is not a palindrome, but ())( is.
बधाई हो, आपने इसे रेडिट पर बनाया है!