Polyglot en Pascal


Lecture d'un livre d'ouvertures au format PolyGlot

Sur cette page vous trouverez deux programmes en Pascal montrant comment lire un livre d'ouvertures au format PolyGlot, ainsi qu'une unité permettant de choisir un coup dans un livre.

Vous trouverez également les programmes originaux en C de Michel Van den Bergh. (La page où je les avais téléchargés n'existe plus.)

Calcul de la clé

Le programme pg_key.pas calcule la clé correspondant à une position donnée.

./pg_key "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
463B96181691FC9C

Obtenir les coups correspondant

Le programme pg_show.pas lit un livre et affiche les coups correspondant à une clé donnée.

./pg_show fruit.bin 463B96181691FC9C
move=d2d4 weight=41,46%
move=e2e4 weight=40,62%
move=g1f3 weight=10,00%
move=c2c4 weight= 7,33%
move=g2g3 weight= 0,29%
move=b2b3 weight= 0,18%
move=f2f4 weight= 0,07%
move=b1c3 weight= 0,01%
move=b2b4 weight= 0,01%
move=c2c3 weight= 0,01%
move=d2d3 weight= 0,01%

Choisir un coup

L'unité book.pas réunit ce que font les deux programmes précédents. La fonction BookMove calcule la clé de la position, cherche les coups correspondants dans le livre et en choisit un au hasard, en tenant compte de leurs poids. Elle renvoie une chaîne vide si la position n'est pas dans le livre.

Le programme bookdemo.pas choisit un coup pour la position de départ dans trois livres.

uses
  SysUtils, Book;

const
  CStartPosition = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1';

begin
  Randomize;
  WriteLn(BookMove(CStartPosition, 'fruit.bin'));
  WriteLn(BookMove(CStartPosition, 'gm2001.bin'));
  WriteLn(BookMove(CStartPosition, 'Perfect2019.bin'));
end.

Les roques sont renvoyés sous la forme e1g1, e1c1, e8g8 et e8c8, et non sous la forme PolyGlot du roi prenant sa tour (e1h1, etc.).

Si l'unité est compilée avec l'option -dDEBUG_BOOK, la fonction affiche sur la sortie d'erreur les coups trouvés avec leurs poids, puis le coup choisi :

# BOOK move=d2d4 weight=11712 (41.46%)
# BOOK move=e2e4 weight=11476 (40.62%)
# BOOK move=g1f3 weight=2824 (10.00%)
# BOOK move=c2c4 weight=2071 (7.33%)
...
# BOOK chosen=g1f3

Si vous le souhaitez, vous pouvez télécharger les sources de cet article.

Les sources contiennent aussi, dans le dossier archives, les utilitaires pg_utils (pg_query, pg_add, pg_key) de Michel Van den Bergh et l'outil pgheader.

Vous pouvez aussi lire des informations en anglais sur le programme PolyGlot et sur le format du même nom.

Dernière modification : .