उपसर्ग संकेतन में, ऑपरेटर तर्क से पहले आता है, इसलिए आप कल्पना कर सकते हैं कि ऑपरेटर कॉल next()
करता है जिसे पुनरावर्ती कहा जाता है। Infix संकेतन में, ऑपरेटर तर्कों के बीच जाता है, इसलिए आप इसे केवल एक पेड़ के रूप में कल्पना कर सकते हैं। उपसर्ग संकेतन में, ऑपरेटर तर्क के बाद आता है, इसलिए आप इसे स्टैक-आधारित के रूप में कल्पना कर सकते हैं।
किसी भी उपप्रकार संकेतन में, ऑपरेटर कहीं भी जा सकता है * । यदि कोई ऑपरेटर दिखाता है और पर्याप्त तर्क नहीं हैं, तो ऑपरेटर तब तक इंतजार करता है जब तक कि पर्याप्त तर्क न हों। इस चुनौती के लिए, आपको एक बहुत ही मूल उपसर्ग मूल्यांकनकर्ता को लागू करना है। (ध्यान दें कि कोई भी उपसर्ग एक मनोरंजक भाषा है जिसे मैंने त्याग दिया है कि आप यहाँ के साथ खेल सकते हैं या यहाँ देख सकते हैं )
आपको निम्न आदेशों का समर्थन करने की आवश्यकता होगी:
(एरिटी 1)
- डुप्लिकेट
- नकारात्मक
(एरिटी 2)
- इसके अलावा
- गुणन
- समानता: रिटर्न
0
या1
।
आप इन आदेशों के लिए किसी भी पांच गैर-व्हाट्सएप प्रतीकों का उपयोग करना चुन सकते हैं। प्रदर्शनकारी उद्देश्यों के लिए, मैं "
डुप्लिकेट के ×
रूप में, गुणन के +
रूप में और इसके अतिरिक्त का उपयोग करूंगा ।
शाब्दिक के लिए, आपको केवल गैर-नकारात्मक पूर्णांक का समर्थन करने की आवश्यकता है, लेकिन आपके दुभाषिया को सभी पूर्णांकों (आपकी भाषा के भीतर (उचित) पूर्णांक सीमा) में समाहित करने में सक्षम होना चाहिए।
एक उदाहरण पर एक नज़र लेते हैं: 10+5
। भंडारण को एक स्टैक के रूप में व्यवहार करना चाहिए, न कि एक कतार के रूप में। तो पहले, स्टैक पर शुरू होता है []
, और कतार ऑपरेटर की सूची शुरू होती है []
। फिर, शाब्दिक 10
मूल्यांकन किया जाता है जो स्टैक बनाता है [10]
। इसके बाद, ऑपरेटर +
का मूल्यांकन किया जाता है, जिसे दो तर्कों की आवश्यकता होती है। हालाँकि, स्टैक पर केवल एक तर्क है, इसलिए कतारबद्ध ऑपरेटर सूची बन जाती है ['+']
। फिर, शाब्दिक 5
मूल्यांकन किया जाता है जो स्टैक बनाता है [10, 5]
। इस बिंदु पर, ऑपरेटर '+'
का मूल्यांकन किया जा सकता है, इसलिए यह स्टैक [15]
और कतार बना रहा है []
।
अंतिम परिणाम होना चाहिए [15]
के लिए + 10 5
, 10 + 5
, और 10 5 +
।
चलो एक कठिन उदाहरण पर एक नज़र लेते हैं: 10+"
। स्टैक और कतार के रूप में []
और शुरू करते हैं []
। 10
पहले मूल्यांकन किया जाता है जो स्टैक बनाता है [10]
। अगला, +
मूल्यांकन किया जाता है, जो स्टैक को नहीं बदलता है (क्योंकि पर्याप्त तर्क नहीं हैं) और कतार बनाता है ['+']
। फिर, "
मूल्यांकन किया जाता है। यह तुरंत चल सकता है इसलिए यह स्टैक बना रहा है [10, 10]
। +
अब मूल्यांकन किया जा सकता है ताकि ढेर [20]
और कतार बन जाए []
। अंतिम परिणाम है [20]
।
संचालन के आदेश के बारे में क्या?
आइए एक नजर डालते हैं ×+"10 10
। स्टैक और कतार दोनों के रूप में शुरू []
:
×
: ढेर अपरिवर्तित है और कतार बन जाती है['×']
।+
: ढेर अपरिवर्तित है और कतार बन जाती है['×', '+']
।"
: ढेर अपरिवर्तित है और कतार बन जाती है['×', '+', '"']
।10
: स्टैक बन जाता है[10]
। भले ही×
पहले ऑपरेटर का मूल्यांकन किया जाना चाहिए क्योंकि यह पहले दिखाई देता है,"
तुरंत चल सकता है और इससे पहले कि कोई भी ऑपरेटर नहीं चला सकता है, इसलिए इसका मूल्यांकन किया जाता है। ढेर बन जाता है[10, 10]
और कतार['×', '+']
।×
अब मूल्यांकन किया जा सकता है, जो स्टैक[100]
और कतार बनाता है['+']
।10
: स्टैक बन जाता है[100, 10]
, जो+
मूल्यांकन करने की अनुमति देता है। ढेर बन जाता है[110]
और कतार[]
।
अंतिम परिणाम है [110]
।
इन प्रदर्शनों में उपयोग की जाने वाली आज्ञाएँ उपसर्ग भाषा के अनुरूप हैं; हालाँकि, अंतिम उदाहरण मेरे दुभाषिया में बग के कारण काम नहीं करेगा। (डिस्क्लेमर: आपके सबमिशन का उपयोग किसी भी उपप्रकार दुभाषिया में नहीं किया जाएगा)
चुनौती
5 गैर-व्हॉट्सएप गैर-अंक वर्णों के एक सेट का चयन करें और ऊपर दिए गए विनिर्देशों के अनुसार एक उपसर्ग दुभाषिया बनाएं। आपका कार्यक्रम या तो एकवचन सरणी या इसके द्वारा निहित मूल्य को आउटपुट कर सकता है; यह गारंटी दी जाती है कि निष्पादन के अंत में मूल्यों के ढेर में केवल एक मूल्य होगा और निष्पादन के अंत में ऑपरेटरों की कतार खाली हो जाएगी।
यह कोड-गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा कोड है।
परीक्षण के मामलों
इन परीक्षण मामलों के लिए, डुप्लिकेट है "
, नकारात्मक है -
, इसके अलावा +
, गुणन है ×
, और समानता है =
।
Input -> Output
1+2×3 -> 9
1"+"+ -> 4
2"××" -> 16
3"×+" -> 18
3"+×" -> 36
123"= -> 1 ("= always gives 1)
1+2=3 -> 1
1"=2+ -> 3
1-2-+ -> -3
-1-2+ -> 3 (hehe, the `-1` becomes `+1` at the `-` rather than making the `2` a `-1`)
+×"10 10 -> 200 (after the 10 is duplicated (duplication is delayed), 10 + 10 is performed and then 20 * 10, giving 200)
नियम
- स्टैंडर्ड लोफॉल्स लागू होते हैं
- यदि आप चाहें तो आप किसी भी उपप्रकार के आधिकारिक दुभाषिया को ले सकते हैं और उसे गोल्फ में डाल सकते हैं। बुरी तरह से हारने की उम्मीद है।
इनपुट को एक स्ट्रिंग और आउटपुट के रूप में दिया जाएगा एक सरणी, एक एकल पूर्णांक, या तो स्ट्रिंग प्रतिनिधित्व के रूप में। आप मान सकते हैं कि इनपुट में केवल स्थान, अंक और आपके द्वारा चुने गए 5 वर्ण होंगे।
* वास्तव में ऐसा नहीं है
0
और 1
?
×+"10 10
परीक्षण के मामलों में शामिल होना चाहिए , या व्हॉट्सएप का उपयोग करते हुए कोई अन्य उदाहरण 1) और 2) डुप्लिकेट ऑपरेटर के उपयोग में देरी (दो चीजें जो मुझे पूरी तरह से याद थीं)।