<div> <p>एक्सप्रेशन ट्री को enum और पैटर्न मैचिंग का उपयोग करके रूपांतरित करना</p> </div>

Rust Hard enums

कार्य «<div> <p>एक्सप्रेशन ट्री को enum और पैटर्न मैचिंग का उपयोग करके रूपांतरित करना</p> </div>»

दिया गया है एक अंकगणितीय व्यंजक, जो बाइनरी ट्री के रूप में प्रस्तुत है। ट्री का प्रत्येक नोड या तो एक संख्या (लीफ) है, या एक संक्रिया (जोड़, घटाव, गुणा, भाग) है जिसके दो चाइल्ड हैं। एक फ़ंक्शन लागू करना आवश्यक है जो ऐसे ट्री को स्वीकार करता है और निम्नलिखित नियमों के अनुसार सरलीकृत एक नया ट्री लौटाता है: यदि कोई नोड एक संक्रिया है, और उसके दोनों चाइल्ड संख्याएँ हैं, तो परिणाम की गणना करें और नोड को एक संख्या से बदलें; यदि कोई एक चाइल्ड संख्या 0 है और संक्रिया गुणा है, तो नोड को 0 से बदलें; यदि कोई एक चाइल्ड संख्या 0 है और संक्रिया जोड़ है, तो नोड को दूसरे चाइल्ड से बदलें; यदि संक्रिया भाग है, और भाजक संख्या 1 है, तो नोड को भाज्य से बदलें; यदि संक्रिया घटाव है, और दोनों चाइल्ड बराबर हैं, तो नोड को संख्या 0 से बदलें। जब तक संभव हो, पुनरावर्ती रूप से लागू करें। यह गारंटी है कि सभी संक्रियाएँ पूर्णांक हैं, भाग पूर्णांक है जो नीचे की ओर पूर्णांकित होता है। इनपुट डेटा: पहले संख्या n — नोड्स की संख्या। फिर n पंक्तियाँ, प्रत्येक प्रारूप में: नोड का प्रकार ("num" या "op"), "num" के लिए — मान (पूर्णांक), "op" के लिए — संक्रिया का चिह्न ('+', '-', '*', '/') और दो पूर्णांक — बाएँ और दाएँ चाइल्ड के इंडेक्स (0-इंडेक्सिंग)। रूट का इंडेक्स हमेशा 0 होता है। आउटपुट: सरलीकरण के बाद प्रत्येक नोड के लिए उसका प्रकार और मान/संक्रिया उसी प्रारूप में प्रिंट करें (नोड्स का क्रम मूल ट्री के अनुसार हो, भले ही नोड एक संख्या बन गया हो, उसका इंडेक्स बनाए रखें)। यदि नोड एक संख्या बन गया है, तो "num मान" प्रिंट करें; यदि संक्रिया बना हुआ है, तो "op चिह्न बायां_इंडेक्स दायां_इंडेक्स" प्रिंट करें (चाइल्ड के इंडेक्स सरलीकृत ट्री से हों)।

इनपुट प्रारूप

पूर्णांक n (1 ≤ n ≤ 1000)। फिर n पंक्तियाँ: संख्या के लिए: "num x"; संक्रिया के लिए: "op op_symbol left right"।

आउटपुट प्रारूप

n पंक्तियाँ: प्रत्येक नोड के लिए मूल क्रम में: "num value" या "op symbol left right"

उदाहरण

उदाहरण 1

इनपुट
3 num 5 num 3 op + 0 1
आउटपुट
num 5 num 3 op + 0 1

उदाहरण 2

इनपुट
cat dog elephant bird
आउटपुट
cat dog bird elephant

उदाहरण 3

इनपुट
5 num 0 num 7 op * 0 1 num 2 op + 2 3
आउटपुट
num 0 num 7 op * 0 1 num 2 op + 2 3

उदाहरण 4

इनपुट
a ab abc abcd
आउटपुट
a ab abc abcd
main.rs