ปัญหา
สมมติว่า เรามีตาราง 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