एक मैट्रिक्स रूपांतरण


16

एक प्रोग्राम या फ़ंक्शन लिखें जहां एक मैट्रिक्स ए (मैट्रिक्स के आयामों का अधिकतम मूल्य 100 है) एक नए मैट्रिक्स बी में बदल जाता है। नए मैट्रिक्स बी के प्रत्येक तत्व मैट्रिक्स ए के संगत तत्व के सकारात्मक पड़ोसियों का योग है। ।

केवल चार ऑर्थोगोनल दिशाओं में पड़ोसियों को माना जाता है, और किनारों को चारों ओर लपेटते नहीं हैं।

उदाहरण इनपुट:

 1  2  3
 4 -1 -2
-3 -4 10
 1  2 10

आउटपुट:

 6  4  2
 1  6 13
 5 12 10
 2 11 12

नियम:

  • इनपुट के रूप में पूर्णांक का उपयोग करें।
  • यह एक , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।

3
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यहां सभी चुनौतियों को एक उद्देश्यपूर्ण जीत की आवश्यकता है, ताकि निर्विवाद रूप से यह निर्धारित किया जा सके कि कौन सा समाधान जीतना चाहिए। आमतौर पर, यह कोड-गोल्फ है , जिसका अर्थ है कि बाइट्स में सबसे छोटा कोड जीतता है। इसके अलावा, यह मान्य इनपुट / आउटपुट फॉर्मेट (2d सरणी; सिंगल स्ट्रिंग? आदि) को निर्दिष्ट करने के लिए सहायक होगा। अंत में, कुछ किनारे मामले हैं जिन्हें आपने कवर नहीं किया है; उदाहरण के लिए, क्या कोई संख्या कभी नकारात्मक संख्याओं से घिरी होगी?
दरवाज़े

धन्यवाद। मैं अनुमान लगाता हूं कि [१००] [१००] और हां एक संख्या नकारात्मक संख्याओं से घिरी होगी।
एमटी

हम किन तरीकों से इनपुट ले सकते हैं?
माल्टसेन

1
@Doorknob संख्याओं के एक खाली समूह का योग 0. है
orlp

@ माल्टीन स्टैडिन, मुझे लगता है।
एमटी

जवाबों:


10

MATL , 9 बाइट्स

t0>*1Y6Z+

इसे ऑनलाइन आज़माएं!

व्याख्या

इनपुट मैट्रिक्स को 0. के बराबर नकारात्मक मान बनाने के लिए एक उपयुक्त मास्क द्वारा गुणा किया जाता है। फिर प्रत्येक प्रविष्टि के पड़ोसियों के योग की गणना करने के लिए 2 डी कनवल्शन लागू किया जाता है।

t     % Take input implicitly: 2D array. Duplicate
0>    % Is each entry positive? This gives a mask of positive values
*     % Multiply: set negative values of input array to zero
1Y6   % Predefined literal: [0 1 0; 1 0 1; 0 1 0]
Z+    % 2D convolution preserving size. Implicitly display

4
क्या I / O के रूप में फ़ोन की अनुमति है?
orlp

ठीक है, मुझे संदेह है कि अगर यह पीटने योग्य है: p
अदनान

@ अदनान पायथन में यह नहीं है
आर। काप

4
इस आदमी ने ऐसा फोन पर करते हुए किया, और यहाँ मैं हूँ, अपना कुछ समय इन समस्याओं को हल करने के लिए समर्पित करने के लिए ...
R. Kap

@ R.Kap मेरा मतलब था "फोन से टाइप किया हुआ" ("फोन पर बात करते समय टाइप नहीं किया गया")। क्षमा करें मेरी अंग्रेजी :-)
लुइस मेंडो

7

ऑक्टेव, 46 44 40 बाइट्स

सहेजे गए 2 बाइट्स @flawr
@ LuisMendo का कर्नेल 4 दोष बाइट्स @ फ्लॉर्स की तुलना में कम था।

@(M)conv2(M.*(M>0),(x='aba')~=x','same')

जैसे @ लुइसमेन्डो का जवाब! केवल कम ... गोल्फ।

आप इसे इदोन पर यहां देख सकते हैं ।


COMON, मैं इस सटीक उत्तर को पोस्ट करने वाला था।
दोष

1
आप के (x='aba')~=x'बजाय का उपयोग कर 6 बाइट्स बचा सकते हैं[0 1 0;1 0 1;0 1 0]
लुइस मेंडू

2
@LuisMendo यह जादू टोना क्या है?
बीकर

1
@cat .*तत्व-वार मैट्रिक्स गुणन है। बूलियन मैट्रिक्स है, MATLAB को काफी हद तक टाइप किया जा रहा है, इसे न्यूमेरिक माना जाता है। तो M>0बस एक मुखौटा के रूप में काम कर रहा है।
बीकर

1
(x='aba')~=x'। यह सिर्फ भयानक @Luis है!
स्टिव ग्रिफिन

2

जावास्क्रिप्ट (ईएस 6), 99 94 बाइट्स

a=>a.map((b,i)=>b.map((_,j)=>(g=(c=j,k=j)=>c[k]>0&&c[k])(a[i-1])+g(a[i+1])+g(b,j-1)+g(b,j+1)))

स्वीकार करता है और एक दो आयामी सरणी देता है।

संपादित करें: जब मैंने पाया कि डिफ़ॉल्ट तर्क काम करते हैं तो पूरी तरह से फिर से लिखा जाता है जब आप एक स्पष्ट रूप से अपरिभाषित मूल्य पास करते हैं, जैसे कि जब आप किसी सरणी के अंत में इंडेक्स करते हैं।



@Socialz नील संस्करण पुराना है।
10

@flawr कुछ लोग इस मैसेज चेन को वोट ऑर्डर में देख रहे होंगे, पोस्ट डेट ऑर्डर के लिए नहीं, इसलिए मैंने उस संबंधित उत्तर पर टिप्पणी की। यह एक उपयोगकर्ता की तुलना में 4 बाइट्स लंबा है।
ascx

तो आप मूल रूप से अन्य पोस्ट का विज्ञापन करना चाहते हैं ??
11

@Socialz 4 बाइट्स लंबा था, हाँ ;-)
नील

2

जावास्क्रिप्ट (ईएस 6), 95 93 बाइट्स

document.write("<pre>"+(

m=>m.map((a,r)=>a.map((_,c)=>(s=(x,y=0)=>(n=(m[r+y]||0)[c+x])>0&&n)(1)+s(-1)+s(0,1)+s(0,-1)))

)([[  1,  2,  3 ],
   [  4, -1, -2 ],
   [ -3, -4, 10 ],
   [  1,  2, 10 ]])

.join`\n`)



0

मठकाद, बाइट्स

एक 3x3 कर्नेल के साथ फ़िल्टर्ड सरणी के मानक 2D कन्वेंशन का उपयोग करता है। नकारात्मक तत्व रकम और विकर्ण कर्नेल के साथ वेरिएंट भी कार्यक्रम के लिए मुआवजे के रूप में जोड़ा गया जो कम से कम बाइट्स में नहीं चल रहा है।

यहाँ छवि विवरण दर्ज करें


मैथेकड स्कोरिंग के रूप में कोई बाइट गिनती दर्ज नहीं की गई है। हालाँकि, कीबोर्ड तुल्यता का उपयोग करते हुए, यह 28 बाइट्स का क्षेत्र है जो यह मानता है कि मैट्रिक्स इनपुट कुल की ओर नहीं गिना जाता है।

ध्यान दें कि आप ऊपर की छवि में जो देखते हैं, वह ठीक उसी तरह है जैसे मैथैड में सॉल्यूशन को दर्ज किया और प्रदर्शित किया जाता है।


0

जेली, 23 20 18 बाइट्स

0;+ḊṖ
ZÇ€Z+Ç€
+AHÇ

इसे ऑनलाइन आज़माएं!

कलन विधि

मान लें कि केवल एक पंक्ति है: [1,2,3,4]।

मान लीजिए कि A शून्य को पूर्ववर्ती करने का परिणाम है, अर्थात [0,1,2,3,4]।

बी पहली वस्तु को हटाने का परिणाम है, अर्थात [2,3,4]।

फिर अंतिम परिणाम केवल ए + बी वेक्टरकृत होता है, फिर अंतिम आइटम निकालता है।

अब, एल्गोरिथ्म इसे हर पंक्ति के साथ-साथ प्रत्येक स्तंभ पर लागू करना है, फिर उनकी वेक्टर राशि खोजें।

प्रत्येक स्तंभ के लिए ?! मुझे लगा कि जेली इसका समर्थन नहीं करती ...

आप सही हे। इसलिए, मैंने इसे ट्रांसपोज़ किया, प्रत्येक पंक्ति पर लागू किया, फिर इसे फिर से ट्रांसपोज़ किया।

ऋणात्मक संख्याओं को हटाने के लिए एल्गोरिदम

यहां, आप बस प्रत्येक संख्या को उनके निरपेक्ष में जोड़ते हैं। यह प्रभावी रूप से प्रत्येक सकारात्मक संख्या को दोगुना करते हुए नकारात्मक संख्याओं को समाप्त करता है। फिर, पूरे मैट्रिक्स को आधा कर दें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.