परिचय
संख्याओं के मूल्यों को संशोधित करने की अवधारणा के आधार पर फोर्ट एक बहुत ही अजीब गूढ़ भाषा है। फोर्ट संख्या में स्थिरांक नहीं बल्कि चर हैं, आप LET
उन्हें नए मान निर्दिष्ट करने के लिए अनुदेश का उपयोग कर सकते हैं।
उदाहरण के लिए, LET 2=4-1
अब से निष्पादित करने के बाद 2
मान लेता है 3
, जिसका अर्थ है कि जब भी 2
किसी अभिव्यक्ति में मूल्य आता है, तो इसके बजाय इसे "प्रतिस्थापित" किया जाता है 3
। (1+1)*2
अब अभिव्यक्ति का मूल्यांकन होगा 9
।
फॉरेस्ट में यह निर्देश स्टोरिंग सूचना के लिए और प्रवाह नियंत्रण के लिए दोनों का उपयोग किया जाता है (लाइनें क्रमांकित हैं और उनकी संख्या के मूल्य को बदलकर आप उनके निष्पादन का क्रम निर्धारित कर सकते हैं)। इस चुनौती में हम इस दूसरे पहलू से नहीं निपटेंगे।
चुनौती
आपको फोर्ट के LET
भावों के सरलीकृत सबसेट के लिए एक दुभाषिया लिखना आवश्यक है ।
आपको इस व्याकरण के बाद लाइनों की एक श्रृंखला इनपुट के रूप में प्राप्त होगी:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
नोट: यह व्याकरण मान्य Forte नहीं है क्योंकि इसमें लाइन नंबर, LET और कोष्ठक का अभाव है (जो हमेशा अनिवार्य होते हैं)
यही है, आपको केवल कंप्यूटिंग योगों और संख्याओं को मान असाइन करने की आवश्यकता होगी। कोष्ठक इनपुट में मौजूद नहीं होगा, और प्रत्येक अभिव्यक्ति को बाएं से दाएं का मूल्यांकन करने की आवश्यकता होगी: सावधान रहें कि आंशिक परिणाम पुनर्वितरण से प्रभावित होते हैं!
नंबर हमेशा गैर-नकारात्मक पूर्णांक होंगे, आपकी भाषा के मूल पूर्णांक प्रकार (या 2 ^ 32, जो भी अधिक हो) की सीमा तक।
प्रत्येक पंक्ति के लिए आपको अभिव्यक्ति के परिणाम का उत्पादन करना चाहिए और इस परिणाम को पहले नंबर के (संभवतः पुन: असाइन किए गए) मान पर असाइन करना चाहिए, जो प्रभावित करेगा कि निम्नलिखित पंक्तियों की व्याख्या कैसे की जाएगी।
यह कोड-गोल्फ है , सबसे छोटा कोड (बाइट्स में) जीतता है!
अन्य नियम
- इनपुट प्रारूप लचीला है, उदाहरण के लिए आप एक ही स्ट्रिंग को ले सकते हैं newlines, तार की एक सूची, संख्याओं की सूची की सूची ... यह आउटपुट के लिए जाता है, जब तक यह स्पष्ट है कि प्रत्येक अभिव्यक्ति का परिणाम क्या है इनपुट।
- आप प्रत्येक पंक्ति के लिए एक बार कॉल करके एक फ़ंक्शन, एक पूर्ण प्रोग्राम, या एक REPL वातावरण में चलाने के लिए एक समाधान प्रस्तुत कर सकते हैं।
- मानक कमियां निषिद्ध हैं, विशेष रूप से आप अपने कोड में एक बाहरी फोर्ट इंटरप्रेटर को नहीं बुला सकते हैं।
उदाहरण
ये सभी एक ही इनपुट के भाग हैं। प्रत्येक पंक्ति के बाद उस पंक्ति के सापेक्ष अपेक्षित आउटपुट दिखाया जाता है, कभी-कभी एक टिप्पणी के साथ प्रासंगिक पुनर्मूल्यांकन (आवश्यक आउटपुट का हिस्सा नहीं) का संकेत देता है।
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
वैध है ("संख्या हमेशा गैर-नकारात्मक पूर्णांक होगी")
0
कोई मान्य संख्या?