Implémentation du problème des n reines en OCaml, dans le cadre d'un devoir maison
  • OCaml 97.7%
  • Dune 2.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2024-03-11 21:55:52 +01:00
bin Initial commit 2024-03-11 21:55:52 +01:00
doc Initial commit 2024-03-11 21:55:52 +01:00
lib Initial commit 2024-03-11 21:55:52 +01:00
test Initial commit 2024-03-11 21:55:52 +01:00
.gitignore Initial commit 2024-03-11 21:55:52 +01:00
.ocamlformat Initial commit 2024-03-11 21:55:52 +01:00
dune-project Initial commit 2024-03-11 21:55:52 +01:00
n_reines.bc Initial commit 2024-03-11 21:55:52 +01:00
n_reines.opam Initial commit 2024-03-11 21:55:52 +01:00
README.md Initial commit 2024-03-11 21:55:52 +01:00

N-reines

Introduction

Cette librairie conjointe à la partie éxécutable permettent de résoudre le {e problème des N reines}. Ce problème consiste à placer n reines sur un plateau de n*n sans qu'elles s'attaquent entre elles.

⚠️ L'usage d'un LSP est fortement recommandé pour naviguer confortablement dans le projet. Bien que les types soient indiqués dans les fichiers .mli, le LSP permet l'affichage de ces types au-dessus des signatures de fonctions, et de voir les documentations entre les fichiers.

Objectif

L'objectif de ce projet est d'être en mesure de pouvoir déterminer et construire une ou plusieurs solutions au problème des N reines. De plus, le programme doit être en mesure de communiquer la ou les réponses à l'utilisateur et de pouvoir être embarqué dans d'autres projets en tant que librairie, indépendamment de ce que l'utilisateur veut en faire. En d'autres termes, la partie éxécutable doit pouvoir être complètement supprimé et réécrite par quelqu'un qui ne connait pas le projet sans que cela ne casse aucune fonctionnalité.

Architecture du projet

Le projet est agencé de la façon suivante:

n_reines
.
├── bin
│   ├── dune
│   └── main.ml
├── doc
│   ├── bin.mld
│   ├── dune
│   ├── index.mld
│   └── test.mld
├── dune-project
├── lib
│   ├── dune
│   ├── interaction.ml
│   ├── n_reines.ml
│   └── solver.ml
├── n_reines.opam
└── test
    ├── dune
    └── n_reines.ml

Plusieurs sections sont distinguables:

  • Le répertoire source page-bin qui contient la partie éxécutable évoqué plus haut
  • Le répertoire source lib qui contient la partie librairie, le module N_reines, divisée en différents modules, chacun avec une fonctionnalité (quasiment) indépendante de l'autre
  • le répertoire source page-test qui contient les tests afin de vérifier qu'aucune fonctionnalité ne casse durant la phase de développement et de refactorisation
  • Un fichier dune dans chaque répertoire qui contient toutes les informations relatives au projet. Vous pouvez les explorer, mais ils servent surtout à indiquer à Dune quoi faire et ne seront donc pas explicités ici.

Fonctionnement

Le programme peut fonctionner de deux manires:

  • Mode récursif (défaut)
  • Mode itératif

Chaque partie sera expliquée dans le module qui lui correspond (à voir dans module-N_reines.Solver).

Comment lancer le programme ?

Plusieurs commandes sont disponibles :

  • Pour compiler le programme, vous pouvez entrer dune build. Pour le compiler avec toutes les optimisations, vous pouvez entrer dune build @install.
  • Pour compiler la documentation, vous pouvez entrer dune build @doc, et le premier fichier de la documentation sera _build/default/_doc/_html/index.html.
  • Pour éxécuter le fichier, vous pouvez entrer dune exec n_reines -- [OPTIONS]. Ommettre les options n'aura aucun impact sur l'effet de la commande si ce n'est de ne pas prendre en compte l'option ommise. Bien entendu, une option --help est disponible et est conseillée pour la premire éxécution.
  • Pour lancer les tests, vous pouvez entrer dune build @runtest (malheureusement, aucun test n'est implémenté, car la documentation de Dune est écrite par les fesses et ne donne aucune indication sur comment ça marche).

Tous les artéfacts de compilation se trouveront dans le répertoire _build/.

Une version bytecode est précompilée (main.bc). Elle s'éxécutera sur toutes les plateformes.

Ce qui ne marche pas :

  • les tests (si vous le souhaitez, vous pouvez les écrire vous-mêmes mais bonne chance avec la doc de Dune)
  • les timings
  • l'argument de commande sols