const intervalSigns = {
"(": false,
")": false,
"[": true,
"]": true
};
/**
* Функция, выполняющая парсинг математического выражения (интервала)
* @param data
* @return {{includeMin: *, includeMax: *, min: *, max: *}}
*/
function parseInterval(data) {
let includeMin = intervalSigns[data[0]];
let includeMax = intervalSigns[data[data.length - 1]];
let values = data
.substring(1, data.length - 1)
.split("~").map((item) => {
return Number(item)
});
return {
includeMin: includeMin,
includeMax: includeMax,
min: values[0],
max: values[1]
}
}
/**
* Функция, выполняющая проверку нахождения числа в интервале
* @param params
* @return {boolean}
*/
function inInterval(params) {
let value = params.value;
let min = params.min;
let max = params.max;
let includeMin = params.includeMin;
let includeMax = params.includeMax;
if (includeMin === true && includeMax === true) {
return (value >= min && value <= max);
}
if (includeMin === true && includeMax === false) {
return (value >= min && value < max);
}
if (includeMin === false && includeMax === true) {
return (value > min && value <= max);
}
return (value > min && value < max);
}
function selectEdgeValue(interval) {
if (interval.includeMin) return interval.min;
if (interval.includeMax) return interval.max;
return interval.min;
}
module.exports = {
parseInterval: parseInterval,
inInterval: inInterval,
selectEdgeValue: selectEdgeValue
};