que tienen secuencias de números enteros muy largas que se ven así (longitud arbitraria!):Codificar/comprimir secuencia de enteros que se repiten
0000000001110002220033333
Ahora necesito algún algoritmo para convertir esta cadena en algo comprimido como
a9b3a3c3a2d5
Lo que significa "a 9 veces, luego b 3 veces, luego 3 veces" y así sucesivamente, donde "a" representa 0, "b" para 1, "c" para 2 y "d" para 3.
¿Cómo harías eso? Hasta ahora no se me ocurrió nada adecuado, y no tuve suerte con Google porque realmente no sabía qué buscar. ¿Cómo se llama este tipo de codificación/compresión?
PS: Voy a hacer la codificación con PHP , y la decodificación en JavaScript.
Editar: ¡Gracias a todos!
que terminó con esta función para la codificación:
protected function numStringToRle($s){
$rle = '';
$count = 1;
$len = strlen($s);
for($i = 0; $i < $len; $i++){
if($i != $len && isset($s[$i+1]) && $s[$i] == $s[$i+1]){
$count++;
} else {
$rle .= chr($s[$i] + 97).($count == 1 ? '' : $count);
$count = 1;
}
}
return $rle;
}
Y que para la decodificación:
var decodeCoords = function(str) {
str = str.replace(/(.)(\d+)/g, function(_, x, n) {
return new Array(parseInt(n, 10) + 1).join(x);
});
return str.
replace(/a/g, '0').
replace(/b/g, '1').
replace(/c/g, '2').
replace(/d/g, '3');
};
¿Qué es exactamente está usando esto para? ¿Estás seguro de que no puedes simplemente comprimirlo usando Gzip? http: // stackoverflow.com/questions/294297/javascript-implementation-of-gzip Será más eficiente en tiempo y espacio, y ya está hecho para ti. – ryeguy
gzip no es una opción porque necesito decodificarlo con javascript. Lo estoy usando como una especie de máscara de bits para un juego 2d. – Alex