"""Health-cost routes to food or non-hazard refuge, with current bodies fixed.""" import heapq def health_route_cost(start, food, hazards, stacks, damage, blocked, width, height, *, refuge=False): """Cost until food resets health, or until leaving hazards for refuge. Food is consumed before elimination, so its final step needs no remaining health. Other steps must leave health positive. Bodies remain obstacles, including food-covered body cells; the caller removes the starting head. """ queue = [(0, start)] best = {start: 0} while queue: cost, point = heapq.heappop(queue) if cost != best[point]: continue if point in food or (refuge and point not in hazards): return cost x, y = point for target in ((x, y + 1), (x, y - 1), (x - 1, y), (x + 1, y)): nx, ny = target if not (0 <= nx < width and 0 <= ny < height) or target in blocked: continue step = 0 if target in food else 1 + (damage * stacks.get(target, 1) if target in hazards else 0) value = cost + step if value < best.get(target, float('inf')): best[target] = value heapq.heappush(queue, (value, target)) return None