Vallu
Código php:
Ver originalfunction reduce($text){
$str='';
$creciente=false;
$max_creciente='';
$decreciente=false;
$max_decreciente='';
$max_length=count($arr_txt); $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];
}elseif((ord($arr_txt[$i])-1)==ord($arr_txt[$i-1])){ //La anterior letra es mas pequeña 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='';
}
}elseif((ord($arr_txt[$i])+1)==ord($arr_txt[$i-1])){ //La anterior letra es mas grande 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.