Développement applicatif

Les clés de succès du Codingame Spring Challenge

Publié le 25/05/2021 Par Meriteam

Langage, méthode, difficulté, conseils… Notre top cinq a accepté de jouer le jeu et nous livre les tips qui leur ont permis de relever le défi Photosynthesis…

Spring Challenge, le concours international de code organisé par Codingame, vient de se terminer. Pendant 10 jours, pas moins de 16 882 participants de 200 entreprises du monde entier se sont ainsi « affrontés » autour d’un thème inspiré du jeu de société Photosynthesis. Très beau succès collectif remporté par Meritis qui s’est hissée à la 3e place ! Retour sur cette expérience incroyable avec les cinq premiers joueurs de notre équipe : Vincent Leclerc, Vincent Ernst, Gaëtan Eleouet, Foucault Dupleix et Slim El Aoud.

Découvrez le classement du Codingame Spring Challenge

À quoi ressemble alors un concours international vécu de l’intérieur ? Langage, méthode, difficulté, conseils… Notre cinq majeur a accepté de jouer le jeu et nous livre les tips qui leur ont permis de relever le défi Photosynthesis. Le concept est d’analyser, tour par tour, des actions différentes : planter des graines, faire pousser des arbres, abattre des arbres, dormir… 

Quel langage utiliser ?

Le plus important est de choisir le langage avec lequel vous vous sentez le plus à l’aise pour mieux appréhender un sujet souvent complexe. Ainsi, Java, facile à lire et à debugger, est très apprécié pour débuter la compétition, tout comme Python, lui aussi intuitif et très abordable.

Ensuite, les langages de type C (C#, C++) vous permettront d’obtenir de meilleures performances, notamment pour les solutions type stochastiques et calculatoires.

L’avantage de ces langages repose sur leur simplicité et par conséquent leur accessibilité aux profils moins experts en programmation. Deux qualités qui permettent de contrecarrer certains points faibles (comme le manque de vitesse de calcul).

À chacun sa méthode

Malgré son côté fun, le Codingame nécessite une forte implication dès lors que l’on souhaite le faire sérieusement, à l’image de Foucault Dupleix dont c’était la 3e participation et qui n’a pas hésité à consacrer une trentaine d’heures au concours. Vincent Leclerc, quant à lui, a passé pas moins de 50 h à coder.  

C’est pourquoi une méthode finement rôdée vous permettra de gagner un temps précieux et de maintenir votre motivation au top tout au long du projet. S’il est toutefois impossible de définir une seule méthodologie, voici quelques bonnes pratiques mises en œuvre par notre équipe et qui ont fait leurs preuves.

1) Prenez le temps de vous lancer

Avant de vous jeter à corps perdu dans le code, assurez-vous de bien comprendre les règles. N’hésitez pas à les lire et à les relire de nombreuses fois pour être certain de ne passer à côté d’aucun élément de base. En moins de 24h, vous devez pratiquement tout connaître par cœur pour éviter de renouveler cette démarche par la suite. Ce temps nécessaire à la compréhension vous permettra d’avancer plus rapidement par la suite, donc ne le sous-estimez pas.

2) Débutez simple et montez progressivement en difficulté

Mieux vaut commencer avec un code très simple et qui fonctionne, et envisager ensuite les axes d’amélioration que de partir directement avec un algorithme très ambitieux. Le code doit donc être simple et les structures bien définies. Il est toujours plus motivant de voir les progrès réalisés chaque jour que de se lancer dans un code trop ambitieux qui vous bloquera. Profitez-en aussi pour établir des fonctions de base que vous pourrez réutiliser plus tard quelle que soit votre stratégie.

3) Communiquez et échangez tout au long du concours

Si chaque joueur développe selon sa propre stratégie, le Spring Challenge se joue en équipe. En effet, pour établir le classement final, Codingame fait la somme des points des cinq premiers joueurs de chaque entreprise. C’est pourquoi il est essentiel de ne pas se la jouer solo et d’être en permanence en contact avec les autres membres de votre équipe, même à distance !

Pendant les 10 jours de concours, les 25 membres de l’équipe Meritis échangeaient quotidiennement via un chat dédié sur Discord. Au programme : mcts, rollout, dummy, etc. L’occasion de bénéficier des conseils des meilleurs joueurs et de visionner les replays des parties jouées. À la clé : détecter les erreurs, les bugs ou les optimisations, et définir les astuces à appliquer ou les comportements à modifier. Idéal pour progresser plus vite.

4) À vous de jouer

Enfin, à vous de définir votre propre feuille de route selon vos appétences, votre maîtrise de la programmation… Il n’y a pas de voie toute tracée. Parfois les stratégies les plus basiques mènent aux résultats les meilleurs.

Prenons l’exemple de la méthode appliquée par Vincent Leclerc. Pour déterminer quelle action réaliser, il a récupéré toutes les actions possibles à effectuer pour les classer en 4 catégories : COMPLETE – GROW – SEED – WAIT. Chaque liste d’actions récoltées a été classée à l’aide d’une fonction d’évaluation. Cette fonction avait pour unique but de voir combien de mana une action rapportait. Pour illustrer sa démarche, voici un bout de code portant sur son évaluation pour les actions de type GROW :

Les difficultés à surmonter

Le jeu Photosynthesis n’est pas simple à maîtriser ! Même en analysant longuement certaines parties, difficile de déterminer quelle position était la meilleure mais aussi de corriger les bugs, de réaliser un changement ou de tester une autre option algorithmique. Résultat, parfois une journée de développement perdue à tenter une autre stratégie et à procéder à un rollback pour rétablir la version précédente, plus performante.

Toutefois, l’un des principaux intérêts du jeu est d’apprendre de ses erreurs et de partager ses astuces ! La satisfaction finale n’en a été que plus importante. Comme le dit Gaëtan Eleouet : « Un vrai succès individuel rendu possible par une superbe équipe. »

Les tips de nos consultants

En démarrant le concours le plus tôt possible, vous mettez alors toutes les chances de votre côté pour surmonter ces difficultés et avoir le temps nécessaire pour aller jusqu’au bout. Mais comme toute épreuve, il faut tenir le rythme sur la distance. Alors, alternez les phases de codage et de repos / réflexion pour analyser et penser différemment.

Voici deux astuces concrètes mises en œuvre par deux membres de notre équipe.

Gaëtan Eleouet :

Ces quelques lignes de code lui ont permis d’écrire à chaque tour de jeu, l’état complet du jeu dans la console sous forme condensée. La possibilité pour lui ensuite de recopier et de décoder l’état complet dans son éditeur en local et de débugger les comportements qui lui semblaient suspects. Pouvoir debugger en local en fin de compétition est un must et rendu possible avec un léger investissement en début de concours !

Vincent Ernst :

Il a utilisé la programmation orientée objet standard pour les algorithmes de recherche stochastiques. Une de ses astuces a été de créer et de réutiliser des objets en externe. Par exemple, il a regénéré dans ses simulations les coups qu’aurait effectué son ancien robot en dummy :

La méthode allAction() remplit alors un tableau de coups valide en parcourant ses arbres et au passage, précalcule des objets grow, complete et seed. Ces objets sont créés au tour 1, puis recyclés à chaque tour. Il profite ainsi de la clarté de la POO sans dépiler des milliers d’objets et économiser des tests null.

Malgré les heures passées et les difficultés, tous conservent de cette expérience l’opportunité qu’elle offre de se dépasser à chaque tour. Pour Slim El Aoud, déjà participant solo à un précédent Codingame, l’édition 2021 a été une première en équipe… mais certainement pas une dernière. « Le fait de travailler dans une équipe et de représenter une entreprise donne beaucoup plus de motivation et de détermination pour être mieux classé. »

Rendez-vous au prochain Codingame !

Lire aussi : Meritis décroche la 3ème place mondiale du concours Spring Challenge de Codingame

Pas encore de commentaires

Publier un commentaire