সমস্যা
ধরা যাক, একটি ২ডি গ্রিড আছে, যেখানে প্রতিটি সেল হয় দেওয়াল ('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