Miles/Gallon

by Andrew Maxwell

HTML

<body ng-app="" ng-controller="ctrl">
    <div>I'm going <input type="number" ng-model="miles"/> miles at <input type="number" ng-model="speed"/> mph, gas costs $<input type="number" ng-model="price"/>/gal, my car gets <input type="number" ng-model="mpg55"/> mpg at 55 mph and <input type="number" ng-model="mpg70"/> mpg at 70 mph.</div>
    <div ng-repeat="s in speeds()">If you go {{ s.speed }} mph, you'll save {{ s.mins | number:0 }} minutes but you'll spend ${{ s.cost | number:2 }} extra on gas ({{ s.cost / s.mins * 100 | number:0 }} cents/min).</div>
</body>

CSS

* {font-family: sans-serif}
input {width: 40px}

JavaScript

function ctrl($scope){
    $scope.price = 3.37
    $scope.miles = 100
    $scope.mpg55 = 40
    $scope.mpg70 = 25
    $scope.speed = 60
    $scope.mpg = function(speed){
        return ($scope.mpg70 - $scope.mpg55) / 15 * (speed - 55) + $scope.mpg55
    }
    $scope.speeds = function(){
        var sp = []
        for (var i = 5; i <= 25; i += 5){
            sp.push({
                speed: $scope.speed + i,
                mins: 60 * $scope.miles * (1 / $scope.speed - 1 / ($scope.speed + i)),
                cost: $scope.price * $scope.miles * (1 / $scope.mpg($scope.speed + i) - 1 / $scope.mpg($scope.speed))
            })
        }
        return sp
    }
}