स्टैक कैट्स एक प्रतिवर्ती, स्टैक-आधारित भाषा है। इसकी प्रतिवर्ती प्रकृति कुछ अजीब छोरों के लिए बनाती है। यह चुनौती सशर्त लूप के बारे में है (...)
। जब इन छोरों को कुछ तरीकों से घोंसला बनाया जाता है, तो घोंसले की गहराई को कम करने के लिए कोड को बदलना संभव है। यहां नियम हैं (जहां A
और B
मनमाने ढंग से स्निपेट के लिए खड़े हैं):
- जब एक लूप दूसरे लूप से शुरू होता है, तो हम आंतरिक लूप को सामने की तरफ निकाल सकते हैं:
((A)B)
बन जाता है(A)(B)
। - जब एक लूप दूसरे लूप के साथ समाप्त होता है, तो हम आंतरिक लूप को अंत तक निकाल सकते हैं:
(B(A))
बन जाता है(B)(A)
। - खाली छोरों,
()
को कार्यक्रम से पूरी तरह से हटाया जा सकता है। एक कोरोलरी के रूप में (अन्य नियमों के साथ संयोजन के रूप में),((A))
समकक्ष है(A)
।
एकमात्र नेस्टेड लूप जो बने रहेंगे (A(B)C)
, फॉर्म के हैं , जहां A
, B
और C
गैर-खाली हैं।
चुनौती
आपको एक मान्य स्टैक कैट्स प्रोग्राम दिया गया है और आपका कार्य उपरोक्त परिवर्तनों का उपयोग करते हुए, खाली लूपों को छोड़ते हुए, जितना संभव हो उतना कम होना चाहिए।
एक मान्य स्टैक कैट्स प्रोग्राम ...
- ... केवल पात्रों के होते हैं
()/\<>[]{}!"*+-:=ITX^_|
। - ... दर्पण समरूपता है (उदाहरण के
\(]{}!{}[)/
लिए एक वैध कार्यक्रम है, लेकिन/|/
नहीं है)। - ... सही ढंग से मिलान और नेस्टेड है (
()
और , और हमेशा की तरह मिलान करने की आवश्यकता नहीं है, हालांकि वे दर्पण समरूपता की आवश्यकता के कारण जोड़े में दिखाई देंगे)।{}
[]
<>
\/
आप इनपुट के रूप में या तो एक स्ट्रिंग या वर्णों की सूची ले सकते हैं, लेकिन आउटपुट को उसी प्रारूप में प्रस्तुत करना होगा।
आप एक प्रोग्राम या फ़ंक्शन लिख सकते हैं और इनपुट प्राप्त करने और आउटपुट प्रदान करने के हमारे किसी भी मानक तरीके का उपयोग कर सकते हैं। ध्यान दें कि इन खामियों को डिफ़ॉल्ट रूप से मना किया जाता है।
यह कोड-गोल्फ है , इसलिए सबसे छोटा वैध उत्तर - बाइट्स में मापा जाता है - जीतता है।
परीक्षण के मामलों
परीक्षण के मामले दो लाइनें हैं (इनपुट और आउटपुट), जिसे खाली लाइनों द्वारा अलग किया जाता है। ध्यान दें कि एक आउटपुट खाली है। आपको खाली इनपुट का समर्थन करने की आवश्यकता है (जिसके परिणामस्वरूप खाली आउटपुट होना चाहिए)।
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)
लूप के लिए मान्य है ।
\^/
कोष्ठक के अंदर क्यों है ?
(<|>((X((T)))[_]))
और (([_](((T))X))<|>)
।
((A)B(C))
बन जाएगा (A)(B)(C)
: ((A)B(C))
→ (A)(B(C))
(नियम 1) → (A)(B)(C)
(नियम 2)।
()
, इसलिए एक इनपुट{{A}B}
जैसा रहेगा और{A}{B}
वैसे ही नहीं निकाला जाएगा ?