// ↓無視ここから
process.stdin.resume();
process.stdin.setEncoding('utf8');
// your code goes here
const lodash = {
union:function union(arr1, arr2) {
var _uniq=function(arr) {
return arr.filter(function(elm, ind, ary) {
return ary.indexOf(elm) === ind; });
};
var con = arr1.concat(arr2);
var rtn = _uniq(con);
return rtn;
}
}
const nodeRange = {
range:function(a, b, step) {
if (arguments.length === 1) {
b = a;
a = 0;
}
step = step || 1;
var x, r = [];
for (x = a; (b - x) * step > 0; x += step) {
r.push(x);
}
return r;
}
};
// ↑無視ここまで
// ↑は以下の代わり
// const lodash = require('lodash');
// const nodeRange = require("range");
// lodash.union(a,b)→aとbの和集合
// nodeRange.range→Pythonのrangeと同等
convertAnchor = (anchor) => {
const rangeList = anchor.split(",").map(item => {
if (item.indexOf("-") >= 0) {
return item
.split("-")
.map(x => Number(x))
.sort((a, b) => a - b);
} else {
return [Number(item), Number(item)];
}
});
let targets = [];
rangeList.forEach(range => {
const start = range[0];
const end = range[1];
if (start === 0 && end === 0)
return;
else if (start === 0 && end > 0 && end <= 10000)
targets = lodash.union(targets, nodeRange.range(1, end + 1));
else if (start > 0 && start <= 10000 && end > 0 && end <= 10000)
targets = lodash.union(targets, nodeRange.range(start, end + 1));
else if (start > 0 && start <= 10000 && end > 10000)
targets = lodash.union(targets, nodeRange.range(start, 10000 + 1));
else if (start > 10000 && end > 10000)
return;
});
return targets.sort((a, b) => a - b);
}
// 基本
console.log(convertAnchor("1"))
console.log(convertAnchor("1-3"))
console.log(convertAnchor("1,3"))
console.log(convertAnchor("1,1"))
console.log(convertAnchor("1-1"))
console.log(convertAnchor("000001"))
// 有効範囲外の除外(1〜10000まで有効)
console.log(convertAnchor("0"))
console.log(convertAnchor("28944"))
console.log(convertAnchor("0-2,9998-10002"))
// ソート
console.log(convertAnchor("3,4,1,2"))
// 範囲指定が逆
console.log(convertAnchor("4-1"))