दूसरे दिन, हमारी टीम एक भागने वाले कमरे में गई। पहेली में से एक में छह यांत्रिक स्विच का एक बोर्ड शामिल था जहां आपको एक बॉक्स को अनलॉक करने के लिए चालू और बंद का सही संयोजन खोजना था, कुछ इस तरह से:
-v-v-v-
-v-v-v-
डेवलपर्स होने के नाते, हमने फैसला किया कि यह वास्तव में पहेली को हल करने की तुलना में 2 ^ 6 = 64 संयोजनों में से हर एक को आज़माने के लिए अधिक कुशल होगा। इसलिए हमने कुछ गरीबों को कुछ बाइनरी काउंटिंग करने के लिए सौंपा:
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
और इसी तरह।
चुनौती
एक प्रोग्राम लिखें जो स्विच ऑफ स्थिति में सभी को ऊपर दिए गए स्ट्रिंग के रूप में दिया गया हो, किसी भी क्रम में चालू और बंद के सभी संयोजनों को उत्पन्न करता है।
आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। इस प्रकार, आपका प्रोग्राम या तो स्टडिन, फ़ाइल, या एकल स्ट्रिंग तर्क के माध्यम से इनपुट में ले सकता है, और आउटपुट को वापस कर सकता है या प्रिंट कर सकता है। यदि लौटाया जाता है, तो आउटपुट एक सूची / सरणी / आदि में हो सकता है। बल्कि एक ही तार से। यदि आउटपुट एक एकल स्ट्रिंग है, तो बोर्ड को नईलाइनों से अलग किया जाना चाहिए (नई रूपरेखाओं की अनुमति है)।
इनपुट स्ट्रिंग्स रेगेक्स से मेल खाएंगे r'((-v)+-)(\n(-v)+-)*'
और सभी स्विचों के साथ एक बोर्ड का प्रतिनिधित्व करेंगे । इसका मतलब कोई शून्य मामला नहीं है, और स्विच बाएं-संरेखित हैं। प्रत्येक पंक्ति में समान स्विच नहीं हो सकते हैं।
प्रत्येक आउटपुट बोर्ड इनपुट के समान सटीक प्रारूप का होना चाहिए, सिवाय इसके कि v को आवश्यकता के अनुसार ^ द्वारा प्रतिस्थापित किया जा सकता है। आउटपुट बोर्ड को किसी भी नई संख्या से अलग किया जा सकता है।
चूंकि रनटाइम स्विच की संख्या में स्वाभाविक रूप से O (2 ^ n) है, आपके कोड को किसी भी व्यवस्था में 10 से अधिक स्विच पर परीक्षण नहीं किया जाएगा।
यह कोड-गोल्फ है, इसलिए बाइट्स की संख्या में सबसे कम कोड जीतता है।
नमूना इनपुट और आउटपुट
इनपुट:
-v-
संभावित उत्पादन:
-v-
-^-
इनपुट:
-v-
-v-
संभावित उत्पादन:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
चूंकि बड़ी संख्या में स्विच के लिए आपके उत्तर की जांच करना बहुत कठिन है, यहाँ एक पवित्र जाँच उपकरण के रूप में पायथन लिपि है। (मैंने एक वर्तमान में टिप्पणी की गई स्निपेट को किसी दिए गए इनपुट फ़ाइल से अपेक्षित आउटपुट उत्पन्न करने के लिए शामिल किया है यदि आप अधिक परीक्षण मामले चाहते हैं।) यह विशेष रूप से कल्पना की तुलना में इनपुट और आउटपुट के मामले में काफी कम लचीला है; इनपुट स्ट्रिंग को 'इनपुट' नाम की फाइल में डालें और उसी निर्देशिका में 'आउटपुट' नाम की फाइल में न्यूलाइन-सेपरेटेड आउटपुट (सॉरी, नो लिस्ट फॉर्मेटिंग) डालें और चलाएं python3 sanitycheck.py
।