forked from keon/algorithms
-
Notifications
You must be signed in to change notification settings - Fork 1
/
bomb_enemy.py
62 lines (50 loc) · 1.54 KB
/
bomb_enemy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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)
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
# calculate killed enemies for row i from column j
def row_kills(grid, i, j):
num = 0
while j < len(grid[0]) and grid[i][j] != 'W':
if grid[i][j] == 'E':
num += 1
j += 1
return num
# calculate killed enemies for column j from row i
def col_kills(grid, i, j):
num = 0
while i < len(grid) and grid[i][j] != 'W':
if grid[i][j] == 'E':
num += 1
i += 1
return num
grid = [
["0", "E", "0", "E"],
["E", "E", "E", "0"],
["E", "0", "W", "E"],
["0", "E", "0", "0"]]
print(grid)
print(max_killed_enemies(grid))