সমস্যা
ধরুন, আমাদের একটি 2D গ্রিড আছে, প্রতিটি সেল হয় একটি প্রাচীর 'W', একটি শত্রু 'E' বা খালি '0' (সংখ্যা শূন্য)। আমাদের এমন একটি ফাংশন লিখতে হবে যা শুধুমাত্র একটি বোমা ব্যবহার করে আমরা সর্বাধিক শত্রুদের হত্যা করতে পারি।
বোমাটি লাগানো বিন্দু থেকে একই সারি এবং কলামে থাকা সমস্ত শত্রুদের হত্যা করে যতক্ষণ না এটি দেয়ালে আঘাত না করে কারণ প্রাচীরটি ধ্বংস হওয়ার মতো শক্তিশালী।
আমাদের আরও মনে রাখতে হবে যে আমরা কেবল একটি খালি ঘরে বোমা রাখতে পারি। উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয় −
const arr = [ ['0', 'E', '0', '0'], ['E', '0', 'W', 'E'], ['0', 'E', '0', '0'] ];
তারপর আউটপুট −
হওয়া উচিতconst output = 3;
আউটপুট ব্যাখ্যা:
[1,1] এ বোমা রাখলে ৩ জন শত্রুকে মেরে ফেলবে যা সর্বোচ্চ।
উদাহরণ
এর জন্য কোড হবে −
const arr = [ ['0', 'E', '0', '0'], ['E', '0', 'W', 'E'], ['0', 'E', '0', '0'] ]; const killEnemy = (arr = []) => { let m = arr.length; let n = m > 0 ? arr[0].length : 0; let result = 0, rows = 0; const cols = []; for (let i = 0; i < m; ++i) { for (let j = 0; j < n; ++j) { if (j === 0 || arr[i][j-1] === 'W') { rows = 0; for (let k = j; k < n && arr[i][k] != 'W'; ++k) if (arr[i][k] === 'E') rows += 1; } if (i === 0 || arr[i-1][j] === 'W') { cols[j] = 0; for (let k = i; k < m && arr[k][j] != 'W'; ++k) if (arr[k][j] === 'E') cols[j] += 1; } if (arr[i][j] === '0' && rows + cols[j] > result) result = rows + cols[j]; } } return result; }; console.log(killEnemy(arr));
আউটপুট
এবং কনসোলে আউটপুট হবে −
3