Hone logo
Hone
Problems

Cost-Based Optimizer for Route Selection

Imagine you're building a delivery service application. You need to find the most cost-effective route for a delivery driver, considering factors like distance, tolls, and potential traffic delays (represented as a cost multiplier). This challenge asks you to implement a cost-based optimizer that selects the best route from a set of possible routes, minimizing the total cost. A cost-based optimizer is crucial for efficient logistics and resource allocation.

Problem Description

You are given a set of possible routes for a delivery. Each route is represented as an object with the following properties:

  • id: A unique identifier for the route (string).
  • distance: The distance of the route in miles (number).
  • tolls: The estimated toll cost for the route (number).
  • trafficMultiplier: A multiplier representing the impact of traffic on the route's cost (number, typically between 1 and 2, where 1 means no traffic impact).

Your task is to implement a function findOptimalRoute that takes an array of route objects as input and returns the ID of the route with the lowest total cost. The total cost of a route is calculated as:

totalCost = distance + tolls + (distance * trafficMultiplier)

Key Requirements:

  • The function must handle an empty array of routes gracefully (return null).
  • The function must correctly calculate the total cost for each route.
  • The function must accurately identify the route with the minimum total cost.
  • The function should be efficient, especially when dealing with a large number of routes.

Expected Behavior:

The function should iterate through the provided routes, calculate the total cost for each, and return the id of the route with the lowest total cost. If multiple routes have the same minimum cost, return the id of the first such route encountered.

Edge Cases to Consider:

  • Empty input array.
  • Routes with zero distance or tolls.
  • Routes with a trafficMultiplier of 1 (no traffic impact).
  • Routes with a trafficMultiplier greater than 1 (traffic impact).
  • Routes with very large distances or tolls (potential for overflow, though this is less of a concern in JavaScript).

Examples

Example 1:

Input: [
  { id: "A", distance: 10, tolls: 2, trafficMultiplier: 1.2 },
  { id: "B", distance: 15, tolls: 0, trafficMultiplier: 1.1 },
  { id: "C", distance: 8, tolls: 5, trafficMultiplier: 1 }
]
Output: "A"
Explanation:
Route A: 10 + 2 + (10 * 1.2) = 10 + 2 + 12 = 24
Route B: 15 + 0 + (15 * 1.1) = 15 + 0 + 16.5 = 31.5
Route C: 8 + 5 + (8 * 1) = 8 + 5 + 8 = 21
Route A has the lowest total cost (24).

Example 2:

Input: [
  { id: "X", distance: 5, tolls: 1, trafficMultiplier: 1 },
  { id: "Y", distance: 5, tolls: 1, trafficMultiplier: 1 }
]
Output: "X"
Explanation:
Route X: 5 + 1 + (5 * 1) = 11
Route Y: 5 + 1 + (5 * 1) = 11
Both routes have the same cost. The function returns the ID of the first route encountered ("X").

Example 3:

Input: []
Output: null
Explanation: The input array is empty, so the function returns null.

Constraints

  • The input array will contain only valid route objects with the specified properties.
  • distance will be a non-negative number.
  • tolls will be a non-negative number.
  • trafficMultiplier will be a number greater than or equal to 1.
  • The number of routes in the input array will be between 0 and 1000.
  • Performance: The function should complete within 100 milliseconds for an input array of 1000 routes.

Notes

  • Consider using a simple iterative approach to find the minimum cost route.
  • Initialize the minCost and optimalRouteId variables appropriately before iterating through the routes.
  • Pay close attention to the calculation of the totalCost for each route.
  • The problem focuses on the core logic of finding the minimum cost route; error handling beyond the empty array case is not required.
Loading editor...
javascript