было задание
массив соединение диапазонов
решено так:
<script>
function fn(f) {
var c = void 0;
return f.reduce(function(e, d, a, b) {
a = d + 1 == b[++a];
b = void 0 === c;
a && b ? c = d : a || b ? !a && b && e.push(d) : (e.push(c + "-" + d), c = void 0);
return e;
}, []);
};
var data = [35, 3, 6, 9, 11, 12, 13, 14, 15, 39, 9, 21, 25, 26, 27];
document.write(JSON.stringify(data) + '<br>' + JSON.stringify(fn(data)))
</script>
...лёгким росчерком переделано в архиватор
<script>
function fn(f) {
var c = void 0;
return f.split('').reduce(function(e, d, a, b) {
a = d == b[++a];
b = void 0 === c;
a && b ?(c = 2) : a && c++ || b ? !a && b && e.push(d) : (e.push(d + c), c = void 0);
return e;
}, []).join('');
};
var data = 'AAAADEEESSQQQQQQ';
document.write(JSON.stringify(data) + '<br>' + JSON.stringify(fn(data)))
</script>
...продолжение
<script>
function fn(f) {
var c = 0;
return f.split("").reduce(function(e, d, a, b) {
(a = d == b[++a]) && !c ? c = 2 : a && c++ || !c ? !a && !c && (e += d) : (e += d + c, c = 0);
return e;
}, "");
};
var data = 'AAAADEEESSQQQQQQ';
document.write(JSON.stringify(data) + '<br>' + JSON.stringify(fn(data)))
</script>
ещё чуть-чуть
<script>
function fn(f) {
var c = 0;
return f.split("").reduce(function(e, d, a, b) {
(a = d == b[++a]) && !c && (c = 1);
a ? c++ : (e += d, c && (e += c, c = 0))
return e;
}, "");
};
var data = 'AAAADEEESSQQQQQQ';
document.write(JSON.stringify(data) + '<br>' + JSON.stringify(fn(data)))
</script>