Ver Mensaje Individual
  #39 (permalink)  
Antiguo 11/07/2010, 10:57
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()

pateketrueke
Código PHP:
Ver original
  1. function reduce($text)
  2. {
  3.     $key = 0;
  4.     $str = array();
  5.  
  6.     $test = addcslashes($text, $text);
  7.     $array = explode('\\', trim($test, '\\'));
  8.  
  9.     do
  10.     {
  11.         if (empty($str))
  12.         {
  13.             if (strlen($text) < 3) return $text;
  14.             $str []= $array[$key++];
  15.             continue;
  16.         }
  17.         elseif ( ! isset($array[$key]))
  18.         {
  19.             if (end($str) != $current) $str []= $current;
  20.             return join('', $str);
  21.         }
  22.  
  23.         $left = ord($prev = $array[$key -1]);
  24.         $right = ord($current = $array[$key++]);
  25.  
  26.         if (($factor = abs($left - $right)) == 0 OR $factor > 1)
  27.         {
  28.             if (end($str) == '-') $str []= $prev;
  29.             $str []= $current;
  30.         }
  31.         elseif ($factor == 1)
  32.         {
  33.             $next = isset($array[$key])? $array[$key]: '';
  34.             switch (1)
  35.             {
  36.                 default: break;
  37.                 case ($left < $right && $right > ord($next));
  38.                 case ($left > $right && $right < ord($next));
  39.                     $str []= $current;
  40.                 break;
  41.                 case (end($str) != '-');
  42.                     if (abs(ord($next) - $right) != 1) $str []= $current;
  43.                     else $str []= '-';
  44.                 break;
  45.             }
  46.  
  47.         }
  48.     } while (1);
  49. }

Yo. Igualmente sin comentarios, que les puedo decir: me gustan muchos los arreglos, y sabiendo que muchos usarían algún método split quise hacer algo distinto. Me agrada usar bucles lógicos, condicionales y asignaciones extrañas, etc.

Eso lo digo yo, porque nadie puede juzgar mi código mas que el jurado electo para el reto.

Por debajo de la mayoría, mi participación no resultó la mas veloz, mucho menos más la mas corta... pero que entretenido fue escribir la trivial función.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.