Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] recorrido caballo

Estas en el tema de recorrido caballo en el foro de Java en Foros del Web. hola estoy haciendo el recorrido del caballo en java es una clase que se encarga de crear el array terminado luego lo retorna y la ...
  #1 (permalink)  
Antiguo 24/01/2015, 00:37
Avatar de Aleinshir  
Fecha de Ingreso: diciembre-2014
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Pregunta recorrido caballo

hola estoy haciendo el recorrido del caballo en java es una clase que se encarga de crear el array terminado luego lo retorna y la interfaz que hare en jframe lo representara primero lo quise hacer con fuerza bruta pero no carga es un error logico o es por la propia caracteristica de java ya que hice uno parecido "parecido" en c y lo saca en un santiamen se nota tanto la dif entre java y c mi duda es mas sobre ello el codigo luego lo puedo optimizar este es el codigo
Código Java:
Ver original
  1. package tableroajedrez.caballo;
  2.  
  3. import java.util.Random;
  4.  
  5. /**
  6.  *
  7.  * @author aleinshir
  8.  */
  9. public class Kernel {
  10.    
  11.     private int Tablero[][];                                                        // Tablero de ajedre representado en una matriz
  12.     private static int horizontal[] = new int[] {  2,  1, -1, -2, -2, -1, 1, 2 };                       // Movimientos posibles de manera horizonta
  13.     private static int vertical[] = new int[]      { -1, -2, -2, -1,  1,  2, 2, 1 };                        // Movimientos posibles de manera vertical
  14.     private int movimientos;                                                        // Movimientos realizados
  15.     private boolean aux_mov;                                                        // Auxiliar de prueba
  16.     private int prueba;                                                         // Variable para probar todos los movimientos
  17.     private boolean auxiliar;                                                       // Auxiliar para saber si se soluciono el problema
  18.     private int siguiente_mov;                                                      // Siguiente movimiento que hara el caballo
  19.     private int errores;                                                            // Se asegura que el caballo no este atrapado
  20.     private Random rand;                                                        // Numero aleatorio
  21.     private boolean auxiliar_ex;
  22.     private boolean auxiliar_listo;
  23.     private int numero;
  24.     /**
  25.      * Inicializa el tablero y randomiza la clase "Random".
  26.      */
  27.     public Kernel() {
  28.         this.Tablero = new int[8][8];
  29.         rand = new Random(System.nanoTime());
  30.         construir_array();
  31.     }
  32.    
  33.     /**
  34.      *
  35.      * Clase que inicial el kernel para determina el final del problema.
  36.      *
  37.      * @param posicionH Posicion inicial vertical
  38.      * @param posicionV Posicion inicial vertical
  39.      * @return El tablero ya resuelto
  40.      */
  41.     @SuppressWarnings("empty-statement")
  42.     public int [][] start(int posicionH, int posicionV) {
  43.         do
  44.             auxiliar_listo =  recorrido_completo(posicionH, posicionV);
  45.         while (auxiliar_listo == false);
  46.         return Tablero;
  47.     }
  48.    
  49.     /**
  50.      *
  51.      * @return True si esta completo el recorrido
  52.      */
  53.     private  boolean recorrido_completo(int posicionH, int posicionV) {
  54.        
  55.         auxiliar = true;
  56.         for (movimientos = 1, errores = 0; movimientos <= 64 && auxiliar; movimientos++)    // Ciclo exterior
  57.         {
  58.             aux_mov = true;
  59.             siguiente_mov = rand.nextInt(8);                                        // Determina el proximo movimiento
  60.             for (prueba = 0; prueba < 8 && aux_mov; prueba++, siguiente_mov++, errores++)// Prueba todos los posibles movimientos
  61.             {
  62.                
  63.                 if (siguiente_mov == 8)                                         // Pasa al movimento 0 cuando llega al 8
  64.                     siguiente_mov = 0;
  65.                
  66.                 try
  67.                 {
  68.                     if (Tablero[posicionH + horizontal[siguiente_mov]][posicionV + vertical[siguiente_mov]] == 0)
  69.                     {
  70.                         Tablero[posicionH][posicionV] = movimientos;
  71.                        
  72.                         errores = 0;
  73.                         aux_mov = false;
  74.                         posicionV += vertical[siguiente_mov] ;
  75.                         posicionH += horizontal[siguiente_mov] ;
  76.                     }
  77.                 }
  78.                 catch(ArrayIndexOutOfBoundsException e)
  79.                 {
  80.                    
  81.                 }
  82.             }
  83.            
  84.             if (errores >= 8)                                                   // Si hay mas de 8 errores corta el recorrido
  85.                 auxiliar =false;
  86.         }
  87.        
  88.         return movimientos >= 64;                                               // True si hizo los 64 movimiento
  89.     }
  90.    
  91.     /**
  92.      *
  93.      * Construye el array dandole 0 (no necesario en java pero es mejor inicializarlo.
  94.      */
  95.     private void construir_array() {
  96.         for (int i = 0; i < 8; i++)
  97.         {
  98.             for (int j = 0; j < 8; j++)
  99.             {
  100.                 Tablero[i][j] = 0;
  101.             }
  102.         }
  103.     }
  104. }

use un manejo de excepciones trate de hacerlo asi porque era mas "estetico"
por cierto este es el de c

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4.  
  5. #define TAMANIOV 12                                     // Altura del tablero
  6. #define TAMANIOH 12                                     // Anchura del tablero
  7.  
  8. int despliega_tablero(const int tablero[][TAMANIOV]);
  9. int llamar(int posicionH, int posicionV, int intento);
  10.  
  11. int main()
  12. {
  13.     srand(time(NULL));
  14.     int posicionH, posicionV;
  15.     scanf("%d%d", &posicionH, &posicionV);
  16.     posicionH += 2;
  17.     posicionV += 2;
  18.     int i, intento = 0;
  19.     for (i = 0; i == 0;)
  20.     {
  21.         intento++;
  22.         if (llamar(posicionH, posicionV, intento) == 1)
  23.         {
  24.             intento = 0;
  25.         }
  26.     }
  27.     system("pause");
  28.     return 0;
  29. }
  30.  
  31. int llamar(int posicionH, int posicionV, int intento)
  32. {
  33.     int Tablero[TAMANIOH][TAMANIOV] = { 0 };
  34.     int horizontal[8] = { 02, 01, -1, -2, -2, -1, 1, 2 };
  35.     int vertical[8] =   { -1, -2, -2, -1, 01, 02, 2, 1 };
  36.     int movimientos, errorlevel, almacenaH, almacenaV;
  37.     int siguiente, fun;
  38.     for  (movimientos = 1, errorlevel = 0; movimientos != 65;)
  39.     {
  40.          siguiente = rand() % 7;
  41.          for (fun = 0; fun < 8; siguiente++, fun++)
  42.          {
  43.              if (siguiente == 8)
  44.                  siguiente = 0;
  45.              if (Tablero[posicionH + horizontal[siguiente]][posicionV + vertical[siguiente]] == 0)
  46.              {
  47.                  errorlevel = 0;
  48.                  Tablero[posicionH][posicionV] = movimientos;
  49.                  almacenaH = posicionH;
  50.                  almacenaV = posicionV;
  51.                  posicionH += horizontal[siguiente];
  52.                  posicionV += vertical[siguiente];
  53.                  if (posicionH == 0 || posicionH == 1 || posicionV == 0 || posicionV == 1)
  54.                  {
  55.                      Tablero[posicionH][posicionV] = 1;
  56.                      posicionH = almacenaH;
  57.                      posicionV = almacenaV;
  58.                      continue;
  59.                  }
  60.  
  61.                  if (posicionH == 10 || posicionH == 11 || posicionV == 10 || posicionV == 11)
  62.                  {
  63.                      Tablero[posicionH][posicionV] = 1;
  64.                      posicionH = almacenaH;
  65.                      posicionV = almacenaV;
  66.                      continue;
  67.                  }
  68.                  movimientos++;
  69.                  break;
  70.              }
  71.          }
  72.         errorlevel++;
  73.         if (errorlevel >= 8)
  74.            break;
  75.  
  76.     }
  77.  
  78.     if (movimientos >= 64)
  79.     {
  80.         system("cls");
  81.         despliega_tablero(Tablero);
  82.         printf("movimientos = %d\nintentos = %d\n", movimientos, intento);
  83.         system("pause");
  84.         return 1;
  85.     }
  86.     else
  87.     {
  88.         return 0;
  89.     }
  90.  
  91.  
  92. }
  93.  
  94. int despliega_tablero(const int tablero[][TAMANIOV])
  95. {
  96.      int columna, fila;
  97.      for (columna = 2; columna < 10; columna++)
  98.      {
  99.          for(fila = 2; fila < 10; fila++)
  100.          {
  101.                   if( tablero[columna][fila] == 0)
  102.                       printf("%3s", "0" );
  103.                   if(tablero[columna][fila] != 0)
  104.                       printf("%3d", tablero[columna][fila]);
  105.          }
  106.          printf("\n");
  107.      
  108.      }
  109.      return 0;
  110. }

//**
como ven arregle el problema usando un array mas grande (12x12) el cual daba para un margen de "error" luego pense que podia usar la posicion si esta era menor que 0 no lo ejecutaba y si era mayor que 7 igual pero como ya habia implementado aquel ah y tambien pense que quizas funcionaria aprobechandome del desplazamiento de c (eso de que un array de 8x8 i[8][0] si le quitas 2 a 0 este se transforma en i[7][6] pero no me gusto (ademas que en java no se puede) gracias de adelantado
PD: si quieren ignoran todo despues del //** ya que no tiene que ver a mi pregunta :D
PD de la PD: seguro algunos me dicen que es malo usar break por eso de la programacion estructurada etc pero cuando hice el code no lo sabia xd y me dio lala corregirlo en java si use una variable de "escape"
  #2 (permalink)  
Antiguo 24/01/2015, 14:13
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: recorrido caballo

¿Podrías explicar de otra forma lo que hace tú código? Usar puntos y comas ayudaría.

Yo no me he enterado de nada.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 24/01/2015, 16:32
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: recorrido caballo

Cita:
Iniciado por Xerelo Ver Mensaje
Yo no me he enterado de nada.
jajajaja, ya somos dos.
.
  #4 (permalink)  
Antiguo 24/01/2015, 16:41
Avatar de Aleinshir  
Fecha de Ingreso: diciembre-2014
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Sonrisa Respuesta: recorrido caballo

Lo siento, escribi algo rapido.

De nuevo:

El codigo java (el primero):
Es una clase que hice, la cual crea un arreglo que contiene todo el recorrido del caballo ya resuelto (enumera del 1 al 64 los movimientos a seguir). El problema: Tarda mucho en resolverlo.

El codigo C (el segundo):
Es uno que cree hace ya tiempito, resolvia el recorrido y luego lo mostraba, la manera que se me ocurrio de resolverlo fue llenar con 2 arreglos mas de cada lado para saber cuando se desbordaba (no me se explicar muy bien, pero se nota en el codigo ya que es 12x12 en vez de 8x8). Este se ejecuta bastante rapido (casi instantaneo) apesar de que usa la fuerza bruta.

Mi pregunta:
¿Hice algo malo en el codigo de java?, ¿porqué este tarda mucho mas? o ¿Es por el hecho de que C es un lenguaje compilado y java interpretado?.

Post Data: Gracias por tu tiempo y por prestar atencion a una pregunta tan desordenada (es que lo hice en la mañana como a las 3 am xd)
  #5 (permalink)  
Antiguo 25/01/2015, 00:03
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: recorrido caballo

Hola,

Lo que no me queda claro a mi en lo personal, es ¿cual es tu pregunta específicamente? Hasta ahora que mostraste tu segundo mensaje creo que posiblemente lo que deseas es optimizar el código.

Posiblemente te pueda ser de alguna ayuda ...

Primero, en tu código en lenguaje C se produce un ciclo infinito por lo cual no pude probar que realmente funcionara y que me mostrara por lo menos algún resultado.

Código:
 for (i = 0; i == 0;)
	{
		intento++;
		if (llamar(posicionH, posicionV, intento) == 1)
		{
			intento = 0;
		}
	}
Ahora, en tu código Java, después de un par de minutos sin que mostrara ningún resultado me aburrí y detuve el proceso. Pero aún así pude observar que aproximadamente la mitad del tiempo lo consume el try/catch. Se producen tantos ArrayIndexOutOfBoundsException que la mayor parte del tiempo en esa sección del código.

Código:
				try 
				{
					if (Tablero[posicionH + horizontal[siguiente_mov]][posicionV + vertical[siguiente_mov]] == 0)
					{
						Tablero[posicionH][posicionV] = movimientos;
						
...					}
				}
				catch(ArrayIndexOutOfBoundsException e)
				{
					
				}
Ahora, ¿que significa esto?

Java tiene un mecanismo de try/catch como C++, pero C no tiene ningún mecanismo de este tipo, el equivalente de un ArrayIndexOutOfBoundsException en C es nada, es decir, en C posiblemente estoy escribiendo en un area de la memoria inválida y ni cuenta me voy a dar por la misma naturaleza del lenguaje C. En el mejor de los casos voy a obtener un Invalid Address Write. Pero ese try/catch tiene su precio en la velocidad del código que procesa.

Hay tres tipos de errores en programación, el primero y el mas fácil de descubrir es el error sintáctico, es cuando escribes mal el wihle{} o el fro{} y el compilador muestra error (en tu código no se encuentran de este tipo de errores). El segundo tipo es el error lógico, es por el ejemplo cuando el resultado de una operación tira una división entre 0, y al correr el programa se detiene porque encuentra algún error (en tu código pareciera que no hay muchos errores de este tipo, solo ArrayIndexOutOfBoundsException, que aunque no lo creas son errores, el try/catch no es una solución a que tus indices no los calculaste bien).

El tercer tipo es el mas complicado, es que no hay errores sintácticos ni lógicos, pero tu programa no hace lo que debe hacer, no logra el resultado esperado, puede ser que se ejecute pero no funciona porque no logra el fin que se espera.

Al parecer en tu código si está sucediendo eso, tanto en C (ciclo infinito) como en Java (ArrayOutOfBoundsException). Primero corrige eso, cuando tu programa haga lo que tiene que hacer entonces preocúpate que lo haga rápido, de otra forma no tiene sentido. No sirve de nada que tu programa corra a la velocidad de la luz si no logra el resultado esperado.

Saludos,
  #6 (permalink)  
Antiguo 25/01/2015, 08:46
Avatar de Aleinshir  
Fecha de Ingreso: diciembre-2014
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: recorrido caballo

Cita:
Iniciado por HackmanC Ver Mensaje
Primero, en tu código en lenguaje C se produce un ciclo infinito por lo cual no pude probar que realmente funcionara y que me mostrara por lo menos algún resultado.
Respuesta:
Lo acabo de reproducir y si tiene fin, lo que pasa es que el codigo te pide la posicion inicial, prueba abriendolo de nuevo colocas 0 (enter) y 0 (enter) (son las cordenadas de inicio lo que pasa es que no puse un mensaje indicando al usuario) para que el programa empiece en la esquina superior derecha



Cita:
Iniciado por HackmanC Ver Mensaje
en C posiblemente estoy escribiendo en un area de la memoria inválida y ni cuenta me voy a dar por la misma naturaleza del lenguaje C.
Respuesta:
Con respecto a eso, el array es de 12x12 de forma que aun si escribe escribiria en un area reservada



Cita:
Iniciado por HackmanC Ver Mensaje
Al parecer en tu código si está sucediendo eso, tanto en C (ciclo infinito) como en Java (ArrayOutOfBoundsException). Primero corrige eso, cuando tu programa haga lo que tiene que hacer entonces preocúpate que lo haga rápido, de otra forma no tiene sentido. No sirve de nada que tu programa corra a la velocidad de la luz si no logra el resultado esperado.
Respuesta:
Ya lo de C te explique arriba (tienes que introducir la posicion inicial) respecto a java si ocurre ya que si le bajas la "meta" por ejemplo en vez de hacer los 64 movimientos que el programa se ejecute a los 20 el programa si termina y lo logra (osea si llega al objetivo). Lo que me da a pensar que el programa se ejecuta muy lento y no ocurre ninguna combinacion que logre los 64 movimientos.

Última edición por Aleinshir; 25/01/2015 a las 09:14
  #7 (permalink)  
Antiguo 25/01/2015, 13:25
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: recorrido caballo

Hola,

Pues bueno, en mi opinión personal, si tu dices que no se produce un ciclo infinito en el ciclo for que marqué en rojo, por que la variable i nunca cambia de valor, y la condición dice que se repita mientras i == 0, como puedo contradecirte.

Cita:
Iniciado por Aleinshir Ver Mensaje
... Con respecto a eso, el array es de 12x12 de forma que aun si escribe escribiria en un area reservada ...
Lo cual solo me indica que no estás seguro si escribe en o no fuera del arreglo.


Te expreso solamente mi opinión personal, aunque todavía sigo con la duda del cual es tu pregunta realmente.

¿Quieres optimizarlo? Ya te indique el el try/catch está consumiendo aproximadamente 50% del tiempo, si lo quitas posiblemente el código va a ser mas rápido. Una vez estés seguro de que no suceden excepciones en ese código puedes pasar a optimizar otras cosas.

¿Quieres saber si C es mas rápido que Java? Positivamente, en la mayoría de los casos C va a ser mas rápido que Java porque no es lo mismo, ni hacen lo mismo. En tu código en lenguaje C no hay validación si se salió fuera del rango permitido en la matriz, en Java si verifica eso, el índice fuera del rango.

Pero no creas que Java va a ser demasiado lento en comparación con C, simplemente tu código no es el mejor ejemplo para esta comparación, ni lo mas mínimo, donde evidentemente tuviste que subirle el tamaño a la matriz en C porque no estabas seguro si los índices se salían del rango o no, mientras que en Java te muestra claramente que sí se sale (si le pones un print en el catch).

En lo personal, me encanta el lenguaje C pero nunca voy a compararlo con Java, con el lenguaje C estás manipulando el procesador y la memoria casi directamente, mientras que Java hace mucho mas que simplemente eso.

Esa es simplemente mi opinión al respecto,

Saludos,
  #8 (permalink)  
Antiguo 25/01/2015, 13:46
Avatar de Aleinshir  
Fecha de Ingreso: diciembre-2014
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: recorrido caballo

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

Pues bueno, en mi opinión personal, si tu dices que no se produce un ciclo infinito en el ciclo for que marqué en rojo, por que la variable i nunca cambia de valor, y la condición dice que se repita mientras i == 0, como puedo contradecirte.



Lo cual solo me indica que no estás seguro si escribe en o no fuera del arreglo.


Te expreso solamente mi opinión personal, aunque todavía sigo con la duda del cual es tu pregunta realmente.

¿Quieres optimizarlo? Ya te indique el el try/catch está consumiendo aproximadamente 50% del tiempo, si lo quitas posiblemente el código va a ser mas rápido. Una vez estés seguro de que no suceden excepciones en ese código puedes pasar a optimizar otras cosas.

¿Quieres saber si C es mas rápido que Java? Positivamente, en la mayoría de los casos C va a ser mas rápido que Java porque no es lo mismo, ni hacen lo mismo. En tu código en lenguaje C no hay validación si se salió fuera del rango permitido en la matriz, en Java si verifica eso, el índice fuera del rango.

Pero no creas que Java va a ser demasiado lento en comparación con C, simplemente tu código no es el mejor ejemplo para esta comparación, ni lo mas mínimo, donde evidentemente tuviste que subirle el tamaño a la matriz en C porque no estabas seguro si los índices se salían del rango o no, mientras que en Java te muestra claramente que sí se sale (si le pones un print en el catch).

En lo personal, me encanta el lenguaje C pero nunca voy a compararlo con Java, con el lenguaje C estás manipulando el procesador y la memoria casi directamente, mientras que Java hace mucho mas que simplemente eso.

Esa es simplemente mi opinión al respecto,

Saludos,
Waa lo siento, mi error xd. Si tienes razon es un ciclo infinito, lo que sucede es que pense que te referias al trozo de codigo que ejecutaba el caballo y como si la consola se quedara "pensando" sin mostrar nada, fue mi error xd no lei bien tu respuesta.

Con respecto a la pregunta efectivamente mi duda es esa perdida de velocidad que tiene java (gracias por resolver mi duda con respecto a el try/catch) asi que es por culpa de eso que se ejecuta mas lento... pero yo aplique otro metodo e igual tardaba en mostrar el resultado, este es el que aplique:
en vez de excepciones use:
Código Java:
Ver original
  1. if (posicionH + horizontal[siguiente_mov] > 0 && posicionV + vertical[siguiente_mov] < 8 && posicionV + vertical[siguiente_mov] > 0 && posicionH + horizontal[siguiente_mov] < 8)
  2. {
  3. if (Tablero[posicionH + horizontal[siguiente_mov]][posicionV + vertical[siguiente_mov]] == 0)
  4.                     {
  5.                         Tablero[posicionH][posicionV] = movimientos;
  6.                        
  7.                         errores = 0;
  8.                         aux_mov = false;
  9.                         posicionV += vertical[siguiente_mov] ;
  10.                         posicionH += horizontal[siguiente_mov] ;
  11.                     }
  12. }
asi evitando de antemano un posible error e igual tarda bastante...

PD: Si es un ciclo infinito, pero es porque cuando le das enter o cualquier tecla el te muestra otra forma de resolverlo (era la intencion). Si muestra resultado demostrando que funciona, ahora que el programa nunca termina hasta cerrarlo con la x es cierto.

Última edición por Aleinshir; 25/01/2015 a las 13:56
  #9 (permalink)  
Antiguo 25/01/2015, 18:09
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: recorrido caballo

Hola,

Cita:
Iniciado por Aleinshir Ver Mensaje
... lo que sucede es que pense que te referias al trozo de codigo que ejecutaba el caballo y como si la consola se quedara "pensando" sin mostrar nada, ...
Básicamente el problema era para los que quisieran probar tu código, como en mi caso, no pude hacer un verdadero "Profile" de cuanto tiempo y en donde se tarda más, porque pide los datos y no sale de la aplicación normalmente. Aunque era algo que se puede corregir fácilmente es algo que toma tiempo hacer.

Cita:
Iniciado por Aleinshir Ver Mensaje
... Con respecto a la pregunta efectivamente mi duda es esa perdida de velocidad que tiene java (gracias por resolver mi duda con respecto a el try/catch) asi que es por culpa de eso que se ejecuta mas lento...
Ahora que estamos mas claros de que se trata, efectivamente Java en la mayoría de los casos va a ser un poco mas lento que el lenguaje C, pero no demasiado.

Aún cuando quitaste el Exception, que por definición son caros a nivel de velocidad, todavía no va a ser más rápido que un acceso directo a la memoria, que seguramente se trata con una sola instrucción del procesador como el código que genera el lenguaje C.

El motivo es que Java va a verificar que la memoria no se corrompa tan fácilmente y va a hacer otras operaciones dependiendo del tipo de programa, como cualquier otro lenguaje avanzado y no tan básico como C.

Saludos,

Etiquetas: clase, jframe, programa, recorrido
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 00:24.