GatorV
Código PHP:
Ver originalfunction reduce($cadena)
{
return $cadena;
}
$chars = preg_split('//', $cadena, -1, PREG_SPLIT_NO_EMPTY
); $pos = 0;
while($pos < $size) {
$current = ord($chars[$pos]); $next = (isset($chars[($pos + 1)])) ?
ord($chars[($pos + 1)]) : 0; $onext = (isset($chars[($pos + 2)])) ?
ord($chars[($pos + 2)]) : 0; $out[] = $chars[$pos];
if (($current + 1) == $next && (($current + 2) == $onext)) {
$out[] = '-';
do {
$pos++;
$current = ord($chars[$pos]); $next = (isset($chars[($pos + 1)])) ?
ord($chars[($pos + 1)]) : 0; if (($current + 1) != $next) {
break;
}
} while(true);
} elseif ((($current - 1) == $next) && (($current - 2) == $onext)) {
$out[] = '-';
do {
$pos++;
$current = ord($chars[$pos]); $next = (isset($chars[($pos + 1)])) ?
ord($chars[($pos + 1)]) : false; if (($current - 1) != $next) {
break;
}
} while(true);
} else {
$pos++;
}
}
}
He aquí el primer código de un moderador del foro de PHP, que como pueden observar hace un serie de elegantes bucles, muy interesante y sin comentarios. Pero es entendible, y bien, no es lo mas corto... pero que bueno se pone esto!!
La comparación lógica de los números ordinales en la secuencia de caracteres es solo una parte del problema, que como pocos supo resolver de manera efectiva y breve. Además coloca su código dentro de los mas rápidos cerca de la media
0.0050