Código php:
Ver original
function reduce($text){ $str=''; $creciente=false; $max_creciente=''; $decreciente=false; $max_decreciente=''; $contador_cre=0; $contador_de=0; //recorro el array en el qual esta la cadena a compilar for($i=0;$i<$max_length;$i++){ if($i==0){ $str=$arr_txt[$i]; }else{ if($arr_txt[$i]==$arr_txt[$i-1]){ //si la letra la siguente de la anterior if($creciente){ if($contador_cre>1){ //y el contador dice que hay 2 o mas $str.="-".$max_creciente; //se acorta con la forma a-c }else{ $str.=$max_creciente; } $contador_cre=0; $creciente=false; }elseif($decreciente){ //lo mismo pero en decreciente if($contador_de>1){ $str.="-".$max_decreciente; }else{ $str.=$max_decreciente; } $contador_de=0; $decreciente=false; } $str.=$arr_txt[$i]; if($i==$max_length-1){ //Si es la ultima letra de la cadena if($contador_cre>0){ //y el contador no es 0 $str.="-".$arr_txt[$i]; }else{ $str.=$arr_txt[$i-1].$arr_txt[$i]; } }else{ if($decreciente){ //si no es la ultima letra de la cadena if($contador_de>1){ //y venimos de una cadena decreciente $str.="-".$max_decreciente; }else{ $str.=$max_decreciente; } $contador_de=0; } $contador_cre++; $creciente=true; $max_creciente=$arr_txt[$i]; $decreciente=false; $max_decreciente=''; } if($i==$max_length-1){ //Si es la ultima letra de la cadena if($contador_de>0){ $str.="-".$arr_txt[$i]; }else{ $str.=$arr_txt[$i-1].$arr_txt[$i]; } }else{ //si no es la utlima letra de la cadena if($creciente){ if($contador_cre>1){ $str.="-".$max_creciente; }else{ $str.=$max_creciente; } $contador_cre=0; } $contador_de++; $decreciente=true; $max_decreciente=$arr_txt[$i]; $creciente=false; $max_creciente=''; } }else{ //si la letra no viene de creciente o decreciente if($creciente){ //pero la anterior letra si es creciente if($contador_cre>1){ $str.="-".$max_creciente; }else{ $str.=$max_creciente; } $creciente=false; $contador_cre=0; }elseif($decreciente){ //mismo per en decreciente if($contador_de>1){ $str.="-".$max_decreciente; }else{ $str.=$max_decreciente; } $decreciente=false; $contador_de=0; } $str.=$arr_txt[$i]; } } } return $str; }
Les presento el código mas largo de la competencia, como pueden ver resulta muy claro si se lee poco a poco. Personalmente lo veo complicado con mucho if-then-else, y realmente no lo entiendo del todo.
Sin embargo cabe destacar el uso de arreglos a partir de una cadena, una técnica que veremos a lo largo de las siguientes participaciones.