समस्या
मान लीजिए, हमारे पास 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