यह चुनौती मई के 2018 लैंग्वेज ऑफ द मंथ इवेंट के हिस्से के रूप में MATL भाषा की कुछ विशेषताओं से संबंधित है ।
परिचय
MATL में, कई दो-इनपुट फ़ंक्शन प्रसारण के साथ तत्व-वार काम करते हैं । इसका मतलब निम्न है:
तत्व-वार (या वेक्टरकृत ): फ़ंक्शन मिलान आकारों के साथ इनपुट को दो सरणियों के रूप में लेता है। फ़ंक्शन द्वारा परिभाषित ऑपरेशन संबंधित प्रविष्टियों के प्रत्येक जोड़े पर लागू होता है। उदाहरण के लिए, पोस्ट-फिक्स नोटेशन का उपयोग करना:
[2 4 6] [10 20 30] +
ouput देता है
[12 24 36]
यह बहुआयामी सरणियों के साथ भी काम करता है। संकेतन × सरणी (मैट्रिक्स) का
[1 2 3; 4 5 6]
प्रतिनिधित्व करता है2
3
1 2 3 4 5 6
जिसका आकार
2
पहले आयाम (ऊर्ध्वाधर) के3
साथ और दूसरा (क्षैतिज) है। इसलिए उदाहरण के लिए[2 4 6; 3 5 7] [10 20 30; 40 60 80] *
[20 80 180; 120 300 560]
प्रसारण या ( सिंगलटन विस्तार ): दो इनपुट सरणियों के मिलान आकार नहीं होते हैं, लेकिन प्रत्येक गैर-मिलान आयाम में किसी एक सरणियों का आकार होता है
1
। इस सरणी को स्पष्ट रूप से आकार मिलान करने के लिए अन्य आयामों के साथ दोहराया गया है; और फिर ऑपरेशन को ऊपर के रूप में तत्व-वार लागू किया जाता है। उदाहरण के लिए, आकार1
×2
और3
× के साथ दो इनपुट सरणियों पर विचार करें1
:[10 20] [1; 2; 5] /
प्रसारण के लिए धन्यवाद, यह इसके बराबर है
[10 20; 10 20; 10 20] [1 1; 2 2; 5 5] /
और इसलिए यह देता है
[10 20; 5 10; 2 4]
इसी प्रकार, आकार
3
×2
और3
×1
(अब प्रसारण केवल दूसरे आयाम के साथ काम करता है),[9 8; 7 6; 5 4] [10; 20; 30] +
[19 18; 27 26; 35 34]
आयामों की संख्या भिन्न भी हो सकती है। उदाहरण के लिए, 3 × 2 और 3 × 1 × 5 आकार वाले इनपुट संगत हैं, और 3 × 2 × 5 परिणाम देते हैं। वास्तव में, आकार 3 × 2 3 × 2 × 1 के समान है (मनमाने ढंग से कई निहित अनुगामी सिंगलटन आयाम हैं)।
दूसरी ओर,
2
×2
और3
×1
सरणियों की एक जोड़ी एक त्रुटि देगी, क्योंकि पहले आयाम के साथ आकार हैं :2
और3
वे समान नहीं हैं और उनमें से कोई भी नहीं है1
।
मॉड्यूलर प्रसारण की परिभाषा
मॉड्यूलर प्रसारण प्रसारण का एक सामान्यीकरण है जो काम करता है भले ही गैर-मिलान आकार में से कोई भी हो 1
। फ़ंक्शन के इनपुट के रूप में निम्नलिखित 2
× 2
और 3
× 1
सरणियों के उदाहरण पर विचार करें +
:
[2 4; 6 8] [10; 20; 30] +
नियम इस प्रकार है: प्रत्येक आयाम के लिए, वह सरणी जो उस आयाम के साथ छोटी होती है, को दूसरे सरणी के आकार से मेल खाने के लिए मॉड्यूलर (साइक्लिकली) दोहराया जाता है । यह उपरोक्त के बराबर होगा
[2 4; 6 8; 2 4] [10 10; 20 20; 30 30] +
नतीजे के साथ
[12 14; 26 28; 32 34]
दूसरे उदाहरण के रूप में,
[5 10; 15 20] [0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0] +
उत्पादन होगा
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
सामान्य तौर पर, आकारों के साथ आदानों a
× b
और c
× d
दे आकार का एक परिणाम max(a,b)
× max(c,d)
।
चुनौती
ऊपर वर्णित के रूप में मॉड्यूलर प्रसारण के साथ दो आयामी सरणियों के लिए इसके अलावा को लागू करें ।
सरणियां आयताकार होंगी (रैग्ड नहीं), इसमें केवल गैर-नकारात्मक पूर्णांक होंगे , और प्रत्येक आयाम में कम से कम आकार1
होगा ।
सशर्त नियम:
इनपुट और आउटपुट किसी भी उचित माध्यम से लिया जा सकता है । उनका प्रारूप हमेशा की तरह लचीला है।
प्रोग्राम या फ़ंक्शंस की अनुमति है, किसी भी प्रोग्रामिंग भाषा में । मानक खामियों को मना किया जाता है ।
बाइट्स में सबसे छोटा कोड जीतता है।
परीक्षण के मामलों
निम्नलिखित ;
पंक्ति विभाजक के रूप में उपयोग किया जाता है (ऊपर दिए गए उदाहरणों में)। प्रत्येक परीक्षण का मामला दो इनपुट और फिर आउटपुट दिखाता है।
[2 4; 6 8]
[10; 20; 30]
[12 14; 26 28; 32 34]
[5 10; 15 20]
[0 0 0 0; 1 2 3 4; 0 0 0 0; 5 6 7 8; 0 0 0 0]
[5 10 5 10; 16 22 18 24; 5 10 5 10; 20 26 22 28; 5 10 5 10]
[1]
[2]
[3]
[1; 2]
[10]
[11; 12]
[1 2 3 4 5]
[10 20 30]
[11 22 33 14 25]
[9 12 5; 5 4 2]
[4 2; 7 3; 15 6; 4 0; 3 3]
[13 14 9;12 7 9;24 18 20;9 4 6;12 15 8]
[9 12 5; 5 4 2]
[4 2 6 7; 7 3 7 3; 15 6 0 1; 4 0 1 16; 3 3 3 8]
[13 14 11 16; 12 7 9 8; 24 18 5 10; 9 4 3 21; 12 15 8 17]
[6 7 9]
[4 2 5]
[10 9 14]
1
× n
(जैसे [1 2 3]
) या n
× 1
(जैसे [1; 2; 3]
)