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

fran86
Código PHP:
Ver original
  1. function reduce($cadena)
  2. {
  3.     // Solo aplica a cadenas de 3 o mas caracteres
  4.     if (strlen($cadena) >= 3) {
  5.         // Agrega el extremo izquierdo
  6.         $cadenaReducida = $cadena[0];
  7.         // Recorre la cadena omitiendo el primer y ultimo caracter
  8.         for ($i=1; $i<strlen($cadena)-1; $i++) {
  9.             $iInicial = $i;
  10.             // Avanza la posicion del caracter si es el medio de un rango
  11.             while (   ($i+1 < strlen($cadena))
  12.                    && ($cadena[$i-1] != $cadena[$i+1])
  13.                    && ((ord($cadena[$i-1])+ord($cadena[$i+1]))/2 == ord($cadena[$i]))
  14.             ) {
  15.                 $i++;
  16.             }
  17.             // Agrega en $cadenaReducida de acuerdo a si se omitieron o no caracteres
  18.             if ($iInicial != $i) {
  19.                 $cadenaReducida .= "-";
  20.                 $i--;
  21.             } else {
  22.                 $cadenaReducida .= $cadena[$i];
  23.             }
  24.         }
  25.         // Agrega el extremo derecho
  26.         $cadenaReducida .= $cadena[strlen($cadena)-1];
  27.         return $cadenaReducida;
  28.     } else {
  29.         return $cadena;
  30.     }
  31. }

Un código honesto y magnifico, resulta muy halagador a la lectura la participación de este usuario.

Aunque claro, no supera con creces el tiempo de ejecución de sus oponentes si cumple su cometido, y lo realiza de manera ejemplar. Ya aquí se pone en practica el descarte del primer y último carácter, luego un bucle como scanner... presto!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.