# Présentation de l'unité Trees

## Overview

L'unité *Trees* sert à la création et à l'utilisation d'un livre d'ouvertures pour un programme d'échecs.

Le livre est conçu comme une liste d'arbres (d'où le pluriel dans le nom de l'unité). Le premier coup de la partie est la racine d'un arbre.

L'unité fait partie du projet [Alouette](https://codeberg.org/rchastain/alouette).

## Formats de fichier

Deux formats de fichier sont pris en charge.

Le format linéaire.

```
e2e4 e7e5 d2d4
e2e4 c7c5
d2d4 d7d5
```

Le format compact.

```
(e2e4(e7e5(d2d4))(c7c5))(d2d4(d7d5))
```

## Exemples d'utilisation

Le programme *demo.pas* crée un petit livre, l'utilise pour trouver des coups à jouer, et le sauvegarde dans les deux formats (linéaire et compact).

```
make demo
./demo
```

Le programme *test.pas* charge des livres au format linéaire, les convertit au format compact, puis de nouveau au format linéaire, et compare le fichier final au fichier initial.

```
make test
./test
```

## Histoire

L'unité *Trees* est basée sur un [code source](https://www.developpez.net/forums/d2034310/autres-langages/pascal/langage/representation-l-arbre-d-livre-d-ouvertures-aux-echecs/#post11310888) de Mathieu Dalbin.

Le format que j'appelle compact a été décrit par [Kathe Spracklen](https://content.iospress.com/articles/icga-journal/icg6-1-04). Il a été utilisé par Marc-Philippe Huget dans son moteur d'échecs [La Dame Blanche](http://www.quarkchess.de/ladameblanche/).
