शक्तिशाली कनेक्शन


17

परिचय

इस तरह से एक बड़े वर्ग-मंडल द्वारा परिभाषित वृक्षारोपण है :

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

प्रत्येक छोटे वर्ग के अंदर संख्या इसके क्षेत्र के मूल्य / नकदी / का प्रतिनिधित्व करती है ...

किसान को एन वर्गों को जोड़ने में मदद की ज़रूरत है जो जुड़ा हुआ है (इसका मतलब है कि सभी एन वर्गों में कम से कम एक साझा सीमा होनी चाहिए) उसे सबसे बड़ा मूल्य देते हैं।

उदाहरण के लिए:

यदि N=1, तो आउटपुट होना चाहिए 140

अगर N=6, तब ।।

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

.. आउटपुट होना चाहिए 315

चुनौती

आपके प्रोग्राम / फ़ंक्शन को मैट्रिक्स के मूल्यों और संख्या N को इनपुट / तर्कों के रूप में लेना चाहिए और शक्तिशाली कनेक्शन के मूल्य को आउटपुट करना चाहिए ।

चूंकि यह , बाइट्स जीत में सबसे छोटा जवाब!

उदाहरण

इनपुट:

10 -7 11 7 3 31
33 31 2 5 121 15
22 -8 12 10 -19 43
12 -4 54 77 -7 -21
2 8 6 -70 109 1
140 3 -98 6 13 20
6

आउटपुट: 315


इनपुट:

35 -7
-8 36
2

आउटपुट: 29


2
इसके लिए कुछ जानवर बल एल्गोरिदम बहुत धीमा हो सकता है। क्या पहले टेस्ट केस जैसे मामलों के लिए समय पर कोई प्रतिबंध है?
लेवल रिवर सेंट

@steveverrill। इस चुनौती के लिए, कोई भी समय जटिलता नहीं गिना जाएगा, लेकिन यदि आप इसका उत्तर देते हैं और साबित करते हैं कि आपका तरीका कुशलतापूर्वक जानवर की ताकत से बेहतर है तो मैं ख़ुशी से आपके जवाब को बढ़ा दूंगा।
निकाला

जवाबों:


4

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

(m,n)=>m.map((a,r)=>a.map((_,c)=>f(r,c,[0],0)),o=f=(x,y,s,t)=>s[n]?o>t?0:o=t:s.indexOf(w=x+","+y)<0&&m[y]&&(v=m[y][x])<1/0&&f(x+1,y,s=[...s,w],t+=v)+f(x,y+1,s,t)+f(x-1,y,s,t)+f(x,y-1,s,t))|o

व्याख्या

मैट्रिक्स को सरणियों के एक सरणी के रूप में लेता है।

प्रत्येक वर्ग से शुरू होता है फिर हर संभव संयोजन का परीक्षण करने के लिए एक पुनरावर्ती फ़ंक्शन का उपयोग करता है। यह एक जानवर-बल दृष्टिकोण है, लेकिन यह मेरी मशीन पर पहले परीक्षण मामले के लिए लगभग तुरंत खत्म कर देता है।

(m,n)=>
  m.map((a,r)=>                 // for each row
    a.map((_,c)=>               // for each column
      f(r,c,[0],0)              // start checking paths from the coordinate of the square
    ),
    o=                          // o = output number (max total)
    f=(x,y,s,t)=>               // recursive function f, x & y = current square, t = total
                                // s = array of used squares (starts as [0] so length = +1)
      s[n]?                     // if we have used n squares
        o>t?0:o=t               // set o to max of o and t
      :s.indexOf(w=x+","+y)<0&& // if the square has not been used yet
      m[y]&&(v=m[y][x])<1/0&&   // and the square is not out of bounds
                                // ( if value of square is less than Infinity )

        // Check each adjacent square
        f(x+1,y,
          s=[...s,w],           // clone and add this square to s
          t+=v                  // add the value of this square to the total
        )
        +f(x,y+1,s,t)
        +f(x-1,y,s,t)
        +f(x,y-1,s,t)
  )
  |o                            // return output

परीक्षा

var solution = (m,n)=>m.map((a,r)=>a.map((_,c)=>f(r,c,[0],0)),o=f=(x,y,s,t)=>s[n]?o>t?0:o=t:s.indexOf(w=x+","+y)<0&&m[y]&&(v=m[y][x])<1/0&&f(x+1,y,s=[...s,w],t+=v)+f(x,y+1,s,t)+f(x-1,y,s,t)+f(x,y-1,s,t))|o
<textarea rows="7" cols="40" id="Matrix">10 -7 11 7 3 31
33 31 2 5 121 15
22 -8 12 10 -19 43
12 -4 54 77 -7 -21
2 8 6 -70 109 1
140 3 -98 6 13 20</textarea><br />
N = <input type="number" id="N" value="6" /><br />
<button onclick="result.textContent=solution(Matrix.value.split('\n').map(x=>x.split(' ').map(z=>+z)),N.value)">Go</button>
<pre id="result"></pre>

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