Ver Mensaje Individual
  #37 (permalink)  
Antiguo 17/07/2008, 13:20
Avatar de David
David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 20 años
Puntos: 839
Exclamación Respuesta: Vota por el mejor código de la competencia entre programadores

Cita:
Iniciado por aceutico Ver Mensaje
Espero tu análisis, a ver si descubres cómo funciona o al revés, cómo de malo es.
Me tomé un tiempo para analizarlo, y la verdad es que lo veo horrible, seguro que te costó mucho más trabajo hacerlo de esa forma tan difícil de leer que si lo hubieras hecho 'como se debe'.

Acerca del código de aceutico:
Me gustó la forma general (no el código) como resolviste el problema, es interesante, el hecho de que comparas cada combinación de 3 posible (8 en total, 3 horizontales, 3 verticales, y 2 diagonales) y luego ves cuál es su estado para hacer tu jugada.

Algo que también me gustó fue cómo compruebas si alguien ha ganado, comprobando si alguna de las combinaciones suma 3 (gana el usuario), o si suma 20 (gana la computadora, ya que con una jugada que ya no es necesario completará 30)

No me gustaron los nombres que usaste, dificultaron el gran manera saber su función (Por ejemplo: l, fa, fai, j, s, jj, ll, u, uu, ).

Tampoco ha sido muy bueno que usaras una única función para realizar todas las acciones, si lo dividieras en varias facilitarías mucho la lectura del código, cosa que según mencionaste adrede trataste de complicar.

Muchas son las cosas que complicaste. Por ejemplo:
Código PHP:
        d[11] = {'-', ('-' 1) * 2000,
            
00000'\'' '('}; 
Podría ser:
Código PHP:
        d[11] = {'-''X'000,
            
00000'O'}; 
Y otras operaciones desnecesarias como: 5 * -2 (-10), -2 - 10 (-12). Además de que varias veces retornas datos (return) que no son capturados en ninguna parte.

Bueno, realmente si el propósito era complicar el código lo lograste muy bien .

Ahora, comentando un poco acerca de su funcionamiento, es básicamente lo que dije al principio.
Tiene una matriz (p) donde guarda las jugadas, cuando juega el usuario escribe un 1, cuando juega la computadora escribe un 10. Luego analiza, la suma de cada una de las combinaciones de 3 posibles (ya mencioné cuales son) para saber si el usuario está por ganar (cuando la suma es 2):
Código PHP:
            j(2); 
Luego, con jj lo que hacemos son solo varias comparaciones parecidas a la primera con un orden de preferencia:
Código PHP:
jj(100111
Primero: 10 si hay una combinación que solo tenga una jugada de la computadora. Segundo: 0 si hay una combinación sin jugadas. Tercero: 1 si hay una combinación con una sola jugada del usuario. Cuarto: 11 si hay una combinación con una jugada de la computadora y una del usuario. (En el nivel fácil el orden de preferencia es al revés).
Después encontrar uno de los casos, con uu busca el espacio vacío en la respectiva combinación para colocar la jugada de la computadora.

A decir verdad, si no hubieras optado por complicar el código por esa actitud que yo describiría como poco elegante y poco respetuosa hacia los demás participantes y usuarios votantes; tu código sería bastante bueno.

Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 17/07/2008 a las 13:35