Показать сообщение отдельно
  #7 (permalink)  
Старый 30.01.2018, 17:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109


было задание массив соединение диапазонов
решено так:
<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>

Последний раз редактировалось рони, 30.01.2018 в 18:43.
Ответить с цитированием