Tengo ganas de resolver un enigma, desentrañar un misterio, enfocar cierta hiperactividad mental que me visita a veces y convertirla en resultados concretos, inteligibles, útiles. Suelo soñar que resuelvo un misterio trascendental para el resto de los mortales, pero la puerta hacia ese universo solo se abre una vez cada once años, la he visto cerrarse varias veces, pero ya me aclaré que solo necesito unos segundos contemplando el otro lado, donde todos los problemas del mundo ya han sido resueltos y donde el sufrimiento ya no existe más.
Me acabo de despertar, tengo los ojos hinchados, pero mi visión es clara como el agua, diáfana como el cristal. Necesito entrenar, pero no es entrenamiento físico lo que necesito, debo poner a trabajar el elemento lógico. Lo que viene solo es eso, entrenamiento.
Consideren la siguiente posición de ajedrez:
Posición creada con el editor de Lichess.org
Es un final donde las blancas tienen la ventaja, pero pocos humanos, en una partida real, podrían inferir la secuencia correcta de jugadas necesaria para alcanzar la victoria. Hace años, por una posición así, dejé de jugar ajedrez y me interesé en programación de ajedrez.
Para el cerebro humano, una posición así de simple, todavía genera demasiadas combinaciones para que un individuo pueda resolverla en tiempo real, en el tiempo que se le concede para completar la partida. No es que la cosa sea compleja, el asunto es simple de raciocinar, pero el árbol de decisiones que se produce suele ser demasiado grande para que el hombre común pueda acometerlo sin ayuda.
Quiero jugar con un código que resuelve ese problema. Se tardaría algún tiempo en calcular todas las respuestas, pero una vez que las encuentre todas, puede hacer jugadas perfectas e instantáneas. Hace años fabriqué un código similar para resolver el final de alfil y caballo. Pensé que el mismo código podría resolver por igual ambos problemas, pero en los últimos días me he dado cuenta de cierto cambio de variables que requieren ligeros ajustes al código de hace veinte años. Igual ese código se perdió en un disco duro dañado. Aquí trato de refabricarlo, Era más o menos así:
Imagen tomada del editor Geany
Creo que se ve simple, probablemente fácil de comprender para un programador aplicado. Este módulo sólo va a calcular las respuestas, que es el trabajo duro. Usar luego esas respuestas es trabajo de un módulo distinto, más sencillo, más fácil. Sólo me voy a concentrar en éste, y voy a desarrollar, poco a poco, los módulos que se mencionan aquí, que no son muchos.
Un asunto que me parece especialmente interesante es que en un final como éste, cualquier jugador se da cuenta que para conseguir dar el mate, se debe primero capturar la torre. Yo le voy a enseñar el camino del mate, la captura de la torre va a venir por sí sola. Si existe un método para capturar la torre, él lo va a encontrar sin que yo se lo diga, pues yo no lo sé. Él va a resolver las cosas por pura matemática elemental, no le interesan los libros de ajedrez. Esto lo voy a hacer por partes, un paso a la vez...
Image Credits
Tengo intención de programarlo en javascript, que por su portabilidad puede correr en casi cualquier plataforma sin instalaciones especiales. El problema es que yo no sé javascript, aunque probablemente sé lo suficiente para completar este proyecto. De momento, escribo en un código que se asemeja a Basic.
!PIZZA
$PIZZA slices delivered:
@sacra97(4/15) tipped @amaponian