आप एक कंपनी एक उपयोगकर्ता के अनुकूल कैलकुलेटर बनाना चाहता है कि के लिए काम करते हैं, और इस तरह आप उन "संख्यात्मक shorthands," यह है कि, पत्र है कि इस तरह के रूप में संख्यात्मक मानों, प्रतिनिधित्व का उपयोग करने के लिए की क्षमता जोड़ने का काम सौंपा गया है kके लिए 1000। क्योंकि आपकी कंपनी ने कहा कैलकुलेटर में भंडारण पर पैसे बचाने के लिए, आप भंडारण की लागत को कम करने के लिए अपने कोड को जितना संभव हो उतना कम से कम करना चाहिए।
आपका कार्य
आपको एक फ़ंक्शन बनाना है जो या तो STDIN से इनपुट के रूप में एक अभिव्यक्ति पढ़ता है या इसे एक पैरामीटर के रूप में लेता है और इसका मूल्यांकन लौटाता है या इसे STDOUT में प्रिंट करता है।
कुछ स्पष्टता
मुझे कुछ परिभाषाएँ करने दो। सबसे पहले, हमारे पास इनपुट है, जिसे मैं एक अभिव्यक्ति कहता हूं। यह कुछ इस तरह हो सकता है:
x + y / z
इस अभिव्यक्ति के भीतर हम तीन नंबर हैं: x, y, और z, ऑपरेटरों (द्वारा अलग +और /)। ये संख्या आवश्यक रूप से सकारात्मक पूर्णांक (या पूर्णांक) भी नहीं हैं। जब हम संख्याओं के भीतर निहित आशुलिपि का मूल्यांकन करते हैं, तो क्या चीजें उलझती हैं। उदाहरण के लिए, साथ
2k15
मूल्यांकन के प्रयोजनों के लिए, हम इस तीन नंबर में विभाजित: 2, 1000(जो k), और 15। फिर, नियमों के अनुसार, हम उन्हें प्राप्त करने के लिए जोड़ते हैं
2*1000 + 15 = 2015
उम्मीद है कि इससे निम्नलिखित नियमों को समझना थोड़ा आसान हो जाएगा।
नियम
जब तक एनबी निर्दिष्ट नहीं होता है, आप शॉर्टहैंड को शामिल करने के लिए "संख्या" या इसके पर्यायवाची शब्द की व्याख्या कर सकते हैं।
निम्नलिखित संख्यात्मक शॉर्टहैंड्स का गठन करता है जो आपके फ़ंक्शन को संसाधित करने में सक्षम होना चाहिए
k, m, b, t, and e:। क्रमशःk, m, b, and tमूल्यों के अनुरूप1000, 1000000, 1000000000, and 1000000000000(एक हजार, एक मिलियन, एक अरब, और एक ट्रिलियन)।eआशुलिपि हमेशा की तरह, एक और नंबर के बाद किया जाएगाn, और का प्रतिनिधित्व करता है10^n। आपको संख्यात्मक शॉर्टहैंड कोnपहले और वर्तमान में उपस्थित होने की अनुमति देनी चाहिएe। उदाहरण के लिए, काkekमूल्यांकन करता है1000*10^1000।सादगी के लिए, यदि किसी संख्या में शॉर्टहैंड
eहै, तो इसका उपयोग केवल एक बार किया जाएगा।शॉर्टहैंड से पहले किसी भी संख्या ( शॉर्टहैंड शामिल ) को इसके द्वारा गुणा किया जाता है। उदाहरण के
120kkलिए मूल्यांकन किया जाएगा120 * 1000 * 1000। यदि यह पहले कोई संख्या है, तो आप यह मान लेना चाहिए कि (जैसे कि कैसे आप, गणित में, एक चर का इलाज हो सकता है 1 हैxपरोक्ष रूप1x)। उदाहरण के लिएe10मूल्यांकन करता है10^10। एक अन्य उदाहरण: इसका2m2kमूल्यांकन करता है2*1000000*2*1000(इसमें कुछ भी नहीं जोड़ा जाता है)।शॉर्टहैंड की संख्या वाले अंतिम शॉर्टहैंड के बाद कोई भी संख्या (आशुलिपि लागू नहीं होती) को इसमें जोड़ा जाता है। उदाहरण के
2k12लिए मूल्यांकन किया जाएगा2*1000 + 12। इसका अपवाद यह है कि यदि शॉर्टहैंडeका उपयोग किया जाता है, तो जिस स्थिति में नंबर ( शॉर्टहैंड्स शामिल हैं ) को निम्न केeरूप में माना जाएगाnऔर इसका मूल्यांकन किया जाएगा10^n(पहला नियम देखें)।आपका कार्य उन ऑपरेटरों को संसाधित करने में सक्षम होना चाहिए
+, -, *, and /जो क्रमशः इसके अलावा, घटाव, गुणा, और विभाजन हैं। यह और अधिक प्रक्रिया हो सकती है, यदि आप इतनी इच्छा रखते हैं।शॉर्टहैंड में संख्याएं केवल पूर्णांक नहीं हैं।
3.5b1.2मान्य है और इसका मूल्यांकन किया जाना है3.5*1000000000 + 1.2 = 3500000001.2बिल्ट-इन की अनुमति नहीं है, अगर वे इस तरह की चीज के लिए मौजूद हैं। यदि मैं आपकी भाषा स्वचालित रूप से बड़ी संख्या में वैज्ञानिक संकेतन में परिवर्तित कर देता हूं, तो वह अपवाद होगा, उस स्थिति में जो आपके आउटपुट के लिए स्वीकार्य है।
बाइट्स जीत में सबसे छोटा कोड, मानक खामियों को लागू करना।
इनपुट
इनपुट प्रत्येक संख्या और ऑपरेटर द्वारा रिक्त स्थान से अलग होने के साथ एक अभिव्यक्ति होगी। संख्या में शॉर्टहैंड हो सकता है या नहीं भी हो सकता है। एक नमूना नीचे दिखाया गया है:
10 + 1b - 2k
उत्पादन
आपके फ़ंक्शन को संख्या के रूप में अभिव्यक्ति के मूल्यांकन को आउटपुट करना होगा। यह वैज्ञानिक संकेतन का उपयोग करने के लिए स्वीकार्य है यदि आउटपुट प्रदर्शित करने के लिए बहुत बड़ा होगा। यदि संख्या पूर्णांक नहीं है, तो आपके पास कम से कम तीन दशमलव स्थान होने चाहिए। यदि आप इन दशमलव स्थानों को बनाए रखते हैं तो यह स्वीकार्य है यदि संख्या पूर्णांक है।
परीक्षण के मामलों
इनपुट
t
उत्पादन
1000000000000
इनपुट
1 + 4b / 10k11
उत्पादन
399561.483
इनपुट
e2 + k2ke-1 - b12
उत्पादन
-999799912
या
-999799912.000
इनपुट
142ek12
उत्पादन
142e1012
या
142.000e1012
इनपुट:
1.2m5.25
आउटपुट:
1200005.25
अंतिम नोट्स
यह मेरी पहली चुनौती है (सैंडबॉक्स पर उपयोगकर्ताओं की कुछ मदद के साथ)। यदि कुछ भी स्पष्ट नहीं है, तो मुझे इसके बारे में बताएं और मैं स्पष्ट करने की पूरी कोशिश करूंगा।
1000 + 2000 * 10 ^ -1, लेकिन इसने अंतिम उत्तर दिया -999998712। (इसके अलावा, मेरी व्याख्या नियम 4 के " अंतिम आशुलिपि " के साथ नहीं लगती है , लेकिन मुझे यकीन नहीं है कि अनुक्रम को कैसे समझा जाए k2k।) क्या आप इसका मूल्यांकन करने के चरणों की व्याख्या कर सकते हैं?
2m2kनियम 3 की चर्चा में एक उदाहरण जोड़ा जाना चाहिए। इसके अलावा, एक अलग शब्द का उपयोग करना सबसे अच्छा हो सकता है - शायद "पूर्णांक" - जैसे 123कि शाब्दिक संख्याओं के लिए। आशुलिपि नहीं हैं । शब्द "संख्या" की लगभग 3 अलग-अलग परिभाषाएँ हैं, जैसे कि यह अब खड़ा है।