Queen's Attack II Discussions | Algorithms | HackerRank
We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
step 1: calculate the maximum attacks in eight directions; step 2: if there is obstacle in any one of the eight direction, which one smaller is the distance.
def queensAttack(n, k, r_q, c_q, obstacles):
# Write your code here
dir_dis = {(0,1):n-c_q, (0,-1):c_q - 1, (1, 0): n-r_q, (-1, 0): r_q - 1,
(-1, -1):min(r_q - 1, c_q - 1),
(1, 1):min(n-r_q, n-c_q),
(1, -1): min(n-r_q, c_q-1),
(-1, 1):min(r_q-1, n-c_q)
}
for ro, co in obstacles:
dx = ro - r_q
dy = co - c_q
if dx == 0 or dy == 0 or abs(dx) == abs(dy):
dis = abs(dx) if abs(dx) == abs(dy) else max(abs(dx), abs(dy))
di = (dx/dis, dy/dis)
dir_dis[di] = min(dir_dis[di], dis - 1)
return sum(dir_dis.values())
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Queen's Attack II
You are viewing a single comment's thread. Return to all comments →
step 1: calculate the maximum attacks in eight directions; step 2: if there is obstacle in any one of the eight direction, which one smaller is the distance. def queensAttack(n, k, r_q, c_q, obstacles): # Write your code here dir_dis = {(0,1):n-c_q, (0,-1):c_q - 1, (1, 0): n-r_q, (-1, 0): r_q - 1, (-1, -1):min(r_q - 1, c_q - 1), (1, 1):min(n-r_q, n-c_q), (1, -1): min(n-r_q, c_q-1), (-1, 1):min(r_q-1, n-c_q) } for ro, co in obstacles: dx = ro - r_q dy = co - c_q if dx == 0 or dy == 0 or abs(dx) == abs(dy): dis = abs(dx) if abs(dx) == abs(dy) else max(abs(dx), abs(dy)) di = (dx/dis, dy/dis) dir_dis[di] = min(dir_dis[di], dis - 1) return sum(dir_dis.values())