Le jeu Flow (aussi appelé NumberLink) est un casse-tête dans lequel le joueur dispose d'une grille contenant des paires de points colorés de la même couleur, et doit relier ces paires de points entre elles sans provoquer de croisements de chemins, et en recouvrant l'ensemble de la grille. Ceci est un exemple non trivial de grille résolue (Source image : FlowFreeSolutions) :
Le but du projet consiste à permettre de modéliser le jeu, et construire des stratégies permettant de le résoudre. Plus d'informations disponibles dans le sujet détaillé. Le format de fichier suivant devra être utilisé, ceci afin de permettre de se partager les grilles entre les équipes :
- Sur la première ligne, la hauteur
h
et la largeurw
de la carte, donnée sous forme de nombre entier strictement positif et séparé d'un unique espace. - Sur les
h
lignes suivantes, une ligne composée dew
caractères et terminée par un retour à la ligne. Chaque caractère est soit un#
, soit un+
, soit un chiffre[0-9]
, soit un caractère majuscule[A-Z]
. - En plus des lignes précédentes, il est possible de
rajouter des lignes de commentaires commençant par le
caractère
-
.
-
Les caractères
#
dans la grille représentent des cases vides. -
Les caractères
+
dans la grille représentent des ponts. -
Les caractères sur la grille dans
[0-9A-Z]
représentent des extrémités à relier par des chemins. Chacun de ces caractères ne peut apparaître que zéro ou deux fois dans la grille, sans quoi la celle-ci est invalide. Rien n'oblige à les utiliser dans l'ordre ou consécutivement.
-------------------------- - title : that one is easy -------------------------- 4 4 #1#3 #3#2 1### 2#44
Un des aspects de ce projet consiste à mettre en valeur la
programmation fonctionnelle. Il est donc demandé d'utiliser au
maximum ce style de programmation et de remplacer
quand c'est possible les constructions impératives par un équivalent
fonctionnel.
Il est possible d'utiliser des bibliothèques codées en Lisp
pour faciliter certaines parties de la programmation. Pour
cela, il est recommandé d'installer un gestionnaire de
paquetages
nommé QuickLisp. La
procédure d'installation de ce gestionnaire est expliquée de
manière très claire à partir
du lien
suivant.