Objectifs initiaux

Le premier objectif est bien entendu de répondre à l'énoncé initial : un générateur de grille de mots-croisés, avec ou sans case noire.

Voyons ensuite les objectifs d'un point de vue programmation.

Multi-stratégie

Lorsque j'ai commencé à réfléchir au problème, j'ai eu en tête plusieurs stratégies pour construire une grille. Toutes étaient basées sur un parcours en profondeur dans un arbre de possibilités de remplissage de la grille, mais plusieurs stratégies de remplissages semblaient possible.

J'ai donc gardé en tête tout au long du développement que je pourrais changer le comportement de certaines parties du générateur : comment choisir les mots possible, où les placer, grille aléatoire ou non, avec des contraintes ou pas,…

Je voulais aussi que ces options puissent être sélectionnées lors du lancement du calcul.

Programme testé

Je suis un adepte du « Test Driven Development » (TDD). Cette méthodologie fait gagner un temps fou, même lorsque l'on travaille seul. C'est donc avec cette méthodologie que « La Grille » a été développée.

Pour tester le programme de manière fonctionnelle, un programme annexe au générateur est développé « testgen », qui effectue quelques tests d'assemblage des classes.

Rapide

Le but d'une bonne architecture est de pouvoir être modifiée et maintenue facilement. Une bonne architecture n'affecte pas non plus les performances. Parfois, il y a des concessions à faire : perdre un peu de performance pour garder un programme clair.

J'ai donc souvent comparé les performances de « La Grille » avec une autre contribution à l'énoncé originel du GCN.

À la date de création de ce site, « La Grille » a des performances honnêtes sur des toutes petites grilles, mais le temps de calcul explose dès que la taille grandi un tout petit peu. Un des buts du site sera justement de montrer des méthodes d'optimisation.

 
objectifs_initiaux.txt · Dernière modification: 2010/01/03 09:29 par mokona
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki