जैक को C प्रोग्रामिंग लैंग्वेज पसंद है, लेकिन भाव लिखने से नफरत है जैसे V=a*b*h;
मानों को गुणा करना।
वह V=abh;इसके बजाय लिखना चाहेंगे , क्यों abhप्रतीक int a, b, h;परिभाषित किए जाने के बारे में विलाप करना चाहिए क्योंकि वे परिभाषित नहीं हैं, इसलिए हम गुणा कर सकते हैं?
उसे एक ऐसे पार्सर को लागू करने में मदद करें जो एक एकल गुणा शब्द को निर्धारित करता है, बशर्ते कि वर्तमान दायरे में परिभाषित चर का सेट ज्ञात हो।
सरलता के लिए, संख्या (जैसे 2*a*b) में गुणा करना ध्यान में नहीं लिया जाता है, केवल चर दिखाई देते हैं।
इनपुट एक गुणा शब्द T है , जो regexp को पूरा करता है:
[a-zA-Z_][a-zA-Z_0-9]*
और एक चर सेट जेड ।
चर सेट Z पर शब्द का एक P पार्सिंग पी निम्नलिखित को पूरा करने वाला एक स्ट्रिंग है:
*P से सभी आवृत्तियों को हटाने के बाद हम T प्राप्त करते हैं,- या तो जेड से एक चर नाम है या जेड से उचित चर नाम शामिल हैं जो एकल
*वर्णों द्वारा विभाजित हैं ।
समाधान को किसी शब्द की सभी पार्सिंग्स को प्रिंट करना चाहिए।
नमूना:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
इनपुट (चर की सूची और शब्द) किसी भी तरह से भाषा के लिए उपयुक्त हो सकते हैं।
आउटपुट किसी भी समझदार रूप में हो सकता है (प्रति पंक्ति या एक अल्पविराम से अलग की गई सूची आदि) - लेकिन यह अस्पष्ट और पढ़ने के लिए संभव होना चाहिए।
खाली आउटपुट स्वीकार्य है अगर किसी शब्द का संभावित पार्सिंग नहीं है (उदाहरण में मैंने इस्तेमाल किया - 'स्पष्टता के लिए')।
यह एक कोड गोल्फ है, इसलिए सबसे छोटा कोड जीतता है।
a*aaa aaa*aऔर नहींab*c c*ab
ab*cहै कि एक गलत पार्स है, क्योंकिcएक अनुमत चर नहीं है।