यह चुनौती MATL भाषा की कुछ विशेषताओं से संबंधित है, जो मई 2018 लैंग्वेज ऑफ द मंथ इवेंट के हिस्से के रूप में है । एसोसिएटेड चुनौती : फंक्शन क्लिपबोर्ड: पेस्ट ।
परिचय
MATL में कई क्लिपबोर्ड हैं , जहां आप बाद में (पेस्ट) प्राप्त किए जाने वाले मूल्यों (कॉपी) को स्टोर कर सकते हैं। कुछ क्लिपबोर्ड स्वचालित हैं , जिसका अर्थ है कि नकल कुछ घटनाओं द्वारा स्वचालित रूप से चालू हो जाती है। यह चुनौती स्वचालित क्लिपबोर्ड में से एक पर केंद्रित है, जिसे फ़ंक्शन-इनपुट क्लिपबोर्ड कहा जाता है , या बस फ़ंक्शन क्लिपबोर्ड ।
यह क्लिपबोर्ड सामान्य, इनपुट लेने वाले कार्यों के लिए चार सबसे हालिया कॉलों को इनपुट संग्रहीत करता है। MATL में सामान्य कार्य सबसे सामान्य प्रकार के कार्य हैं। इनपुट-लेने का अर्थ है कि फ़ंक्शन कम से कम एक इनपुट लेता है (फ़ंक्शन जो किसी इनपुट को नहीं लेते हैं, फ़ंक्शन क्लिपबोर्ड द्वारा विचार नहीं किया जाता है)।
यह निम्नलिखित उदाहरणों के साथ सबसे अच्छा समझाया गया है, जो दो सामान्य कार्यों का उपयोग करते हैं:
+, जो स्टैक से दो संख्याओं को पॉप करता है और उनकी राशि को धक्का देता है।U, जो एक संख्या को पॉप करता है और इसके वर्ग को धक्का देता है।
उदाहरण 1 :
3 2 + 6 + 12 4 U + +
परिणाम पैदा करता है 39। कोड की व्याख्या इस प्रकार है:
- संख्या शाब्दिक जैसे कि
3या12स्टैक पर धकेल दिया जाए - फ़ंक्शंस जैसे कि
+उनके इनपुट्स को पॉप करें और स्टैक पर अपने आउटपुट को पुश करें।
कालानुक्रमिक क्रम में फ़ंक्शन कॉल हैं:
3 2 +देता है55 6 +देता है114 Uदेता है1612 16 +2811 28 +देता है39।
क्लिपबोर्ड को चार सूचियों की सूची के रूप में देखा जा सकता है। प्रत्येक आंतरिक सूची में फ़ंक्शन कॉल में इनपुट होते हैं, जिसमें सबसे हाल ही में कॉल होती हैं । प्रत्येक आंतरिक सूची के भीतर, इनपुट अपने मूल क्रम में हैं ।
तो कोड चलाने के बाद क्लिपबोर्ड सामग्री (पायथन संकेतन में) हैं:
[[11, 28], [12, 16], [4], [5, 6]]
उदाहरण 2 :
10 20 U 30 +
संख्या 10और 430ढेर पर छोड़ देता है । कार्यक्रम के अंत में स्टैक को नीचे से ऊपर तक प्रदर्शित किया जाता है।
फ़ंक्शन कॉल हैं
20 Uदेता है400400 30 +देता है430
चूंकि केवल दो फ़ंक्शन कॉल किए गए हैं, क्लिपबोर्ड को परिभाषित करने वाली कुछ आंतरिक सूचियां खाली होंगी । यह भी ध्यान दें कि 10किसी फ़ंक्शन के इनपुट के रूप में कैसे उपयोग नहीं किया जाता है।
इस प्रकार, कोड चलाने के बाद क्लिपबोर्ड सामग्री इस प्रकार है:
[[400, 30], [20], [], []]
उदाहरण 3 (अमान्य):
10 20 + +
को अमान्य माना जाता है, क्योंकि दूसरे के लिए एक इनपुट +गायब है (MATL में यह यूजर इनपुट को ट्रिगर करेगा)।
चुनौती
इनपुट : संख्या स्ट्रिंग के साथ एक स्ट्रिंग एस , +और U, रिक्त स्थान से अलग।
आउटपुट : स्ट्रिंग एस के मूल्यांकन के बाद फ़ंक्शन क्लिपबोर्ड की सामग्री ।
स्पष्टीकरण:
- आप उन कार्यों का प्रतिनिधित्व करने के लिए अंकों के अलावा किसी भी दो लगातार प्रतीकों का उपयोग कर सकते हैं। इसके अलावा, आप अंतरिक्ष के बजाय विभाजक के रूप में किसी भी सुसंगत प्रतीक का उपयोग कर सकते हैं।
- केवल दो संकेतित कार्यों पर विचार किया जाएगा।
- इनपुट स्ट्रिंग में कम से कम एक नंबर शाब्दिक और कम से कम एक फ़ंक्शन होगा।
- सभी नंबर सकारात्मक पूर्णांक होंगे, संभवतः एक से अधिक अंकों के साथ।
- यह संभव है कि कुछ संख्या शाब्दिक किसी भी फ़ंक्शन द्वारा उपयोग नहीं किए जाते हैं, उदाहरण 2 में।
- अतिरिक्त संख्या की आवश्यकता के बिना इनपुट को मान्य कोड होने की गारंटी है। इसलिए उदाहरण 3 में एक स्ट्रिंग कभी नहीं होगी।
- आउटपुट में रिक्त आंतरिक सूचियों को अनुगामी किया जा सकता है। तो उदाहरण 2 में परिणाम हो सकता है
[[400, 30], [20]] - कोई भी उचित, अस्पष्ट आउटपुट प्रारूप स्वीकार्य है। उदाहरण के लिए, आंतरिक विभाजक के रूप में अल्पविराम और बाहरी विभाजक के रूप में अर्धविराम के साथ एक स्ट्रिंग
400,30;20;;:।
अतिरिक्त नियम:
इनपुट और आउटपुट को किसी भी उचित माध्यम से लिया जा सकता है ।
प्रोग्राम या फ़ंक्शंस की अनुमति है, किसी भी प्रोग्रामिंग भाषा में । मानक खामियों को मना किया जाता है ।
बाइट्स में सबसे छोटा कोड जीतता है।
परीक्षण के मामलों
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M?
M। मैं इसे "पेस्ट" चुनौती में करूंगा
[[28, 11], [16, 12], [4], [6, 5]]पहला उदाहरण के लिए मान्य उत्पादन?