Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ayuda con la lógica

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación en General
Mensaje Mar Nov 13, 2007 10:26 am
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Ayuda con la lógica Responder citando

Buen día a todos,

Estoy haciendo un programa como repaso, pero he llegado a un punto de la lógica no me deja continuar; ok, el punto es que realicé cambios de posición a un string en base a arreglo. Por ejemplo.

Código:
arrayOrden = [3,2,4,1,0,5] //este es el orden en que se ordenará el string

ArrayPalabra=[costa_] //palabra a ordenar


Utilizando estos dos a array pude cambiar el orden fácilmente quedando de la siguiente manera:

Código:
arrayCambio=[tsaoc_]


pero no encuentro la forma de este array volverlo a la palabra original; ya pasé un tiempo y no veo la forma. A ver si alguien me echa la mano para hacerlo porque ya me estoy frustrando. De seguro es algo fácil pero yo no lo veo Embarassed

Saludos.
Mensaje Mar Nov 13, 2007 11:07 am
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Responder citando

Gracias por tu interes Explorer.
pero lo que quiero es volver a cambiar el orden de este arreglo
Código:

arrayCambio=[tsaoc_]


y ponerlo en forma original
como hacer este proceso en base al arreglo que lo desordeno es el problema


Código:

arrayOrigina[costa_]


Saludos
Mensaje Mar Nov 13, 2007 11:19 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Pues aquí te dejo esta chapuza, estoy seguro de que en Perl se puede hacer de formas mas estilisticas pero esto es más bien lo que yo haría en C escrito en Perl ^^

Perl:
@normal = ("c","o","s","t","a","_");

$x=5;

for($i=0;$i<=5;$i++) {
        $alreves[$i] = $normal[$x];
        $x--;
}

print "@normal\n";
print "@alreves\n";


Salida:
Código:
$ perl we.pl
c o s t a _
_ a t s o c


Para volver a ponerlo normal, pues exactamente el mismo proceso..
Mensaje Mar Nov 13, 2007 11:34 am
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Responder citando

Gracias Norther. Tu programa me serviría si solo lo tengo que colocar al revés pero en este caso el orden de la palabra lo defino de cualquier forma, no exactamente al revés.

Código:
arrayOrden = [3,2,4,1,0,5] //este es el orden en que se ordenará el string

ArrayPalabra=[costa_] //palabra a ordenar


Entonces es ahí el punto interesante.

Saludos
Mensaje Mar Nov 13, 2007 11:38 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Ah, vale, vale, ahora lo entendí, suena divertido voy a ver qué se me ocurre Razz
Mensaje Mar Nov 13, 2007 11:56 am
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Vale, creo que ya lo tengo, al menos si es que te entendí bien esta vez Razz

El código es este:
Perl:
@normal = ("c","o","s","t","a","_");

print "Introduce del 0 al 5 en el  orden en que quieres que aparezca la palabra:\n";
print "(ej: 0 1 2 3 4 5 es 'costa_')\n";

for($i=0; $i<=5; $i++) {
        $orden[$i] = <STDIN>;
}

for($i=0;$i<=5;$i++) {
        $alreves[$i] = @normal[@orden[$i]];
}

print "La palabra colocada como has dicho es: @alreves\n";


Y esta es la salida:

Código:
$ perl we.pl
Introduce el orden que quieres darle a la palabra:
(ej: 0 1 2 3 4 5 es 'costa_')
1
2
3
4
0
5
La palabra colocada como has dicho es: o s t a c _


Para introducir los datos lo puse de manera que introduzcas el primer número y enter, el segundo número y enter, y así hasta 5 (los caracteres de la palabra en cuestión).
Mensaje Mar Nov 13, 2007 12:01 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3891
Ubicación: Valladolid, España
Responder citando

Perl:
#!/usr/bin/perl

@ArrayOrden   = qw[ 3 2 4 1 0 5 ];

@ArrayPalabra = qw[ c o s t a _ ];

@ArrayCambio  = @ArrayPalabra[ @ArrayOrden ];

print "@ArrayCambio\n"# Desordenado t s a o c _

@ArrayOrigina[ @ArrayOrden ] = @ArrayCambio;

print "@ArrayOrigina\n"; # Ordenado    c o s t a _


Los mismos índices que han cambiado las letras de sitio, son las que nos dicen las posiciones de las letras que tenemos que leer. Implícitamente, el orden dentro de los arrays es información útil para recomponer la palabra original.

Ejemplo (de la última conversión):
Código:
$ArrayOrden[0] => 3, luego $ArrayCambio[0] => 't' irá en $ArrayOrigina[3]
$ArrayOrden[1] => 2, luego $ArrayCambio[1] => 's' irá en $ArrayOrigina[2]
$ArrayOrden[2] => 4, luego $ArrayCambio[2] => 'a' irá en $ArrayOrigina[4]
...
Mensaje Mar Nov 13, 2007 12:17 pm
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Responder citando

Gracias Explorer pero se me olvidó comentar que no estoy trabajando en Perl sino en Java. Habrá una forma de usar esa lógica en Java o si me haces el favor de explicarme como lo tengo que hacer te lo agradecería.

Perl:
@ArrayOrigina[ @ArrayOrden ] = @ArrayCambio;

print "@ArrayOrigina\n"; # Ordenado    c o s t a _


¿Cómo hago esto en Java?

Saludos
Mensaje Mar Nov 13, 2007 12:25 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3891
Ubicación: Valladolid, España
Responder citando

Naturalmente que habrá una forma de hacerlo en Java, pero por fortuna, no la sé.

Además, seguro que para hacerlo hay que escribir más líneas...

Lo siento, los programadores de Perl no podemos perder el tiempo escribiendo más de lo necesario Very Happy

¿Has probado en algún foro de Java? Twisted Evil

Cuando lo sepas, lo pones por aquí, por favor, para comparar los dos programas, el tuyo y el mío Rolling Eyes

También espero que alguien más de este foro te ayude.
Mensaje Mar Nov 13, 2007 3:34 pm
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

Yo habitualmente programo en C y un poco en Java aunque todavía no nos hayamos metido mucho con ello (primero suele darse C hasta que no aguantas más y luego Java) y sí, puedo confirmar que serían MUCHAS más líneas.
Mensaje Mie Nov 14, 2007 3:57 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 470
Ubicación: Frente al monitor
Responder citando

¿Java, Lips, Prolog...?
Noooo... Laughing

Perl:
use TheForce;

Mensaje Mie Nov 14, 2007 4:59 pm
Norther
Perlero Frecuente
Perlero Frecuente
Registrado: 24 Jul 2007
Mensajes: 117
Ubicación: Asturias
Responder citando

jajaja muy bueno
Mensaje Jue Nov 15, 2007 5:14 pm
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Responder citando

Hola, créanme que solo en Perl me gusta programar para la web pero en aplicaciones Desktop me gusta Java, opinión muy personal, pero en fin, gracias por su apoyo. No he terminado por falta de tiempo pero pondré la respuesta cuando lo haga. Norther: usando tu lógica ¿cómo volverías el string al estado original?

Saludos.
Mensaje Jue Nov 15, 2007 6:08 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3891
Ubicación: Valladolid, España
Responder citando

A ver... una pista...

La línea
Perl:
@ArrayOrigina[ @ArrayOrden ] = @ArrayCambio;


es igual que
Perl:
for ($i = 0; $i < @ArrayCambio; $i++) {
    $ArrayOriginal[ $ArrayOrden[$i] ] = $ArrayCambio[$i];
}
Mensaje Vie Nov 16, 2007 10:42 am
Rene Serrano
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Nov 2006
Mensajes: 82
Ubicación: El salvador CA
Responder citando

Hola a todos. Pues otra vez el señor explorer tiene razón (que raro, verdad. jeje ) Very Happy

Javascript:
for ( int i = 0; i <  arrAscii.length; ++i ) {
            int[] arrAscii_temp=new int[arrAscii.length];
            arrAscii_temp[i]=arrAscii[pI[i]];
        }

ahí lo coloque en la posición aleatoria

y aquí en posición original

Javascript:
for ( int i = 0; i <  arrAscii.length; ++i ) {
           arrAscii_temp[pI[i]]=arrAscii[i];           
        }
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación en General Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group