```ts
export function stepCost(distance: number, rate: number): number {
  return distance * rate;
}

/** The cost of a whole trip, never below the minimum charge. */
export function tripCost(
  hops: number[],
  rate: number,
  minimum: number,
): number {
  if (hops.length === 0) return minimum;

  let total = stepCost(hops[0], rate);
  for (let i = 1; i < hops.length; i++) {
    total += Math.max(stepCost(hops[i], rate), minimum);
  }
  return total;
}
```