Puddles Volume

by Tim Ko

JavaScript

function puddleVolume(input) {
    var volume = 0;
    
    if (input.length == 0) {
        return volume;
    }
    
    var left = 0, right = input.length-1;
    var heightLeft = input[left], heightRight = input[right];
    left++, right--;
    
    while (left <= right) {
        if (heightLeft <= heightRight) {
            if (input[left] >= heightLeft) {
                heightLeft = input[left];
            } else {
                volume += heightLeft - input[left];
                //console.log("Adding: " + (heightLeft - input[left]));
            }
            left++;
        } else {
            if (input[right] >= heightRight) {
                heightRight = input[right];
            } else {
                volume += heightRight - input[right];
                //console.log("Adding: " + (heightRight - input[right]));
            }
            right--;
        }
    }
    
    return volume;
}

console.log(puddleVolume([2,5,1,2,3,4,7,7,6])); // 10
console.log(puddleVolume([1,5,1,2,3,8,2,5,2,4,6,8,4,1,6])); // 37
console.log(puddleVolume([1,5])); // 0
console.log(puddleVolume([5,1,5])); // 4
console.log(puddleVolume([1,5,1])); // 0