handling direction with zeros

Verifying solution...
Test 1 passed!
Test 2 passed!
Test 3 failed  [Hidden]
Test 4 passed! [Hidden]
Test 5 passed! [Hidden]
Test 6 passed! [Hidden]
Test 7 passed! [Hidden]
Test 8 passed! [Hidden]
Test 9 passed! [Hidden]
Test 10 passed! [Hidden]
This commit is contained in:
Seongbeom Park 2022-04-03 15:44:38 +09:00
parent 9f74692073
commit 6bcc561a2e

View File

@ -1,6 +1,6 @@
def solution(dimentions, your_position, trainer_position, distance): def solution(dimentions, your_position, trainer_position, distance):
direction_target_map = {} direction_target_map = {}
for reflected_position, is_trainer in generate_relected_positions(dimentions, your_position, trainer_position, distance): for reflected_position, is_trainer in generate_reflected_positions(dimentions, your_position, trainer_position, distance):
direction = reduce_direction((reflected_position[0] - your_position[0], reflected_position[1] - your_position[1])) direction = reduce_direction((reflected_position[0] - your_position[0], reflected_position[1] - your_position[1]))
travel = travel_distance(your_position, reflected_position) travel = travel_distance(your_position, reflected_position)
if (direction in direction_target_map): if (direction in direction_target_map):
@ -10,7 +10,7 @@ def solution(dimentions, your_position, trainer_position, distance):
direction_target_map[direction] = (travel, is_trainer) direction_target_map[direction] = (travel, is_trainer)
return len([k for k, (d, is_trainer) in direction_target_map.items() if is_trainer]) return len([k for k, (d, is_trainer) in direction_target_map.items() if is_trainer])
def generate_relected_positions(dimentions, your_position, trainer_position, distance): def generate_reflected_positions(dimentions, your_position, trainer_position, distance):
room_width, room_height = dimentions room_width, room_height = dimentions
x_range = distance // room_width + 1 x_range = distance // room_width + 1
y_range = distance // room_height + 1 y_range = distance // room_height + 1
@ -44,8 +44,12 @@ def abs_gcd(x, y):
return abs(m) return abs(m)
def reduce_direction(direction): def reduce_direction(direction):
if direction[0] == 0 or direction[1] == 0: if direction[0] == 0 and direction[1] == 0:
return direction return 0, 0
elif direction[0] == 0:
return 0, direction[1] / abs(direction[1])
elif direction[1] == 0:
return direction[0] / abs(direction[0]), 0
gcd = abs_gcd(direction[0], direction[1]) gcd = abs_gcd(direction[0], direction[1])
return direction[0]/gcd, direction[1]/gcd return direction[0]/gcd, direction[1]/gcd