MATL , 54 51 49 बाइट्स
n:"G~1@(2Y6Z+leG45>1e*5M@)*]vtz:"otY*g]G48-X:*sX>
इनपुट MATL (AB) प्रारूप में एक 2 डी चार सरणी है, जिसमें ;
पंक्ति विभाजक है। उदाहरण और परीक्षण मामलों में इनपुट क्रमशः हैं:
['11-011123';'111-010--';'0010---01';'111-01234']
['1']
['1-1-1-1';'-1-1-1-';'2-1-1-1';'-1-1-1-']
['12-45-';'4-65-9';'87-654';'12-487';'45----';'684764']
['111-12';'------';'21--10']
इसे ऑनलाइन आज़माएं!
व्याख्या
यह संबंध से परिभाषित ग्राफ के एक आसन्न मैट्रिक्स के निर्माण से काम करता है "जुड़ा हुआ है"। एक उदाहरण के रूप में, 3 × 4 क्षेत्र पर विचार करें
52-4
15-8
3-72
एक 2D सरणी में प्रविष्टियां MATL (स्तंभ-प्रमुख) रैखिक अनुक्रमण का उपयोग करके आसानी से वर्णित हैं। 3 × 4 मामले में, प्रत्येक प्रविष्टि के रैखिक सूचकांक के रूप में दिया गया है
1 4 7 10
2 5 8 11
3 6 9 12
आसन्न मैट्रिक्स मैट्रिक्स गुणन का उपयोग करके चरणों में बनाया गया है। पहले चरण में, तत्काल पड़ोसियों पर विचार किया जाता है। उदाहरण के लिए, अंक 3 अनुक्रमित के साथ स्वयं का और उसी का पड़ोसी है। यह 6 का पड़ोसी नहीं है क्योंकि उस बिंदु में फ़ील्ड के अनुसार कोई संख्या नहीं है। इस उदाहरण में "तत्काल-पड़ोसी" संबंध के आसन्न मैट्रिक्स 12 × 12 मैट्रिक्स एल के रूप में दिया गया है
1 1 0 1 0 0 0 0 0 0 0 0
1 1 1 0 1 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0 0 0
0 1 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 1
0 0 0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 1 0 1 1
(यह देख सकता है कि कॉलम 3 की 1
पंक्तियों में मान 2 और 3 है।) यह मैट्रिक्स हमेशा सममित है और इसके विकर्ण में 1
उन बिंदुओं के लिए मूल्य है जो शामिल नहीं हैं -
।
अगला कदम संबंध के आसन्न मैट्रिक्स होगा " बीच में सबसे अधिक एक बिंदु पर जुड़ा हुआ है "। इसे प्राप्त करने के लिए, यह एल को खुद से गुणा करने और नॉनजेरो प्रविष्टियों को सेट करने के लिए पर्याप्त है 1
। सामान्य तौर पर, संबंध के आसन्न मैट्रिक्स " कुछ पथ द्वारा जुड़ा हुआ है ", एम , एल को एक संभावित (मैट्रिक्स अर्थ में) बढ़ाकर प्राप्त किया जाता है जो अधिकतम संभव पथ की लंबाई का प्रतिनिधित्व करता है। अधिकतम पथ लंबाई की एक ऊपरी सीमा एल में नॉनज़ेरो प्रविष्टियों की संख्या है ।
मैट्रिक्स पावर की गणना करने से सीधे अतिप्रवाह हो सकता है, क्योंकि बड़ी संख्या में जल्दी होते हैं। इसलिए बड़ी संख्या में निर्माण को रोकने के लिए प्रत्येक चरण के बाद नॉनज़ेरो प्रविष्टियों को 1 में परिवर्तित करना, एक ही मैट्रिक्स द्वारा धीरे-धीरे गुणा करना बेहतर होता है।
कॉलम मैं के एम अंक उस बिंदु के साथ (किसी भी मार्ग से) से जुड़े हुए हैं का प्रतिनिधित्व करता है मैं । अब, लेवल फ़ील्ड को रैखिक क्रम में एक कॉलम वेक्टर सी में घटाया जा सकता है , जहां प्रत्येक प्रविष्टि में संबंधित संख्या या इसके लिए एक अपरिभाषित मान होता है -
। तो इस मामले में सी होगा
5
1
3
2
5
-
-
-
7
4
8
2
के प्रत्येक स्तंभ Mutiplying एम द्वारा ग तत्व के लिहाज से और प्रत्येक स्तंभ का योग कंप्यूटिंग देता है, प्रत्येक बिंदु के लिए मैं , क्षेत्र बिंदु के कुल स्कोर मैं के अंतर्गत आता है। एक क्षेत्र को सभी बिंदुओं द्वारा परिभाषित किया गया है जो पारस्परिक रूप से जुड़े हुए हैं। ध्यान दें कि कई कॉलम समान परिणाम देंगे; अर्थात्, कॉलम मैं और जे एक ही राशि है, तो अंक दे देंगे मैं और जे (एक ही क्षेत्र से संबंधित) से जुड़े हुए हैं। अंतिम परिणाम उन रकमों का अधिकतम है।
% Implicitly take input: 2D char array
n: % Range [1,...,N], where N is number of entries in the input
" % For loop. Each iteration builds a row of matrix L
G % Push input again
~ % Logical negate: transform into matrix of zeros
1 % Push 1, to be written into a matrix entry
@ % Iteration index. Ranges from 1 to N
( % Write that 1 into the N-th entry (linear order)
2Y6 % Push array [0 1 0; 1 1 1; 0 1 0]: mask of immediate neighbours
Z+ % Convolve and keep same-size result
le % Linearize into row array
G45> % Array of same size as the input that contains 1 for numbers, 0 for '-'
1e % Linearize into row array
* % Multiply element-wise
5M % Push last array again: 1 for numbers, 0 for '-'
@) % Get 0 or 1 value of that array corresponding to current iteration
* % Multiply. This is to give a row of zeros for non-numbers
] % End. We have all rows of L in the stack
v % Concatenate all rows into a matrix: L.
tz: % Duplicate. Range [1,...,K], where K is the number of nonzeros in L
" % For loop. Repear K times. This loop computes the 0/1 matrix power
o % Convert matrix entries to double
tY* % Duplicate and matrix-multiply
g % Convert to logical values, that is, nonzero values become 1
] % End. We have matrix M
G48- % Convert input chars to the corresponding numbers by subtractig 48
X: % Linearize into column array. This is vector c
* % Element-wise multiplication with broadcast (implicit repetition)
s % Sum of each column. Gives a row array
X> % Maximum of that row array
% Implicitly display