En binôme, nous avons commencé par bien comprendre les règles mathématiques du jeu de Grundy. Une première version du programme a été donnée pour commencer.
Analyse du code
J’ai d’abord essayé, avec l’aide de mon binôme, de comprendre le code qu’on nous a fourni par défaut et à côté, j’ai aussi lu entièrement le sujet qu’on nous a donné pour savoir l’objectif du projet et comment procéder par la suite.
Recherche de solutions d’optimisation
Nous avons étudié différentes approches d’optimisation, notamment :
L’utilisation de structures de données plus efficaces (ArrayList)
La suppression de redondances dans les appels récursifs
Chaque solution a été testée séparément pour observer son impact sur le temps d'exécution.
Comparaison des performances
À chaque étape, nous avons comparé les performances avant/après avec des méthodes de testes et des méthodes de calcul de temps d’exécution. Cela nous a permis de valider objectivement nos choix.
Répartition du travail en binôme
Pour rester efficaces, nous avons choisi de nous répartir les tâches de manière équitable. Cette stratégie de travail parallèle a été bénéfique pour progresser rapidement.
Tests systématiques
Nous avons décidé d’intégrer systématiquement des tests unitaires et des mesures de performance pour garantir la fiabilité et l'efficacité du programme à chaque itération.
Travail en autonomie partielle
Si nous avons pu échanger ponctuellement avec l’enseignant pour valider nos choix d’optimisation, la grande majorité du travail (analyse, recherche, implémentation) a été réalisée de façon autonome.
Forte implication personnelle
J’ai personnellement pris l’initiative d’explorer des ressources extérieures (javadoc en ligne) pour mieux comprendre comment optimiser efficacement une fonction récursive.
Esprit critique et rigueur
Nous avons toujours confronté nos choix à des mesures concrètes (temps d'exécution, nombre d'appels récursifs), ce qui nous a permis de garder une approche rigoureuse et justifiée.