любые алгоритмы сжатия без потерь с одинаковой вероятностью могут либо уменьшить объем данных, случайно найдя закономерность, либо увеличить, если таковой не нашлось.
function getMaxDepth(arr, level ){
if ( !level ){
level = 0;
}
if ( Array.isArray(arr) ) {
level = level + 1;
var p = level;
for(var i=0; i<arr.length; i++){
var c = arr[i];
var sublevel = getMaxDepth(c, level)
p = Math.max( p, sublevel);
}
return p;
} else {
return level;
}
}
// линейный массив, описывающий 3-х мерны вектор
const data = Array.apply(null, {length: amount+1}).map((v,i)=>({char: i, index: i, offset: 0}));
// массив в который складываем преобразованные буквы
const a = [];
// общее смещение
let offset = 0;
// цикл по тексту
for(var k=0; k<length; k++){
const char = text[k];
const item = data[char];
const index = item.index + offset - (item.offset - offset); // => 1 + item.index - (1 - offset)
if (char != data[1-offset]) {
item.offset = offset;
offset++;
item.index = 1-offset;
data[item.index] = item;
}
a.push(index);
}
return a;
}
console.log( alise(7, 3, 1, [2,3,1,2,1,1,1]).join(',') );