given a 2d grid each cell is either a wall w an enemy e or empty 0 the number zero return the maximum enemies you can kill using one bomb the bomb kills all the enemies in the same row and column from the planted point until it hits the wall since the wall is too strong to be destroyed note that you can only put the bomb at an empty cell example for the given grid 0 e 0 0 e 0 w e 0 e 0 0 return 3 placing a bomb at 1 1 kills 3 enemies iterates over all cells in the grid makes sure we are next to a wall makes sure we are next to a wall makes sure the cell contains a 0 updates the variable calculate killed enemies for row i from column j calculate killed enemies for column j from row i tests testsuite for the project iterates over all cells in the grid makes sure we are next to a wall makes sure we are next to a wall makes sure the cell contains a 0 updates the variable calculate killed enemies for row i from column j calculate killed enemies for column j from row i tests testsuite for the project
def max_killed_enemies(grid):
    if not grid:
        return 0
    m, n = len(grid), len(grid[0])
    max_killed = 0
    row_e, col_e = 0, [0] * n
    
    for i in range(m):
        for j in range(n):
            
            if j == 0 or grid[i][j-1] == 'W':
                row_e = row_kills(grid, i, j)
            
            if i == 0 or grid[i-1][j] == 'W':
                col_e[j] = col_kills(grid, i, j)
            
            if grid[i][j] == '0':
                
                max_killed = max(max_killed, row_e + col_e[j])

    return max_killed



def row_kills(grid, i, j):
    num = 0
    len_row = len(grid[0])
    while j < len_row and grid[i][j] != 'W':
        if grid[i][j] == 'E':
            num += 1
        j += 1
    return num



def col_kills(grid, i, j):
    num = 0
    len_col = len(grid)
    while i < len_col and grid[i][j] != 'W':
        if grid[i][j] == 'E':
            num += 1
        i += 1
    return num






import unittest


class TestBombEnemy(unittest.TestCase):
    def test_3x4(self):
        grid1 = [["0", "E", "0", "0"],
                 ["E", "0", "W", "E"],
                 ["0", "E", "0", "0"]]
        self.assertEqual(3, max_killed_enemies(grid1))

    def test_4x4(self):
        grid1 = [
                ["0", "E", "0", "E"],
                ["E", "E", "E", "0"],
                ["E", "0", "W", "E"],
                ["0", "E", "0", "0"]]
        grid2 = [
                ["0", "0", "0", "E"],
                ["E", "0", "0", "0"],
                ["E", "0", "W", "E"],
                ["0", "E", "0", "0"]]
        self.assertEqual(5, max_killed_enemies(grid1))
        self.assertEqual(3, max_killed_enemies(grid2))


if __name__ == "__main__":
    unittest.main()