समस्या
मान लीजिए, हमारे पास एक 2D ग्रिड है, प्रत्येक सेल या तो एक दीवार 'W', एक दुश्मन 'E' या खाली '0' (संख्या शून्य) है। हमें एक फ़ंक्शन लिखना है जो केवल एक बम का उपयोग करके मारे जा सकने वाले अधिकतम दुश्मनों की संख्या वापस करता है।
बम लगाए गए बिंदु से उसी पंक्ति और स्तंभ में सभी दुश्मनों को तब तक मारता है जब तक कि वह दीवार से न टकरा जाए क्योंकि दीवार को नष्ट नहीं किया जा सकता।
हमें यह भी ध्यान रखना होगा कि हम बम केवल खाली सेल में रख सकते हैं। उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr = [ ['0', 'E', '0', '0'], ['E', '0', 'W', 'E'], ['0', 'E', '0', '0'] ];
तो आउटपुट होना चाहिए -
const output = 3;
आउटपुट व्याख्या:
[1,1] पर बम रखने से 3 दुश्मन मारे जाएंगे जो कि अधिकतम है।
उदाहरण
इसके लिए कोड होगा -
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