解题思路:
1. 分情况讨论即可
1.1 找到对应j的位置
1.2 j上下左右是否有B或J
2.3 j上下左右四个方向是否有C,且无遮挡物
3.4 j上下左右四个方向是否有P,且有一个遮挡物
class Solution:
def playchess(self , chessboard ):
# write code here
row, col = len(chessboard), len(chessboard[0])
# 1. 定位小j
location_j = (0, 0)
for i in range(row):
for j in range(col):
if chessboard[i][j] == 'j':
location_j = (i, j)
break
# 2. j上下左右是否有B或J
up_location = (location_j[0]-1, location_j[1])
down_location = (location_j[0]+1, location_j[1])
left_location = (location_j[0], location_j[1]-1)
right_location = (location_j[0], location_j[1]+1)
if up_location[0] >= 0 and chessboard[up_location[0]][up_location[1]] in list("BJ"):
return "Happy"
if down_location[0] < row and chessboard[down_location[0]][down_location[1]] in list("BJ"):
return "Happy"
if left_location[1] >= 0 and chessboard[left_location[0]][left_location[1]] in list("BJ"):
return "Happy"
if right_location[1] < col and chessboard[right_location[0]][right_location[1]] in list("BJ"):
return "Happy"
# 3. j上下左右四个方向是否有C,且无遮挡物
for up in range(location_j[0]-1, -1, -1):
if chessboard[up][location_j[1]] == ".":
continue
elif chessboard[up][location_j[1]] == "C":
return "Happy"
else:
break
for left in range(location_j[1]-1, -1, -1):
if chessboard[location_j[0]][left] == ".":
continue
elif chessboard[location_j[0]][left] == "C":
return "Happy"
else:
break
for down in range(location_j[0]+1, row):
if chessboard[down][location_j[1]] == ".":
continue
elif chessboard[down][location_j[1]] == "C":
return "Happy"
else:
break
for right in range(location_j[1]+1, col):
if chessboard[location_j[0]][right] == ".":
continue
elif chessboard[location_j[0]][right] == "C":
return "Happy"
else:
break
# 4. j上下左右四个方向是否有P,且有一个遮挡物
block = 0
for up in range(location_j[0]-1, -1, -1):
if chessboard[up][location_j[1]] == ".":
continue
elif chessboard[up][location_j[1]] == "P" and block == 1:
return "Happy"
else:
block += 1
if block >= 2:
break
block = 0
for left in range(location_j[1]-1, -1, -1):
if chessboard[location_j[0]][left] == ".":
continue
elif chessboard[location_j[0]][left] == "P" and block == 1:
return "Happy"
else:
block += 1
if block >= 2:
break
block = 0
for down in range(location_j[0]+1, row):
if chessboard[down][location_j[1]] == ".":
continue
elif chessboard[down][location_j[1]] == "P" and block == 1:
return "Happy"
else:
block += 1
if block >= 2:
break
block = 0
for right in range(location_j[1]+1, col):
if chessboard[location_j[0]][right] == ".":
continue
elif chessboard[location_j[0]][right] == "P" and block == 1:
return "Happy"
else:
block += 1
if block >= 2:
break
return "Sad"


京公网安备 11010502036488号