Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def can_hike_to(elevation_map: List[List[int]], start: List[int],
- dest: List[int], supplies: int) -> bool:
- '''Return True if and only if a hiker can move from start to dest in
- elevation_map without running out of supplies.
- Precondition: elevation_map is a valid elevation map.
- start and dest are valid cells in elevation_map.
- dest is North-West of start.
- supplies >= 0
- >>> map = [[1, 6, 5, 6],
- ... [2, 5, 6, 8],
- ... [7, 2, 8, 1],
- ... [4, 4, 7, 3]]
- >>> can_hike_to(map, [3, 3], [2, 2], 10)
- True
- >>> can_hike_to(map, [3, 3], [2, 2], 8)
- False
- >>> can_hike_to(map, [3, 3], [3, 0], 7)
- True
- >>> can_hike_to(map, [3, 3], [3, 0], 6)
- False
- >>> can_hike_to(map, [3, 3], [0, 0], 18)
- True
- >>> can_hike_to(map, [3, 3], [0, 0], 17)
- False
- '''
- change_west = (elevation_map[start[0]][start[1]])-(elevation_map[start[0]][start[1]-1])
- change_north = (elevation_map[start[0]][start[1]])-(elevation_map[start[0]-1][start[1]])
- while start[0][1] != dest[0][1]:
- if start[0] == dest[0]:
- elevation_map[start[0]][start[1]-1]
- change = elevation_map[start[0]][start[1]] - elevation_map[start[0]][start[1]-1]
- supplies = supplies - abs(change)
- elif start[1] == dest[1]:
- elevation_map[start[0]-1][start[1]]
- change = elevation_map[start[0]][start[1]] - elevation_map[start[0]-1][start[0]]
- supplies = supplies - abs(change)
- elif change_west < change_north:
- elevation_map[start[0]][start[1]-1]
- change = elevation_map[start[0]][start[1]] - elevation_map[start[0]][start[1]-1]
- supplies = supplies - abs(change)
- elif change_north < change_west:
- elevation_map[start[0]-1][start[1]]
- supplies = supplies - abs(change_north)
- elif change_west < change_north:
- elevation_map[start[0]][start[1]-1]
- supplies = supplies - abs(change_west)
- if supplies < 0:
- return False
- return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement