Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Codificación de textos de mi infancia cambiando letras de lugar

Estas en el tema de Codificación de textos de mi infancia cambiando letras de lugar en el foro de PHP en Foros del Web. Amigos, estoy algo atascado y le pido una mano, he visto que sus mentes brillan en php. Estoy queriendo hacer un traductor de mi lenguaje ...
  #1 (permalink)  
Antiguo 20/07/2013, 11:39
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Codificación de textos de mi infancia cambiando letras de lugar

Amigos,
estoy algo atascado y le pido una mano, he visto que sus mentes brillan en php.

Estoy queriendo hacer un traductor de mi lenguaje en clave que usabamos de chicos.

Les cuento las reglas:
1- las vocales cambian "a" por "u", "e" por "o", "i" queda igual, "o" por "e" y "u" por "a".
2- las consonantes cambian su orden dentro de la misma palabra.

Ejemplo:
la palabra "abeja" queda "ujobu"

estoy intentandolo con:

explode e implode:

$cadena = "las bejan hacen miel";
$clave = explode(" ","$cadena");
// y después
$resultado = implode(" ", $clave);

Tambien con strien:

$palabra = $clave[0];
for($i=0;$i<strlen($palabra);$i++){
if($palabra[$i] == "a"){ $palabra[$i] = "u"; }
if($palabra[$i] == "e"){ $palabra[$i] = "o"; }
if($palabra[$i] == "o"){ $palabra[$i] = "e"; }
if($palabra[$i] == "u"){ $palabra[$i] = "a"; }
}
echo $palabra;

tengo trabas con que me vuelve a traducir lo ya traducido y no veo el resultado en las vocales, y con que no se como mantener el correcto orden de las consonantes.

Si a alguno le divierte ayudarme le agradeceré.
  #2 (permalink)  
Antiguo 20/07/2013, 19:09
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

ya logre lo de las vocales
con

$cadena = "las abejas hacen miel";
$cadena=strtr($cadena,"aeou","uoea");
echo $cadena;

me falta dar vuelta las consonantes
  #3 (permalink)  
Antiguo 21/07/2013, 06:49
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

con esto separo las palabras
$cadenapalabras = explode(" ","$cadena");

con esto separo las letras de cada palabra
$cadenaletras = chunk_split($cadena,1, "");

lo que necesitaria es identificar cuales son consonantes e invertir el orden
  #4 (permalink)  
Antiguo 21/07/2013, 23:08
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 13 años, 4 meses
Puntos: 214
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

<saludos>
Interesante ejercicio, pregunto algo, que regla manejaban si no hay consonante a cambiar?
Por ej en la palabra "hacen", si entiendo el concepto, quedaría "cuhon"
Sin embargo la n final no cambia, o bueno, por lo menos eso creo, o que hacían en esos casos?

Estoy realizando otras pruebas, y dependiendo de la respuesta que des,
haría cambios al mismo o lo publico como lo tengo
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 07/08/2013, 14:40
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 13 años, 4 meses
Puntos: 214
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

<saludos>
Pues en vista que no hubo answer, por ahora publico lo que llevo

Código PHP:
Ver original
  1. <?php
  2.     $cadena = 'las abejas hacen miel';
  3.     $vocalesiniciales = 'aeouáéóú';
  4.     $vocalesfinales = 'uoeaúóéá';
  5.     $cadena=strtr($cadena,$vocalesiniciales,$vocalesfinales);
  6.     $cadena.'<br>';
  7.     $cadenapalabras = explode(' ',$cadena);
  8.     $test = array('a','e','i','o','u','á', 'é', 'í', 'ó', 'ú');
  9.     $posicionesacambiar = array();
  10.  
  11.     for( $i = 0; $i < sizeof($cadenapalabras); $i++ )
  12.     {
  13.         $k = 0;
  14.         for($j = 0; $j < strlen    ($cadenapalabras[$i]); $j++)
  15.         {
  16.             if( !array_search($cadenapalabras[$i][$j], $test ))
  17.             {    
  18.                 $posicionesacambiar[$i][$k] = $j;
  19.                 $k++;
  20.             }
  21.         }    
  22.        
  23.         for($j = 0; $j < sizeof($posicionesacambiar); $j++)
  24.         {    
  25.             if( $j == 0 )
  26.                 $l = 0;
  27.  
  28.             if( $j % 2 == 0  && strlen($cadenapalabras[$i]) > 2 )
  29.             {        
  30.                 if ( $l == 0 || $l > 0 && strlen($cadenapalabras[$i]) % $l == 0 && $l < sizeof($posicionescambiar[$i]) )
  31.                 {
  32.                     $tmp = $cadenapalabras[$i][$posicionesacambiar[$i][$l]];            
  33.                     $cadenapalabras[$i][$posicionesacambiar[$i][$l]] = $cadenapalabras[$i][$posicionesacambiar[$i][$l+1]];
  34.                     $cadenapalabras[$i][$posicionesacambiar[$i][$l+1]] = $tmp;        
  35.                     $l++;            
  36.                 }            
  37.             }
  38.                
  39.         }
  40.     }
  41.     echo $salida = implode(' ', $cadenapalabras);
  42. ?>

Suerte con eso!!!

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 10/08/2013, 07:10
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Pues en vista que no hubo answer, por ahora publico lo que llevo

Código PHP:
Ver original
  1. <?php
  2.     $cadena = 'las abejas hacen miel';
  3.     $vocalesiniciales = 'aeouáéóú';
  4.     $vocalesfinales = 'uoeaúóéá';
  5.     $cadena=strtr($cadena,$vocalesiniciales,$vocalesfinales);
  6.     $cadena.'<br>';
  7.     $cadenapalabras = explode(' ',$cadena);
  8.     $test = array('a','e','i','o','u','á', 'é', 'í', 'ó', 'ú');
  9.     $posicionesacambiar = array();
  10.  
  11.     for( $i = 0; $i < sizeof($cadenapalabras); $i++ )
  12.     {
  13.         $k = 0;
  14.         for($j = 0; $j < strlen    ($cadenapalabras[$i]); $j++)
  15.         {
  16.             if( !array_search($cadenapalabras[$i][$j], $test ))
  17.             {    
  18.                 $posicionesacambiar[$i][$k] = $j;
  19.                 $k++;
  20.             }
  21.         }    
  22.        
  23.         for($j = 0; $j < sizeof($posicionesacambiar); $j++)
  24.         {    
  25.             if( $j == 0 )
  26.                 $l = 0;
  27.  
  28.             if( $j % 2 == 0  && strlen($cadenapalabras[$i]) > 2 )
  29.             {        
  30.                 if ( $l == 0 || $l > 0 && strlen($cadenapalabras[$i]) % $l == 0 && $l < sizeof($posicionescambiar[$i]) )
  31.                 {
  32.                     $tmp = $cadenapalabras[$i][$posicionesacambiar[$i][$l]];            
  33.                     $cadenapalabras[$i][$posicionesacambiar[$i][$l]] = $cadenapalabras[$i][$posicionesacambiar[$i][$l+1]];
  34.                     $cadenapalabras[$i][$posicionesacambiar[$i][$l+1]] = $tmp;        
  35.                     $l++;            
  36.                 }            
  37.             }
  38.                
  39.         }
  40.     }
  41.     echo $salida = implode(' ', $cadenapalabras);
  42. ?>

Suerte con eso!!!

</saludos>
Hola mortiprogramador, muchas gracias por tu respuesta
me das varias ideas nuevas, sin embargo no lo logro aún.

funciona perfecto con palabra cortas, pero te detallo el error:
todas las consonantes se cambian de lugar (y si fueran impares la del medio quedaría en la misma posición)

ejemplo de palabras:
muercielago -> galciorume
hacen -> nucoh

'las abejas hacen miel para el murcielago'
tu codigo traduce: sul ujobus cuhon liom rupu ol amrcioluge
y sería: sul usejub nuhoc liom rupu ol galciorume

me ayudan mucho tus respuestas
  #7 (permalink)  
Antiguo 10/08/2013, 09:49
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 15 años, 9 meses
Puntos: 270
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

Suponiendo espacio como único separador.Agregar separadores no sería complicado.

Código PHP:
Ver original
  1. $cad='las abejas hacen miel para el murcielago';
  2. $palabras=explode(" ",$cad);
  3. $vtrans=array("a"=>"u","e"=>"o","i"=>"i","o"=>"e","u"=>"a");
  4.  
  5. $kvocal=array_keys($vtrans);
  6. foreach($palabras as $cur)
  7. {
  8.    $vocales=array();
  9.    $consonantes=array();
  10.    $positions=array();
  11.  
  12.    $len=strlen($cur);
  13.    for($k=0;$k<$len;$k++)
  14.    {
  15.        $c=$cur[$k];
  16.        $positions[$k]=(in_array($c,$kvocal)?1:0);
  17.        if($positions[$k])
  18.           array_push($vocales,$c);
  19.        else
  20.           array_unshift($consonantes,$c);
  21.    }
  22.    $newWord="";
  23.    for($k=0;$k<$len;$k++)
  24.       $newWord.=($positions[$k]?$vtrans[array_shift($vocales)]:array_shift($consonantes));
  25.    
  26.    $words[]=$newWord;
  27.  
  28. }
  29. echo implode(" ",$words);

Última edición por dashtrash; 10/08/2013 a las 09:55
  #8 (permalink)  
Antiguo 11/08/2013, 08:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 13 años, 4 meses
Puntos: 214
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

<saludos>
Pues por eso preguntaba yo las reglas, cosa que no has respondido
Por otra parte, el código implementado por dashtrash se ve tanto mejor,
realiza tus pruebas nuevamente con esa optimización!
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 19/08/2013, 17:18
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

Muchas gracias, esta de perlas.
Dejo solo una idea: las palabras consonantes las traducíamos en singular y les poníamos apóstrofe + s al final.
Ejemplo:
murciélago -> galciorume
muercielagos -> galciorume's
Pero lo veo complicado ya que no es facil detectas las palabras en plural
  #10 (permalink)  
Antiguo 19/08/2013, 17:42
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

cambie algo
en vez de explode uso split
$palabras=split("[\t\n\r;, ]+",$cad);
entonces puedo meter el codigo con puntuacion y enter.
  #11 (permalink)  
Antiguo 20/08/2013, 17:49
Avatar de bersonzini  
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Codificación de textos de mi infancia cambiando letras de lugar

Dashtrash es genial lo que hiciste!

hice otro cambio
$vtrans=array("a"=>"u","e"=>"o","i"=>"i","o"=>"e", "u"=>"a");
lo cambie a
$vtrans=array("a"=>"u", "A"=>"U","e"=>"o", "i"=>"i","o"=>"e","u"=>"a", "E"=>"O", "I"=>"I","O"=>"E","U"=>"A");
y ahora puedo escribir con mayusculas, lo que no puedo lograr es usar acentos, me lo haces????

Etiquetas: code, explode, implode
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:40.