(Voir LICENSE pour plus de détails.)
Voici le sujet du projet, explicant ce que nous devions réaliser.
Voici quelques démonstrations du projet :
Sur une grille 5x5 avec 16 couleurs :
Résolution automatique (chronométrée) :
Exemple du haut d'une grille plus grande (avec message d'information copyrights) :
Ce dossier contient les fichiers OCaml source (.ml) suivants :
resolution.ml
Il s'agit de la librairie de résolution du puzzle demandée.
interface.ml
Il s'agit de la libraire d'interface graphique demandée, réalisée en utilisant Graphics et Zenity (GTK).
interface_utilisateur.ml
Il s'agit de l'interface graphique. Lance seulement une procédure du module 'interface.ml'. (non documentée : rien à dire)
create_instance.ml
Un tout petit programme pour générer une instance aléatoire, de façon intéractive en utilisant zenity. (non documentée en .mli : rien à dire)
create_instance_sol.ml
Un tout petit programme pour générer une instance aléatoire ayant une solution, de façon intéractive en utilisant zenity. (non documentée en .mli : rien à dire)
temps.ml
Un tout petit module pour chronométrer le temps mis pour les résolutions. Une fois une résolution finie dans l'interface graphique, un message informatif précise le temps mis par OCaml pour résoudre. Attention : n'est pas du tout égal au temps mis pas l'ordinateur à répondre. Mais ça donne un ordre de grandeur de toute manière.
Ce dossier contient les fichiers ocaml signature (.mli) suivants :
sig_resolution.mli
Il s'agit de la librairie de résolution du puzzle demandée.
sig_interface.mli
Il s'agit de l'interface graphique demandée, réalisée en utilisant Graphics et Zenity (GTK).
Ce dossier contient les fichiers de documentations obtenus avec OCamlDoc (page principale : Doc/documentation.html).
Ce dossier contient un fichier Makefile pour compiler le projet sur une architecture Linux classique, avec ocamlc
et ocamlopt
.
Note : la dernière version stable d'OCaml 4.03.0 fonctionne aussi pour ce projet.
Les outils libres et gratuitement disponibles suivants sont aussi nécessaires au bon fonctionnement de l'exécutable :
"zenity", bibliothèque GTK, pour les fenêtres intéractives en bash (utilisée en Ocaml via le module Sys),
Normalement, le fichier Makefile présent dans le dossier permet de compiler le projet, en faisant simplement "make" dans un terminal (testé seulement sous Linux).
Ma procédure de résolution porte le doux nom de "resolution_naive" car elle n'est aucunement optimisée. Ainsi, tant qu'aucun progrès n'aura été fait sur ce plan là, il est inutile de lancer la résolution pour une instance avec plus d'une dizaine de pièces ! (J'ai testé jusqu'à 4x4 seulement). A noter que plus 'c' est grand, plus la résolution est rapide pour une instance aléatoire. Si vous voulez faire des tests, choisissez plutôt c plus grand que 10.
Durant la résolution, le seul moyen d'interrompre le travail du programme est de le fermer brutalement !
(C) 2012-2016 Lilian Besson, sous licence GPLv3.