35 lines
807 B
JavaScript
35 lines
807 B
JavaScript
#!/usr/bin/env js
|
|
|
|
function main() {
|
|
print(rangeExpand('-6,-3--1,3-5,7-11,14,15,17-20'));
|
|
}
|
|
|
|
function rangeExpand(rangeExpr) {
|
|
|
|
function getFactors(term) {
|
|
var matches = term.match(/(-?[0-9]+)-(-?[0-9]+)/);
|
|
if (!matches) return {first:Number(term)};
|
|
return {first:Number(matches[1]), last:Number(matches[2])};
|
|
}
|
|
|
|
function expandTerm(term) {
|
|
var factors = getFactors(term);
|
|
if (factors.length < 2) return [factors.first];
|
|
var range = [];
|
|
for (var n = factors.first; n <= factors.last; n++) {
|
|
range.push(n);
|
|
}
|
|
return range;
|
|
}
|
|
|
|
var result = [];
|
|
var terms = rangeExpr.split(/,/);
|
|
for (var t in terms) {
|
|
result = result.concat(expandTerm(terms[t]));
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
main();
|