quike88
Código PHP:
Ver originalfunction reduce($string)
{
$res=$string[0]; //cadena donde se guardara el resultado, le asigno inicialmente el 1er caracter de la cadena
$flag=0; //en el caso de que exista la secuencia se pone en 1, para que asi, si es de mas 3 letras, no se repita el '-'
$longitud=strlen($string)-1; //longitud de la cadena -1, ya que el 1ro caracter y el ultimo los pongo directamente for($i=1;$i<$longitud;$i++)
{
//verifico si el valor ascii - 1 es igual al del caracter anterior, y sumando 1 si es igual al proximo, y luego al revez por si la secuencia es reversa.
if( (ord($string[$i])-1==ord($string[$i-1]) and
ord($string[$i])+1==ord($string[$i+1])) or
(ord($string[$i])+1==ord($string[$i-1]) and
ord($string[$i])-1==ord($string[$i+1])) ) { if($flag==0){
$res.='-';
$flag=1;
}
}
else {
$res.=$string[$i];
$flag=0;
}
}
$res.=$string[$i];
return $res;
}
Bingo!!
Este si es el código mas breve, sin embargo falla en cadenas menores a tres caracteres... ;)
Ahora, tomando en cuenta algunos factores para resumir la abstracción de la solución... este código pudo ser aún mas reducido, igual que el nombre de la función...
reduce()