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() {
...