maycolalvarez
Código PHP:
Ver originalfunction reduce($str)
{
$charSequence = null; // contiene el carácter que inicia una secuencia:
$charSequenceDiff = 0; // contiene la diferencia con la cual se identifica la secuencia (+1 ó -1)
$result = ''; // cadena donde se vuelcan los resultados
for ($i = 0; $i < strlen($str); $i++) { // extrae el carácter actual y el proximo:
$current = $str[$i];
$next = isset($str[$i + 1]) ?
$str[$i + 1] : null; // obtiene su valor ASCII para comparar:
$currentChar = ord($current); // obtiene el valor absoluto para determinar si están en secuencia
$absoluteDiff = abs($currentChar - $nextChar);
if (($absoluteDiff == 0) || ($absoluteDiff > 1)) {
if (($charSequence != null) && (abs(ord($charSequence) - $currentChar) > 1)) { $result .= '-';
}
$result.= $current;
$charSequence = null;
} else {
// diferencia entre los caracteres consecutivos (-1 incremento, +1 decremento)
$diff = ($currentChar - $nextChar);
if(($charSequence == null) || ($charSequenceDiff != $diff)) {
if(($charSequence != null) && (abs(ord($charSequence) - $currentChar) > 1)) { $result .= '-';
}
$result.= $current;
$charSequence = $current;
$charSequenceDiff = $diff;
}
}
}
return $result;
}
Si bien recuerdo, este fue el primer código que recibí.
El comparar un valor absoluto en cuanto a la diferencia en la secuencia
a-z es crucial, al momento de implementar la comparación normal e invertida. Si, ya se que no se entiende lo que digo... pero juro que otra clave se encuentra ahí.