শক্তিশালী সংযোগ


17

ভূমিকা

এখানে একটি বৃহত স্কোয়ার-বোর্ড দ্বারা সংজ্ঞায়িত একটি বৃক্ষরোপণ রয়েছে :

এখানে চিত্র বর্ণনা লিখুন

প্রতিটি ছোট বর্গাকার ভিতরে নম্বরগুলি তার ক্ষেত্রের মান / নগদ / প্রতিনিধিত্ব করে ...

সংযুক্ত এন স্কোয়ারগুলি খুঁজে পাওয়ার জন্য কৃষকের সহায়তা প্রয়োজন (এর অর্থ সমস্ত এন স্কোয়ারের কমপক্ষে একটি ভাগ করা সীমানা থাকা উচিত) তাকে সর্বাধিক মান দেয়।

উদাহরণ স্বরূপ:

যদি N=1, তবে আউটপুট অবশ্যই হবে 140

যদি N=6, তাহলে ..

এখানে চিত্র বর্ণনা লিখুন

..আউটপুট হতে হবে 315

চ্যালেঞ্জ

আপনার প্রোগ্রাম / ফাংশনটি ম্যাট্রিক্সের মানগুলি এবং এন নম্বরটিকে ইনপুট / আর্গুমেন্ট হিসাবে নিতে হবে এবং শক্তিশালী সংযোগের মান আউটপুট করতে হবে ।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!

উদাহরণ

ইনপুট:

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। এই চ্যালেঞ্জের জন্য, কোনও সময়ের জটিলতা গণনা করা হবে না, তবে আপনি যদি এই উত্তরটি প্রদান করেন এবং প্রমাণ করেন যে আপনার পদ্ধতিটি নিষ্ঠাবান বলের চেয়ে দক্ষতার চেয়ে ভাল I আমি আনন্দের সাথে আপনার উত্তরটিকে উজ্জীবিত করব।
সরানো হয়েছে

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 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>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.