Interval Encoder 2

by nwellcome

JavaScript

var cases = [
     ["=0",	">0; <=.05", ">.05; <=.1",	">.1"]
];

function encode(intervals) {
    var output = "";
    var previous = 0;
    var previousClosed = false;
    for (var i = 0; i < intervals.length; i++) {
        if (output.length > 0) {
                output += ";";   
        }
        var interval = intervals[i] + "";
        interval = interval.replace(/\s/g, '');
        var bounds = interval.split(";");
        for (var j = 0; j < bounds.length; j++) {
            output += (j > 0 ? "," : "");
            var parts = bounds[j].match(/([><=]=?)(.*)/);
            var inequality = parts[1];
            var valueStr = parts[2];
            var value = parseFloat(valueStr);
            output += inequality + value;
        }
    }
    return output;
}

function decode(intervalString, value) {
    var intervals = intervalString.split(";");
    for (var i = 0; i < intervals.length; i++) {
        var interval = intervals[i];
        var bounds = interval.split(",");
        if (bounds.length == 1) {
            var parts = bounds[0].match(/([><=]=?)(.*)/);
            if (checkInterval(parts[1], parts[2], value)) {
                 return i;   
            }
        } else {
            var lowerParts = bounds[0].match(/([><=]=?)(.*)/);
            var upperParts = bounds[1].match(/([><=]=?)(.*)/);
            if (checkInterval(lowerParts[1], lowerParts[2], value) && checkInterval(upperParts[1], upperParts[2], value)) {
                return i;   
            }
        }
    }
}

function checkInterval(inequality, bound, value) {
    switch(inequality) {
        case "=":
            return (value == bound);
            break;
        case ">":
            return (value > bound);
            break;
        case ">=":
            return (value >= bound);
            break;
        case "<":
            return (value < bound);
            break;
        case "<=":
            return (value <= bound);
            break;
    }
}

function main() {
   ...