Quylthulg क्रिस Pressey की एक भाषा है जो पैन्फ़िक्स को कॉल करते हुए इनफ़िक्स नोटेशन की समस्या को हल करने का प्रयास करती है :
उपसर्ग की तरह, पैनिफ़िक्स को एक डिफ़ॉल्ट ऑपरेटर पूर्वता को ओवरराइड करने के लिए कोष्ठक जैसे आर्कियन कंट्रीब्यूशन की तैनाती की आवश्यकता नहीं होती है। एक ही समय में, पैनिफ़िक्स शर्तों को उसी क्रम और तरीके से निर्दिष्ट करने की अनुमति देता है जैसे कि इन्फिक्स, निर्विवाद रूप से उन लोगों के लिए स्वाभाविक और सहज संकेतन है जो इसके आदी हो गए हैं।
प्रीफ़िक्स या पोस्टफ़िक्स की असंदिग्धता के साथ आपको इन्फिक्स नोटेशन की सुविधा कैसे मिलती है? तीनों का उपयोग करें, बिल्कुल!
=y=+*3*x*+1+=
अधिक औपचारिक रूप से, चलो +
एक ऑपरेटर है, और a
और b
भाव हो। फिर (a+b)
एक वैध (कोष्ठक) infix अभिव्यक्ति है, उस अभिव्यक्ति का पैनिफ़िक्स प्रतिनिधित्व है +a+b+
, जहां juxtaposition संघनन का प्रतिनिधित्व करता है।
आपका लक्ष्य पैन्फ़िक्स स्ट्रिंग लेना है और इसे पूरी तरह से कोष्ठक में बदलना है:
(y=((3*x)+1))
सरलता के लिए, हम निम्नलिखित बदलाव करेंगे:
- ऑपरेटर्स केवल दो अद्वितीय वर्णों से मिलकर बना सकते हैं (आप किसी भी चुन सकते हैं, लेकिन यहां मैं उपयोग करूंगा
*
और+
)। - केवल एक शाब्दिक है, जिसमें एक और विशिष्ट चरित्र होता है (आप किसी को भी चुन सकते हैं, लेकिन यहां मैं उपयोग करूंगा
_
)। - इनपुट एक अच्छी तरह से गठित पैनफिक्स अभिव्यक्ति होगी।
के लिए जटिलता , हम निम्नलिखित परिवर्तन कर देंगे:
- ऑपरेटर्स किसी भी सकारात्मक वर्ण को शामिल कर सकते हैं , केवल एक ही नहीं।
यह चुनौती को और अधिक कठिन बना देता है क्योंकि आप आवश्यक रूप से यह निर्धारित नहीं कर सकते हैं कि ऑपरेटर वर्णों के दिए गए स्ट्रिंग को बाकी स्ट्रिंग को देखे बिना कैसे विभाजित किया जाए।
यहाँ चुनौती के लिए एक संदर्भ कार्यान्वयन है , @ user202729 के सौजन्य से।
परीक्षण के मामलों
format: input -> output
+*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_)))
**++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_)))
***_**_***_* -> ((_**_)*_)
+_+_+ -> (_+_)
*+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_)
*++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_)
+**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_)))
+**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_)))
+*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_)))
**_**_**_*_****_* -> ((_*(_*(_*_)))*_)
मैंने इस चुनौती के लिए इन्फिक्स स्ट्रिंग्स उत्पन्न करने के लिए इस प्रोग्राम का उपयोग किया (पैनिफ़िक्स में परिवर्तित करना तुच्छ था, लेकिन उलटा नहीं है)।
**_**_**_*_****_*
। मैंने जिन उत्तरों का परीक्षण किया है वे सभी इसे विफल कर चुके हैं।
(_ + _)
?