यह चुनौती मई के 2018 लैंग्वेज ऑफ द मंथ इवेंट के हिस्से के रूप में MATL भाषा की कुछ विशेषताओं से संबंधित है । एसोसिएटेड चैलेंज: फंक्शन क्लिपबोर्ड: कॉपी ।
परिचय
MATL के फ़ंक्शन क्लिपबोर्ड स्टोर ("प्रतियां") चार सबसे हाल की कॉलों को सामान्य, इनपुट-लेने वाले कार्यों के लिए इनपुट। MATL में सामान्य कार्य सबसे सामान्य प्रकार के कार्य हैं। इनपुट-लेने का अर्थ है कि फ़ंक्शन कम से कम एक इनपुट लेता है। संग्रहीत क्लिपबोर्ड सामग्री को स्टैक ("चिपकाया") पर धकेल दिया जा सकता है।
यह चुनौती क्लिपबोर्ड सामग्री को इनपुट के रूप में ले जाएगी। यह माना जाएगा कि क्लिपबोर्ड राज्य का उत्पादन करने वाले सभी कार्यों ने इनपुट के रूप में एक या एक से अधिक सकारात्मक पूर्णांक लिया। तो क्लिपबोर्ड राज्य को संख्याओं की सूची की सूची द्वारा दर्शाया जा सकता है। (क्लिपबोर्ड वास्तव में कैसे भरा है इसके बारे में अधिक जानकारी के लिए संबंधित चुनौती देखें; लेकिन यह वर्तमान के लिए आवश्यक नहीं है)।
क्लिपबोर्ड सामग्री की व्याख्या करना
उदाहरण 1
पहले आंतरिक सूची को संदर्भित करता है सबसे हाल ही में समारोह कॉल, और इतने पर, इस प्रकार क्लिपबोर्ड राज्य
[[11, 28], [12, 16], [4], [5, 6]]
इंगित करता है कि पिछले समारोह कॉल दो आदानों ले लिया है, अर्थात् 11, 28; दूसरी आखिरी कॉल आदानों ले लिया 12, 16; आदि (यह क्लिपबोर्ड राज्य संबंधित चुनौती के पहले उदाहरण में कोड द्वारा निर्मित है)।
उदाहरण 2
यदि पर्याप्त फ़ंक्शन कॉल नहीं हुए हैं , तो क्लिपबोर्ड में कुछ अनुगामी आंतरिक सूचियां खाली होंगी:
[[7, 5], [], [], []]
(यह एक कार्यक्रम है कि बस कहते हैं 7और 5) द्वारा निर्मित है ।
उदाहरण 3
फ़ंक्शन कॉल में किसी भी संख्या में इनपुट हो सकते हैं , लेकिन हमेशा कम से कम 1(बिना इनपुट के कार्य करने से क्लिपबोर्ड स्थिति में परिवर्तन नहीं होता है)। तो निम्नलिखित भी संभव है।
[[3], [2, 40, 34], [7, 8, 15], []]
क्लिपबोर्ड सामग्री तक पहुँचना
फ़ंक्शन क्लिपबोर्ड की सामग्री MATL फ़ंक्शन का उपयोग करके स्टैक पर धकेल दी जाती है M(जो, वैसे, एक सामान्य फ़ंक्शन नहीं है, लेकिन क्लिपबोर्ड फ़ंक्शन है)। यह फ़ंक्शन इनपुट के रूप में एक सकारात्मक पूर्णांक लेता है, और कुछ क्लिपबोर्ड सामग्री को स्टैक पर निम्नानुसार धकेलता है। उदाहरण 1 में क्लिपबोर्ड स्थिति के संदर्भ में:
[[11, 28], [12, 16], [4], [5, 6]]
1Mसबसे हाल ही में फ़ंक्शन कॉल के लिए सभी इनपुट लौटाता है । तो माना जाता है उदाहरण के लिए, यह देता है11,28।- इसी तरह,
2M,3Mऔर4Mदूसरे के लिए सभी आदानों वापसी, तीसरे और चौथे सबसे हाल ही में फ़ंक्शन कॉल। तो2Mदेता है12,16;3Mदेता है4; और4Mदेता है5,6। - परे नंबर
4का चयन व्यक्तिगत आदानों फ़ंक्शन कॉल कि ले लिया करने के लिए एक से अधिक इनपुट। इसलिए पिछले इनपुट को सबसे हालिया कॉल पर5Mलौटाता है । हमारे मामले में यह देता है । पूर्ववर्ती व्यक्तिगत इनपुट लौटाता है , जो है । दूसरे-आखिरी कॉल का अंतिम इनपुट, जो है , और देता है । अब, देता है । ध्यान दें कि इनपुट कैसे छोड़ दिया जाता है क्योंकि यह अपने फ़ंक्शन कॉल में एकमात्र इनपुट था । अंत में, देता है ।286M117M168M129M6410M5
उदाहरण 3 में क्लिपबोर्ड स्थिति के लिए:
[[3], [2, 40, 34], [7, 8, 15], []]
1Mदेता है3।2Mदेता है2,40,34।3Mदेता है7,8,15।4Mहै अपरिभाषित व्यवहार क्योंकि वहाँ केवल तीन फ़ंक्शन कॉल किया गया है, (इस चुनौती के प्रयोजनों के लिए)।5Mदेता है34।6Mदेता है40।7Mदेता है2।8Mदेता है15।9Mदेता है8,10Mदेता है7।11M,12M... का भी अपरिभाषित व्यवहार है ।
चुनौती
इनपुट :
- क्लिपबोर्ड राज्य, सूचियों की सूची या किसी अन्य उचित प्रारूप के रूप में;
- एक धनात्मक पूर्णांक n ।
आउटपुट : इनपुट के रूप में n केM साथ कॉलिंग फ़ंक्शन का परिणाम । आउटपुट एक अस्पष्ट विभाजक के साथ एक या कई संख्याओं में, या किसी सूची या सरणी जैसे किसी भी उचित प्रारूप में होगा।
स्पष्टीकरण:
- क्लिपबोर्ड स्थिति में संख्याओं की चार सूचियाँ होती हैं। अनुगामी सूचियों में से कुछ रिक्त हो सकती हैं, उदाहरण 2 और 3 में। यदि पसंद किया जाता है, तो आप खाली सूचियों को अनुगामी किए बिना क्लिपबोर्ड पर इनपुट कर सकते हैं। तो उदाहरण 3 बन जाएगा
[[3], [2, 40, 34], [7, 8, 15]]। - क्लिपबोर्ड के सभी नंबर सकारात्मक पूर्णांक होंगे, संभवतः एक से अधिक अंकों के साथ।
- संख्या n मान्य होने की गारंटी है। उदाहरण के लिए 3 ऊपर,
nहो सकता है4या नहीं11।
अतिरिक्त नियम:
इनपुट और आउटपुट किसी भी उचित माध्यम से लिया जा सकता है ।
प्रोग्राम या फ़ंक्शंस की अनुमति है, किसी भी प्रोग्रामिंग भाषा में । मानक खामियों को मना किया जाता है ।
बाइट्स में सबसे छोटा कोड जीतता है।
परीक्षण के मामलों
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2