Ver Mensaje Individual
  #48 (permalink)  
Antiguo 11/07/2010, 14:31
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: [Desafío PHP] Función reduce()

quike88
Código PHP:
Ver original
  1. function reduce($string)
  2. {
  3.     $res=$string[0]; //cadena donde se guardara el resultado, le asigno inicialmente el 1er caracter de la cadena
  4.     $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 '-'
  5.     $longitud=strlen($string)-1; //longitud de la cadena -1, ya que el 1ro caracter y el ultimo los pongo directamente
  6.     for($i=1;$i<$longitud;$i++)
  7.     {
  8.     //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.
  9.         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])) ) {
  10.             if($flag==0){
  11.                 $res.='-';
  12.                 $flag=1;
  13.             }
  14.         }
  15.         else {
  16.             $res.=$string[$i];
  17.             $flag=0;
  18.         }
  19.     }
  20.     $res.=$string[$i];
  21.     return $res;
  22. }

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()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.