{
  "schemaVersion": 1,
  "slug": "driving-distance-time-calculator",
  "category": "travel",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "143c35f4df83ce090415f67b93a146b8ce4a7b41d9031c46f8d3d7214ed9c06f",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/driving-distance-time-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "v_avg = Σᵢ Dᵢ ÷ (Σᵢ (Dᵢ ÷ vᵢ) + n × m ÷ 60), i ∈ {1, 2, 3}",
    "vars": [
      [
        "Dᵢ",
        "Segment distance (mi)"
      ],
      [
        "vᵢ",
        "Entered segment average speed (mph)"
      ],
      [
        "n",
        "Number of stops"
      ],
      [
        "m",
        "Minutes per stop"
      ],
      [
        "v_avg",
        "Overall average speed including stops"
      ]
    ],
    "note": "Total time = motorway + other-road + city driving time + planned stops. Overall average speed includes stop time. Speeds and distances use mph and miles."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "sources": [
      {
        "name": "US DOE/EPA — Fuel economy calculations and trip cost inputs",
        "url": "https://www.fueleconomy.gov/feg/savemoney.shtml"
      }
    ],
    "referenceRole": "input",
    "implementationHash": "143c35f4df83ce090415f67b93a146b8ce4a7b41d9031c46f8d3d7214ed9c06f",
    "basis": "v_avg = Σᵢ Dᵢ ÷ (Σᵢ (Dᵢ ÷ vᵢ) + n × m ÷ 60), i ∈ {1, 2, 3}",
    "limitations": "Use the cited guidance and your own measurements, bills or product specifications to choose inputs. Sample defaults are not current local data."
  },
  "contract": {
    "compute": "const motorwayHours = motorwaySpeed > 0 ? motorwayMiles/motorwaySpeed : 0; const aroadHours = aroadSpeed > 0 ? aroadMiles/aroadSpeed : 0; const cityHours = citySpeed > 0 ? cityMiles/citySpeed : 0; const totalDistance = motorwayMiles+aroadMiles+cityMiles; const totalHours = motorwayHours+aroadHours+cityHours+stops*stopMinutes/60; return { totalDistance, motorwayHours, aroadHours, cityHours, totalHours, averageSpeed: totalHours > 0 ? totalDistance/totalHours : 0 };",
    "inputs": [
      {
        "name": "motorwayMiles",
        "type": "number",
        "default": 200,
        "min": 0,
        "max": 10000,
        "step": 1
      },
      {
        "name": "motorwaySpeed",
        "type": "number",
        "default": 62,
        "min": 10,
        "max": 90,
        "step": 1,
        "slider": true
      },
      {
        "name": "aroadMiles",
        "type": "number",
        "default": 80,
        "min": 0,
        "max": 10000,
        "step": 1
      },
      {
        "name": "aroadSpeed",
        "type": "number",
        "default": 42,
        "min": 10,
        "max": 70,
        "step": 1,
        "slider": true
      },
      {
        "name": "cityMiles",
        "type": "number",
        "default": 20,
        "min": 0,
        "max": 2000,
        "step": 1,
        "slider": true
      },
      {
        "name": "citySpeed",
        "type": "number",
        "default": 20,
        "min": 5,
        "max": 45,
        "step": 1,
        "slider": true
      },
      {
        "name": "stops",
        "type": "number",
        "default": 2,
        "min": 0,
        "max": 50,
        "step": 1,
        "slider": true
      },
      {
        "name": "stopMinutes",
        "type": "number",
        "default": 10,
        "min": 0,
        "max": 120,
        "step": 5,
        "slider": true
      }
    ],
    "outputs": [
      {
        "name": "totalDistance",
        "precision": 0,
        "unit": "mi"
      },
      {
        "name": "motorwayHours",
        "precision": 2,
        "unit": "h"
      },
      {
        "name": "aroadHours",
        "precision": 2,
        "unit": "h"
      },
      {
        "name": "cityHours",
        "precision": 2,
        "unit": "h"
      },
      {
        "name": "totalHours",
        "precision": 2,
        "unit": "h"
      },
      {
        "name": "averageSpeed",
        "precision": 1,
        "unit": "mph"
      }
    ],
    "interpret": null
  }
}
