Showing posts with label partidas de ajedrez. Show all posts
Showing posts with label partidas de ajedrez. Show all posts

Tuesday, January 23, 2018

El ajedrez es un juego maldito

El título de esta entrada del blog solamente pretende mostrar lo difícil que puede ser el ajedrez y además, el hecho de que aún así, intentemos jugarlo mejor. Por razones que no vienen mucho al caso, hallé unas notas de una partida que jugué contra Roberto González, un fuerte jugador local. La partida se jugó en un torneo que se denominaba "Lone Pine Mercenarios" y es del año 1998, es decir, tiene la friolera de 20 años apenas. La narración del encuentro pretende poner en contexto el momento en el que se jugó esta partida.

Blancas: Gonzalez, Roberto
Negras: López, Manuel


Una partida de altibajos... La última ronda del "Lone Pine Mercenarios" me enfrentó al siempre difícil Roberto González. De hecho, estaba obligado a ganar por varios motivos: i. Pla y Martín del Campo llevaban medio punto arriba. Si ellos empataban y yo me hacía del tiunfo,  podía empatar el primer lugar (aunque el desempate me parecía que sería desfavorable para mi causa); ii. Jesús Casillas estaba en las mismas condiciones y enfrentaba al sorprendente Javier Anaya; iii. Era mi tercer encuentro con Roberto y no había podido ganarle aún. Así las cosas, empezó la partida: 1. e4 e5 2. Nf3 Roberto aquí pensó 5 minutos. Seguramente esperaba que hubiese jugado escandinava. 2. ...  Nc6 3. Bc4 Nf6 4. d3 Bc5 5. Bg5 d6 6. c3 h6 7. Bh4!? Una lamentable jugada. Era imprescindible cambiar el alfil de g5. Ahora este alfil quedará como muerto en vida por muy buen rato. Vale la pena ver una de las partidas más famosas: Winter-Capablanca, en donde el genio cubano hace la misma maniobra que yo ejecutaré, para encerrar el alfil en g3 sin perspectivas de sacarlo fácilmente. Desde luego que yo conocía dicha partida y sabía cómo continuar




González, Roberto - López, Manuel
Lone Pine Mercenarios 1998
Juegan las negras

7. ... g5! 8. Bg3 Bg4 9. b4?! las blancas deciden empezar las hostilidades en el flanco dama. 9. ... Bb6 10. a4 a5?! el MI Kenneth Frey me dijo que en este tipo de situaciones él está convencido que hay que jugar a6. Parece más flexible, sin duda. 11. b5 Ne7 12. h4?! no me gustó. Me parecía preferible primero Db3. 12. ...  gxh4 13. Bxh4 Ng6 14. Qb3 Qe7 15. Nbd2 Las blancas han maniobrado de tal manera que parece que han resuelto sus problemas principales. Se ha quitado la molesta clavada del caballo de f3. Lo único que le resta por hacer es quitar al rey del centro. 15. ... Nxh4 16. Rxh4 O-O-O!? Una idea interesante. Se sacrifica un peón pero activa las piezas del negro. 17. Bxf7 


González, Roberto - López, Manuel
Lone Pine Mercenarios 1998
Juegan las negras

17. ... d5! Lo que sigue es obligado. Las negras inician una combinación a partir de dos factores: i. el rey blanco en el centro y ii. la actividad de sus piezas menores.18. Bxd5 (única) 18. ... Rxd5!  19. exd5 e4! $1 20. d6 Las blancas no se amilanan. Buscan contrajuego y quitar a la dama de la columna e. 20. ... cxd6 21. Qc4+ Kb8 22. dxe4 d5! Mala suerte para las blancas. Cuando parecía que estaba retomando el control, las negras reinician el ataque. 23. Qe2 dxe4 24. Rxg4? las blancas sucumben ante la presión ejercida por el negro. Komodo 10 da Cc4 como mejor posibilidad. 24. ... Nxg4 25. Qxe4? Qxe4+ 26. Nxe4 Re8 y ahora las blancas perderán pieza. 27. O-O-O Rxe4 28. Nd4 Bxd4 29. cxd4 Nxf2 30. Rd2 Ng4 31. Kc2 Kc7 32. Kd3 Re3+ 33. Kc4 Ra3? y después de haber jugado una buena partida, empiezo a aflojar. La jugada correcta era Rd6! 34. Kd5 Kd7 35. Kc5 Ne3 evita Rb6 por el jaque doble del caballo. 36. Rf2 Rxa4 37. b6!? buscando la línea de mayor resistencia. (37. Kb6 Nc4+ 38. Kxb7 Rb4 39. Rf7+ Kd6 40. Rf6+ Kd5 41. Rxh6 Rxb5+ ganando.) 37... Rc4+ 38. Kb5 Rxd4 39. Rf7+ Kc8 40. Rc7+ Kb8 $2 41. Re7 Rb4+ 42. Kxa5 Rxb6! 43. Rxe3 Rg6 44. g3 El análisis hecho por los MI Aldrete, Russek y Frey, y el MF Acevedo indicaban que esto ya no se podía ganar. Sin embargo, siempre el bando que se defiende tiene dificultades prácticas. 44. ... Kc7 45. Kb5 Rg5+ 46. Kb4 h5 47. Re7+ Kc8 48. Rh7 Kb8 49. Rh6 Ka7 50. Rh7 Ka6 51. Rh6+ b6 el plan del negro es sencillo. Hay que adelantar poco a poco el peón de la columna b. Mi impresión que en la práctica este final no es fácil de jugar para las blancas. 52. Rh8? esto pierde fácilmente 52. ... Rg4+ 53. Kb3 Rxg3+ 54. Kb4 Rg4+ 55. Kb3 h4 56. Rh5 b5 57. Rh8 Ka5 58. Ra8+ Kb6 59. Rh8 Kc5 60. Rh5+ Kc6 61. Rh6+ Kd5 62. Rh5+ Ke4! 63. Rxb5 h3 64. Rh5 Rg3+ 65. Kc4 Kf3 66. Kd3 Kg2+? (Desde luego ganaba 66... Kg4+, que gana la torre y se puede rendir ya el blanco.) 67. Ke2 h2 68. Rf5 h1=Q 69. Rf2+ Kh3 y las blancas abandonaron 0-1

Friday, January 24, 2014

La táctica en ajedrez


Yo empecé a jugar ajedrez competitivamente en 1975. Jugué un torneo en tercera fuerza, el Nacional Abierto. Hice 5 de 8 puntos y entonces decidí que a partir de entonces sólo jugaría en la primera fuerza, decisión de la cual no me arrepiento. Finalmente uno debe siempre intentar jugar contra los mejores jugadores a los que uno pueda tener acceso. En 1976 fui a Buenos Aires a pasar unos meses con mis abuelos y conocí mucho más el ambiente del ajedrez argentino. Ya pare ese entonces estaba inoculado con el virus del ajedrez y no parece, después de tantos años, haber perdido fuerza.

En 1977, empezando ya la carrera de física, era cuando empezaba a jugar mucho más asiduamente. Cuando uno empieza la parte táctica tiende a desarrollarse más rápido y en mi caso no fue la excepción. La siguiente partida la jugué contra un joven norteamericano que en ese entonces residía en México. He aquí el encuentro:

Blancas: Jorge Amador
Negras: Manuel López
Match de entrenamiento (2a partida)
2/feb/1977
Apertura Sokolsky

1. b4 a5?! Esta jugada la vi por primera vez cuando estaba en Argentina (1976). Ya había sido mencionada pot Damián Reca en su libro sobre la defensa Caro-Kann, en el capítulo que habla de los ataques laterales de peones. 2. b5 c6 3. c4 d5 4. e3 cxb5 5. cxb5 e5 (5... e6 parece más segura, aunque deja el problema del alfil negro de casillas blancas.) 6. Ab2 Ad6 7. Cf3 Cd7 8. Db3 Cgf6 9. d4? Curioso que una jugada que pareciese natural resulte mala. 9. ... exd4 10. Cxd4 Ab4+ 11. Ac3 Cc5 12. Dc2 Cfe4 13. Axb4 axb4 14. Cd2 Af5!? recuerdo que cuando se me ocurrió esta jugada me pareció insólita. Rybka 4 no la pone entre sus tres primeras opciones y al hacerla, va cambiando su valoración de -0.12 a +1.01. Probablemente sea mala, pero va a poner las cosas mucho más emocionantes. 15. Cxe4 (si 15. Cxf5 Df6 16. Cd4 Dxf2+ 17. Rd1 Cc3+ 18. Rc1 De1+ 19. Rb2 C5a4+ 20. Rb3 Dxa1 ganando) 15... Cxe4 16. Cxf5 (véase diagrama) ¿qué jugada debe hacer aquí el negro? Piense un poco. La posición está en su momento crítico.



Jorge Amador - Manuel López
Juegan las negras

16. ... b3!! 17. Db2 (17. Dxb3 Da5+ 18. Re2 Dd2+ 19. Rf3 Dxf2+ 20. Rg4 h5+ 21. Rh3 Cg5#) (En caso de 17. De2? Da5+ 18. Rd1 Cc3+es suficiente) 17... Da5+ 18. Re2? (18. Rd1 Cc3+ 19. Rc1? (19. Re1 es la jugada que da Rybka, la cual da tablas por perpetuo.) 19...Tc8? es la jugada que tengo en mis notas, pero Rybka dice que eso no gana. (La máquina dice que 19... Cxa2+ 20. Rd1 Cc3+ 21. Rc1 Ce2+ 22. Axe2 Dxa1+ 23. Dxa1 Txa1+ 24. Rd2 Txh1 ganando.) 20. Cd6+ Rd7 21. Cxc8 Txc8 22. axb3 Ca4+ 23. Rb1 De1+ 24. Ra2 Cc3+ 25. Ra3 Cxb5+ 26. Ra2 Cc3+ 27. Ra3 Ta8+ 28. Rb4 Ca2+ 29. Rc5 Db4+ 30. Rxd5 Ta5+ 31. Ab5+ Txb5#. Desde luego que este es un cálculo demasiado largo pero evidentemente mucho del mismo es obligado. Yo no vi en mi cabeza la secuencia mencionada hasta el mate, pero el ataque se veía demoledor) 18... Dxa2! 19. Txa2 Txa2 20. Rf3 Txb2 21. Ae2 Cd2+ 22. Rg3 Tb1 23. Txb1 Cxb1 24. Cd6+ Rd7 25. Cxb7 las negras están ganadas, pero hacen una jugada muy simpática 25. ... Tc8! una trampa final 26. Ag4+ Rc7 27. Axc8 Cc3!! brutalmente ganadora. No hay duda que cuando uno está inspirado todo sale bien. 28. Af5 Ce4+! 29. Axe4 dxe4 30. Cc5 b2 31. Cxe4 y al mismo tiempo de hacer esta jugada, las blancas abandonaron 0-1.


Saturday, August 17, 2013

Una ingeniosa celada


La siguiente partida la jugué hace unos 33 años. Me acuerdo mucho de ella porque me parece que esta partida demostró que estaba adquiriendo más entendimiento sobre algunas posiciones en ajedrez. De hecho, monté una trampa en la que mi rival cayó, pero que mostró que había un cambio en cómo veía las posiciones. Desde luego esto no significaba que entendiera el ajedrez en sí, porque eso me parece inasequible, sino que había algunos destellos de un ajedrez más inteligente, más razonado, más entendido. Veamos:


Dana, Alberto - López, Manuel
Torneo Pomona, 1980

1. d4 Nf6 2. c4 c5 3. e3 g6 4. Nf3 Bg7 5. Nc3 cxd4 6. exd4 O-O 7. Bg5 h6 8. Bf4 d5 las negras han igualado. 9. Qd2 Kh7 10. c5 ésta es una de esas jugadas que ni siquiera la menciona Houdini. Quizás fijar el flanco no es tan buena idea. Siempre es preferible mantener la tensión central, claro, si esto es posible. 10. ... Nc6 11. Bd3 Ne4! cuando este tipo de jugadas es posible, es claro que las negras están bien.12. Qe3 Nxd4! gracias al doble ataque a dos piezas, vía un peón, esta jugada es posible. 13. Nxd4 e5 14. Bxe5 Bxe5 15. Bxe4?? no parece la mejor idea dejarle la pareja de alfiles a las negras. 15. ... dxe4 16. O-O-O Qa5 17. Nxe4

 Dana, Alberto - López, Manuel
Juegan las negras

17. ... Re8!! Aún hoy me acuerdo de esta jugada. La intención es meterlo en una celada. Mi rival cae pensando que queda con ventaja ganadora. 18. f4? Bg7 19. Nf6+?? se cierra la trampa. Las blancas ganan calidad, pero la pareja de alfiles de las negras se mostrará como mortal. 19. ... Bxf6 20. Qxe8 Bxd4 21. Qxf7+ Bg7 22. Qc4 Bf5 Las negras tienen una posición aplastante. Los alfiles son terribles 23. Rd2 Rc8 24. b4 Qa3+ 25. Kd1 b6 26. c6 Qa4+ 27. Ke2 Rxc6 28. Qd5 Re6+ 29. Kf2 Qxb4 30. h3 Qxf4+ y las blancas se rinden. Houdini anuncia mate en seis jugadas. 0-1

Monday, August 12, 2013

Una partida modelo



El año 1979 fue bastante bueno para mí en términos de ajedrez. Empecé a notar avances. En ese tiempo el MI Jesús Rodríguez -de Cuba- vino a dar una serie de pláticas a algunos jugadores (recuerdo a Mario Guevara, a Amado Palma y a Enrique Monroy (que hace años que no veo a este último)) y sin duda la visión de un fortísimo jugador como Jesús Rodríguez, nos ayudó en nuestra formación. Cabe decir que todos los que acudimos al CDOM (por la zona de Ejército Nacional y Periférico), éramos muy entusiastas y trabajadores en lo que se refiere a estudiar ajedrez. Quizás yo dediqué mucho más tiempo al ajedrez en esos tiempos, aunque ya estaba estudiando en la Universidad la carrera de física. En cualquiera de los casos, fue muy motivante trabajar con el maestro cubano.

En la siguiente partida, que se jugó en la séptima ronda (la penúltima), me tocó enfrentar al viejo Maestro Joaquín Camarena. Para ese entonces ya Camarena no era tan fuerte y sus mejores años habían pasado. No obstante, se pronosticaba una dura lucha. Pude planetar el Gambito Benko, el cual tiene ideas muy claras: la dominación de la gran diagonal a1-h8 por el alfil fianchettado en g7, las dos columnas abiertas a y b, a cambio de un peón nada más y una posición por demás dinámica, son parte de este planteamiento, elaborado por Pal Benko a mediados de los años sesenta y principios de los setenta. De hecho, en mi opinión, esta partida representa las ideas más típicas del Benko, pues además, el Maestro Camarena me dio una serie de libertades que parecen ver al juego del negro como muy fácil de jugar. Veamos:

Camarena, Joaquín - López, Manuel
Campeonato Nacional Abierto (7), 1979
Gambito Benko

1. d4 Nf6 2. Nf3 g6 3. c4 c5 4. d5 b5 5. cxb5 a6 6. Nc3 axb5 7. Nxb5 Ba6 8. Nc3 d6 9. g3 Bg7 10. Bg2 O-O 11. O-O Nbd7 12. Re1 Qc7 13. e4 Rfb8 14. Qc2 Ng4 una idea típica del gambito Benko 15. Bf4?! dudosa línea 15. ... Nge5 16. Nxe5 Nxe5 17. Bxe5? Bxe5 18. Rac1 Qa5 19. h3? las blancas pierden la brújula del partido. Esta jugada tiene poca utilidad. 19. ... Rb4 20. Bf3? otra jugada difícil de explicar 20. ... Rab8 21. b3 c4! 22. Qd2 (22. bxc4?? Rxc4 y las negras ganan fácilmente). 22... cxb3 23. axb3 Rxb3 24. Nb1 Qb6 (24... Qxd2 25. Nxd2 Rd3 26. Rc2 Bc3 27. Rb1! y las blancas sobreviven) 25. Rc6 



Camarena, J - López, M
Campeonato Nacional Abierto (7), 1979
Juegan las negras

25. ... Qa7!  y aquí el blanco abandonó. No hay manera de parar todas las amenazas: 26. ... Rxb1; 26. ... Rxf3; o bien 26. Da2 Tb2! y ya el blanco puede rendirse 0-1.

____

(*) Cabe señalar que Joaquín Camarena participó en la Olimpiada de Tel Aviv, 1964 y fue a Cuba en ese mismo año. Jugó contra Reuben Fine (negras) en el torneo panamericano de 1945. He aquí la partida (hallada en chesstempo): Camarena-Fine; Pan American 1945, 1. Cf3 d5 2. g3 c5 3. Ag2 g6 4. O-O d4 5. d3 Ag7 6. a4 Cf6 7. Ca3 O-O 8. Cc4 Cd5 9. Ad2 Cc6 10. Dc1 e5 11. Ah6 f6 12. Axg7 Rxg7 13. Cfd2 Ae6 14. e4 dxe3 e.p. 15. fxe3 De7 16. c3 Tad8 17. Dc2 Td7 18. Tad1 Cb6 19. Cxb6 axb6 20. Cc4 Dd8 21. Af3 Ca7 22. e4 b5 23. axb5 Cxb5 24. Ce3 f5 25. exf5 gxf5 26. De2 Ab3 27. Td2 Dg5 28. Tf2 Rh8 29. Cc4 e4 30. dxe4 Axc4 31. Dxc4 Txd2 32. Dxc5 Cd6 33. Txd2 Dxd2 34. De5+ Rg8 35. De6+ Cf7 36. exf5 Ta8 37. Ag2 Ta1+ 38. Af1 Dd3 39. Dc8+ Rg7 40. f6+ Rxf6 41. Dh3  0-1

(**) En la foto que ilustra este artículo, de izquierda a derecha: Joaquín Camarena (DF), Tte. Coronel José Joaquín Araiza (DF), Fidel Guerrero (Sin) y su esposa,  Simón Delgado (Nay), Jorge Aldrete (NL). Esta foto fue antes de partir a la Olimpiada de Tel Aviv, en 1964.

Monday, March 12, 2012

Los efectos del software libre


Quienes usamos y compartimos la idea del software libre y abierto, nos topamos con quienes simplemente no entienden cómo es que uno "regala" su trabajo. La realidad es que es una cuestión de creer en que la idea es correcta y "regalar" el trabajo (asunto que estrictamente pudiese ser cierto), no es tan lamentable ni grave como a más de uno le pudiese parecer. De hecho, Donald Knuth, una de las vacas sagradas del cómputo ha dicho ya en alguna ocasión que todos estamos obligados a hacer algo por nuestras comunidades, por el lugar donde vivimos. Los programadores pueden donar su código y eso es una manera de agradecer los beneficios recibidos en nuestras existencias. Cada quien, desde su reducto, está obligado a hacer de este mundo algo mejor.

Knuth es el primero en aplicar esta idea y su sistema de tipografía TeX, es libre y gratuito. Es de código abierto y hoy por hoy es el estándar en sistemas de tipografía para libros de matemáticas. TeX tiene ya sus años y se ha desarrollado extraordinariamente con una serie de herramientas para quienes tienen que formar libros científicos. Así pues, aparte de la obra maestra de Knuth (The Art of Computer Programming - una serie de libros sobre cómputo), tenemos a TeX, entre tantas cosas que ha hecho este personaje por el cómputo mundial.

En el software libre, abierto, en donde en general incluso se entrega el código fuente, tenemos la posibilidad de aprender de lo que otros ya han hecho. Esto me hace pensar en el ajedrez: gracias a quienes escriben de las partidas de otros, que las analizan, que hacen colecciones de posiciones de táctica, de ejercicios para mejorar en nuestra comprensión ajedrecística, entonces aprendemos. No tiene sentido pretender inventar el hilo negro, aprender todo desde cero, sin ayuda. No nos alcanzaría una vida en ese sentido. Hay que sacar ventaja de que otros ya han hecho el trabajo y se han tomado la molestia de explicarnos muchas cosas que nos permiten avanzar más rápidamente.

Y todo esto viene a cuento porque leo a Frederic Friedel, de Chessbase, que en una entrevista dice que los programas de ajedrez de código abierto han arruinado el negocio del ajedrez computarizado. El problema es que hay una serie de motores de ajedrez, "engines", los cuales juegan tan bien como que Fritz, Rybka, Shredder, etc. Por ello en la versión 13 de Fritz, Chessbase ha añadido el que se pueda interactuar con análisis de otros a través de la "nube", es decir, a través de análisis realizados por otros y guardado en los servidores públicos de Chessbase. Para ello, cabe decirlo, se necesita comprar Fritz 13 para tener acceso a esta opción.

El problema es que Robbolito, Houdini y StockFish, son programas que juegan ya tan bien como Rybka (que de acuerdo a Kasparov a finales del 2010, decía, era el programa que mejor entendía de ajedrez). Ahora simplemente se puede descargar cualquiera de los programas mencionados y si comparamos análisis contra los motores comerciales, no veremos prácticamente diferencia. Quizás Friedel tiene razón: vender motores y programas de ajedrez ya no parece ser un buen negocio.

Pero pensemos en Chessbase, el producto estrella de dicha empresa, el manejador de partidas de ajedrez el cual es un estándar. Hay varios productos de la competencia, algunos comerciales y otros de software libre y abierto. Chess Assistant, que es la competencia comercial de Chessbase, hace estrictamente lo mismo que Chessbase (y viceversa), y es cuestión de gustos y de tiempo el preferir uno u otro programa. Sin embargo, tenemos "José" (por José Raúl Capablanca) y Scid (Shane's Chess Information Database), que son programas que en términos generales hacen lo mismo que Chessbase o Chess Assistant, pero sin embargo, no tienen el éxito de los programas comerciales. ¿Por qué?

Puede haber muchas razones, pero quizás la más común es que Chessbase y Chess Assistant también entregan una serie de programas de apoyo para sus manejadores de partidas. Tienen servicios de recolección de partidas que se juegan en los torneos y sus bases de información están actualizadas al día. Los programas públicos, libres y gratuitos tienen eso en contra y no pueden competir con esta parte de los programas comerciales. Otra razón es que sus bases de partidas están en general en un formato optimizado para búsquedas, el cual es propietario, mientras que los programas abiertos usan el formato PGN, que probablemente sea mucho más lento de manipular cuando se tienen unos cinco millones de partidas con todo el ajedrez registrado.

Así pues, he aquí lo que hay que hacer para mantener un negocio de software a flote: hay que dar mucho más que solamente un programa funcional. Por eso Chessbase y Chess Assistant se mantienen en el gusto de los ajedrecistas. Con ese mismo criterio el negocio de los programas que juegan ajedrez debe buscar dar más que sólo un programa que juegue al ajedrez. Como se mencionó antes, Fritz 13 es un primer paso en ese derrotero, pero es claro que hay que apurarse porque los programas abiertos y gratuitos hacen tanto como los comerciales. ¿Por qué pagar por algo que se puede conseguir gratis?

Thursday, May 19, 2011

Bosquejo de un lector de archivos PGN


PGN son las siglas de Portable Game Notation, un sistema para anotar partidas de ajedrez, usando el esquema de la notación algebraica, que es el único sistema de escritura oficial de la Federación Internacional de Ajedrez (FIDE). Gracias a este mecanismo, cualquiera puede leer una partida de ajedrez sin prácticamente importar en qué parte del mundo se encuentre. La notación de una partida de ajedrez contempla los siguientes rubros: Evento (en qué torneo se jugó el torneo), lugar del evento, fecha completa, ronda, nombre del conductor de las blancas, nombre del conductor de las negras, resultado, ECO (código de la apertura de acuerdo a la Encyclopedia of Chess Openings - ECO), el rating de las blancas, el rating de las negras, entre otros apartados (estos son los más generalizados). Inmediatamente después de esto, viene la partida, codificada de la siguiente manera: número de jugada, jugada del blanco,  jugada del negro, número de jugada, etc. hasta llegar va 1-0, 0-1 o 1/2 (ganan blancas, ganan negras, empate).

Por ejemplo, esta es la partida entre Leko e Ivanchuk, del torneo alemán de Dortmund, del 2008:


[Event "Sparkassen"]
[Site "Dortmund GER"]
[Date "2008.06.29"]
[Round "2"]
[White "Leko, P."]
[Black "Ivanchuk, V."]
[Result "1-0"]
[ECO "B46"]
[WhiteElo "2741"]
[BlackElo "2740"]

1. e4 c5 2. Nf3 e6 3. d4 cxd4 4. Nxd4 Nc6 5. Nc3 a6 6. Nxc6 bxc6 7. Bd3 d5 8. O-O Nf6 9. Qf3 Be7 10. Qg3 Nh5 11. Qf3 Nf6 12. e5 Nd7 13. Qg3 g6 14. Bh6 c5 15. Na4 c4 16. Be2 Bb7 17. b3 Bc6 18. Nb2 Rb8 19. Nd1 Nc5 20. Ne3 Ne4 21. Qh3 Ng5 22. Qg4 c3 23. a3 Bb5 24. Bxb5+ axb5 25. f3 Qb6 26. Rae1 d4 27. Nd1 d3+ 28. Kh1 dxc2 29. Nf2 Bc5 30. Nd3 Be3 31. Bxg5 Bd2 32. Re2 O-O 33. Nc1 b4 34. Bxd2 cxd2 35. Rxd2 bxa3 36. Rxc2 Rfc8 37. Qe4 Rxc2 38. Qxc2 Qd4 39. Na2 Qxe5 40. b4 Rd8 41. h3 h5 42. Rb1 Qe3 43. Rd1 Rd5 44. Qb1 Qe2 45. Re1 Qd2 46. Rc1 Rd8 47. b5 Rb8 48. Rc3 h4 49. b6 Qd6 50. Rb3 Rb7 51. Nc3 Qc6 52. Rxa3 Qxb6 53. Qxb6 Rxb6 54. Ra4 g5 55. f4 Rb3 56. Ne2 Re3 57. Ng1 1-0


Aquí las piezas se denominan por sus siglas en inglés: K-king (rey), Q-queen (dama), B-bishop (alfil), N-knight (caballo), R-rook (torre). No se pone la "P" de peón porque como hay dieciseís, se tomó la decisión que sería redundante. Si no hay pieza que se mueve, se asume que es un peón. Cabe hacer notar además, que aquí hemos puesto la partida en notación larga, es decir, indicando de qué casilla se mueve la pieza o peón y a qué casilla llega. En general se usa la notación corta, que es simplemente la pieza que se mueve y hacia qué casilla se mueve. Si dos piezas iguales pueden acceder a la casilla a la que se mueve la pieza, hay entonces que indicar cuál es la que se mueve, poniendo las coordenadas de donde nace la jugada. Por ejemplo, una partida en notación larga se ve así:

[Event ""]
[Site "Breslau"]
[Date "1912"]
[Round ""]
[White "Levitzky"]
[Black "Marshall"]
[Result "0-1"]

1.e2-e4 e7-e6 2.d2-d4 d7-d5 3.Nb1-c3 c7-c5 4.Ng1-f3 Nb8-c6 5.e4xd5 e6xd5 6.Bf1-e2 Ng8-f6 7.O-O Bf8-e7 8.Bc1-g5 O-O 9.d4xc5 Bc8-e6 10.Nf3-d4 Be7xc5 11.Nd4xe6 f7xe6 12.Be2-g4 Qd8-d6 13.Bg4-h3 Ra8-e8 14.Qd1-d2 Bc5-b4 15.Bg5xf6 Rf8xf6 16.Ra1-d1 Qd6-c5 17.Qd2-e2 Bb4xc3 18.b2xc3 Qc5xc3 19.Rd1xd5 Nc6-d4 20.Qe2-h5 Re8-f8 21.Rd5-e5 Rf6-h6 22.Qh5-g5 Rh6xh3 23.Re5-c5 Qc3-g3 0-1

Todo esto viene a cuento porque la cuestión es que se me había ocurrido hacer en prolog, sí, en prolog, un programa que leyera archivos de esta naturaleza y desplegara la partida en formato PGN en un tablerito electrónico. Para simplificar las cosas, decidí primero usar la notación larga, porque así resulta más fácil ya que la propia notación me dice qué movimiento hay que hacer, considerando la casilla inicial y la casilla de llegada de la pieza que hace la jugada.

Un problema inicial que observé es que en prolog no hay arreglos como en muchos lenguajes como Pascal o C. No incluyo Basic porque esto es de la "Tierra Primitiva". Pero en prolog lo equivalente son las listas. Así, puedo definir una lista con ocho casilleros: [tb,cb,ab,db,ab,cb,tb], lo cual representaría la primera fila del tablero. Quizás haya que ser más precisos y poner: fila(1,[tb,cb,ab,db,ab,cb,tb]).

Si quisiéramos usar esta representación para el tablero completo, podríamos poner:

fila(8,[tn,cn,an,dn,an,cn,tn]).
fila(7,[pn,pn,pn,pn,pn,pn,pn,pn]).
fila(6,[b,b,b,b,b,b,b,b]).
fila(5,[b,b,b,b,b,b,b,b]).
fila(4,[b,b,b,b,b,b,b,b]).
fila(3,[b,b,b,b,b,b,b,b]).
fila(2,[pb,pb,pb,pb,pb,pb,pb]).
fila(1,[tb,cb,ab,db,ab,cb,tb]).

donde tb, cb, ab, db, pb y rb son torre blanca, caballo blanco, alfil blanco, dama blanca, peon blanco y rey blanco, respectivamente (y con sus equivalentes para torre negra, caballo negro,alfil negro, etc.) La "b" representa una casilla vacía.

Muy bien, aquí ya tenemos parte del asunto zanjado. ya podemos representar en claúsulas de prolog el tablero de ajedrez. Ahora sólo resta poder manipular las jugadas y hacer que éstas se representen en el tablero.

En prolog, podemos encontrar el enésimo elemento de una lista de manera muy fácil:

% Hallar el enésimo elemento de una lista.
% El primer elemento de la lista es el 1.

element_at(X,[X|_],1).
element_at(X,[_|L],K) :- K > 1, K1 is K - 1, 
                         element_at(X,L,K1).

Esto significa que hallar, digamos, el quinto elemento de una lista es equivalente a hallar el cuarto elemento de una lista menos su primer elemento, o el tercer elemento de una lista sin considerar los dos primeros elementos, etc. Así se hace fácilmente en prolog.

Ahora basta ver la partida y describir cada jugada como una acción en prolog. Por ejemplo, si tengo la jugada "e2-e4", basta con poner lo que hay en la casilla 52 y pasarlo a la casilla 54. Para ello, ponemos una "b" (de blanco) en la casilla 52 (e2) y lo que había en esa casilla, lo escribimos en la casilla 54. (ver el tablero en la siguiente imagen - correspondence-chess.jpg).

Para hacer la traducción de las coordenadas de cada columna a, b, c, d, e, f, g, h, podemos hacer el siguiente predicado de equivalencias:

equivalencia(a,1).
equivalencia(b,2).
equivalencia(c,3).
equivalencia(d,4).
equivalencia(e,5).
equivalencia(f,6).
equivalencia(g,7).
equivalencia(h,8).

Así, basta ir de jugada en jugada y hacer una rutina que lea las coordenadas, inicial y final, así como la pieza que debe ir ahí y listo, el tablero cambiará su posición. Si la jugada la tenemos como una lista, por ejemplo: [e,2,e,4], el pseudocódigo podría ser algo así:

haz_jugada([X1,Y1,X2,Y2], Pieza) :- 
    /*saca las coordenadas de la posición inicial y final de la pieza que se mueve*/
    /*revisa qué pieza hay en la lista (fila) correspondiente a la posición de la coordenada inicial*/
    /*sustituye el valor que haya ahí por un blanco*/
    /*ve a la posición final y pon la pieza en la coordenada de la fila correspondiente*/

Es claro que este algoritmo no valida si las jugadas son legales o no, pero la idea es que las partidas dadas en formato PGN son correctas y no contienen errores. En caso de contenerlos caemos en "garbage in -> garbage out" (si le das basura al programa regresará basura).

Con esto en mente, podemos hacer un programa que lea el archivo PGN y pase jugada por jugada una partida. Sin embargo, esto sólo puede hacerse de ida, es decir, en una dirección, porque cuando se captura una pieza, por ejemplo, la pieza capturada desaparece y no llevamos registro de esto. Así, si queremos ir, por decir algo, una jugada hacia atrás, pues no podemos hacerlo porque no tenemos información de qué pieza fue eliminada del tablero.



La solución a esto es en realidad crear tantos tableros de ajedrez completos en donde cada jugada esté en uno de ellos. Así, si quiero ir a la jugada 27, entonces pinto inmediatamente el tablero 27. No me tengo que acordar si ahí hubo captura o no de alguna pieza. Si hago así las cosas, entonces mi definición del tablero de ajedrez debo modificarlo para que contemple en qué jugada está el programa en ese momento desplegando el tablero:

             
/*ejemplo de la estructura del tablero para el primer movimiento*/
fila(8,[tn,cn,an,dn,an,cn,tn],1).
fila(7,[pn,pn,pn,pn,pn,pn,pn,pn],1).
fila(6,[b,b,b,b,b,b,b,b],1).
fila(5,[b,b,b,b,b,b,b,b],1).
fila(4,[b,b,b,b,b,b,b,b]1,).
fila(3,[b,b,b,b,b,b,b,b],1).
fila(2,[pb,pb,pb,pb,pb,pb,pb],1).
fila(1,[tb,cb,ab,db,ab,cb,tb],1).
                    

Una partida promedio, digamos de 40 jugadas tendría entences 80 tableros (8 claúsulas por tablero), que se generarían en tiempo de ejecución como claúsulas de prolog. esto significa 640 claúsulas para guardar en memoria, cosa que actualmente cualquier computadora puede hacer sin mayores dificultades.

De hecho, los programas comerciales como Chessbase hacen precisamente esto, aunque como no lo hacen en prolog, usan otras técnicas. No sé en qué lenguaje está escrito Chessbase, pero pienso que es C. Si este es el caso, y si se sigue lo que aquí hemos comentado, entonces un programa que lea una partida PGN creará en tiempo de ejecución un diagrama por cada movimiento. Como en C se pueden crear arreglos bidimensionales, probablemente el tablero esté definido de esta manera y entonces, cuando se hace una jugada, se crea un tablero nuevo, en una estructura dinámica, que solamente pide la memoria necesaria cuando el sistema lo necesita.

Cuando se termina de ver esa partida, se libera toda esa memoria (es mandar los apuntadores a nil, por ejemplo), y entonces tenemos un sistema por demás eficiente.

El sistema de lectura de partidas PGN en Prolog no es el más eficiente, pero es un problema que puede ser atacado por Prolog de manera razonable y además, sin necesidad de pensar en estructuras dinámicas como en otros lenguajes, cosa que en general se aprende hasta un segundo curso de programación.