Pour la 2e année consécutive, l’équipe Meritis s’est classée dans le Top 5 mondial du CodinGame Spring Challenge 2022 et s’est même hissée à la 2e place de son secteur d’activité. Cette année, 7 695 CodinGamers dont 19 consultants Meritis se sont ainsi « affrontés » virtuellement pendant 11 jours pour construire leurs algorithmes le plus efficacement possible. Nos consultants partagent les tips et les bonnes pratiques qui leur ont permis de briller.
Découvrez le classement du Codingame Spring Challenge 2022
Le thème de cette année : Spiders everywhere ! Et voici comment notre équipe, menée par Gaëtan Eleouet, a su relever le défi en utilisant pas moins de 5 langages de programmation différents (Python, Java, C++, C#, Rust, Javascript). Retour sur Codingame Spring Challenge 2022 avec Vincent Leclerc, Vincent Ernst, Didier Anderson, Yahia Ferchichi, Foucault Dupleix, Florian Talour et Guy Raymond Besseng.
un petit cadeau en bas de page vous attend 😊
Quelle méthode employer ?
Toutes les méthodes sont bonnes… ou presque. Dans une équipe de 19 développeurs, impossible de tous appliquer la même. Le plus important est donc de trouver celle qui vous convient le mieux. Toutefois, certaines bonnes pratiques peuvent vous faire gagner un certain temps et, par conséquent, quelques places au classement.
Voici deux exemples mis en œuvre par Didier Andersen et Yahia Ferchichi :
- Bien observer les algorithmes des joueurs mieux classés peut vous permettre de détecter des comportements que vous n’avez pas codés et qui fonctionnent ;
- Si vous n’êtes pas très sûr de vous, supprimer les parties de code qui ne fonctionnent pas très bien peut vous faire gagner de nombreux rangs au classement.
Dans ce genre de concours, l’anticipation est clé, comme le rappelle Vincent Ernst :
« Les premières étapes d’appréhension du sujet et des stratégies peuvent prendre quelques jours. Je recommande d’y investir au plus tôt des moyens de tests, des brouillons de conception papiers, des discussions… Par exemple, comme beaucoup, j’étais absent le premier week-end du concours. Mais savoir exactement quoi coder à mon retour a directement payé pour moi, en m’insérant dans un solide top 10 dès lundi. »
Vincent Leclerc a quant à lui opté pour une approche plus pragmatique (sans rentrer dans les détails du jeu) :
1/ Essayer sans trop réfléchir de passer les premières ligues au plus vite pour avoir l’ensemble des règles avant de réfléchir à des stratégies.
« Je pense qu’il est important d’avoir de belles structures de données pour récupérer et mettre à jour l’état du jeu, ce que j’appelle le GameState, le plus simplement possible. »
2/ Ensuite, pour chaque personnage qu’il faut contrôler, effectuer un enchainement de conditions if, else if (interminable…) pour déterminer le choix de l’action.
« Cette stratégie présente selon moi les avantages d’être rapide à mettre en place, simple à débugguer et de pouvoir ajouter de petits changements. »
En revanche, elle comporte aussi quelques inconvénients comme la mauvaise lisibilité du code (même en java !) et la difficulté à tester différentes stratégies car tout est lié.
3/ Si besoin, ajustez votre algorithme ou s’il fonctionne, appliquez la même méthode à chaque tour. Ainsi, pour Vincent, la méthode consistait à chaque tour à :
– Mettre à jour le GameState ;
– Pour chaque personnage, choisir une action en fonction du GameState.
« La méthodologie avait vocation à évoluer au fur et à mesure, mais les résultats de mon algorithme étant toujours meilleurs comme tel, la méthode (très simpliste) n’a pas évolué. »
Besoin d’inspiration ? N’hésitez pas à regarder les matchs perdus (pour débugguer, modifier légèrement votre code) et ceux des tops players (pour mettre en places de nouvelles idées, stratégies).
Comment contourner les difficultés
Inutile de préciser qu’au cours de ces 11 jours, les difficultés rencontrées ne manquent pas, à commencer par la trigonométrie, le jeu étant très dépendant de calculs de coordonnées. Mais la plus grande difficulté réside tout simplement parfois autant dans la compréhension du problème que dans sa résolution. Dans ce cas, faites comme Guy Raymond Besseng et consultez le kit de démarrage fourni.
Attention toutefois à ne pas vouloir aller trop vite comme Yahia Ferchichi, pressé de passer de la Gold League à la Legend League. N’oubliez pas que pour franchir un palier, l’exactitude est clé (au risque de vous retrouver bloqué).
Pour vous aider à franchir ces difficultés, voici les conseils de Didier Anderson :
1/ Prenez des notes de ce que vous souhaitez implémenter ;
2/ Fragmentez vos évolutions : une feature après l’autre, afin de disposer régulièrement de versions qui fonctionnent ;
3/ Pensez à vous détendre aussi, pour ne pas vous décourager.
Des conseils simples qui lui ont notamment permis de rendre son code modulaire et de pouvoir rapidement switcher sa stratégie en cours de run. Preuve à l’appui, voilà ce que ça donne en termes de code :
public static void runTour(Input input,int tour){
/* monstre le plus proche de la base */
int[][] distanceMinBase = monstreLePlusProche(input, baseX, baseY,maxX,false);
/* hero 1 fait grosse def */
String hero1 = defStrat(input,distanceMinBase[0],input.myHeroes[0]);
/* hero 2 middle range */
String hero2 = midStrat(input,distanceMinBase[0],input.myHeroes[1]);
/* hero 3 long range */
String hero3;
if(tour<100){
hero3= forwardStrat(input,distanceMinBase[0],input.myHeroes[2]);
}else{
hero3= attStrat(input,distanceMinBase[0],input.myHeroes[2]);
}
System.out.println(hero1);
System.out.println(hero2);
System.out.println(hero3);
}
Le truc en plus de ce Codingame 2022
Difficile de garder la motivation encore et toujours jusqu’à la dernière minute malgré les échecs répétitifs et les soirées passées à coder dans le vent. Surtout quand, en parallèle, vous voyez votre classement baisser. Mais il faut garder la tête froide, car il suffit d’une seule bonne idée parmi des dizaines d’échecs pour vous faire gagner énormément de place.
Un conseil qu’aurait dû appliquer Florian Talour en prévoyant un créneau par jour pour améliorer son code.
Si là aussi, chacun a sa petite astuce, voici en synthèse quelques-unes des plus efficaces :
1/ Organisez-vous
Tout au long du concours, surviennent des tas d’idées de petites choses à faire. Plutôt que de les retranscrire sur une feuille, vous pouvez, comme Foucault Dupleix, les noter en haut de votre code, en commentaire précédé de TODO, pour les retrouver entre deux sessions de codage. Par exemple :
- // TODO VOIR QUAND SE SHIELDER en défense
- // TODO quand araignée va mourir (life <= 2), se mettre à 799 de distance
- // TODO optimiser les directions de vent de défense
- // TODO Si distance baseEnn < 2500 et pas de bouclier, on souffle pour marquer direct
- // TODO, les araignées controlées en défense doivent être ignorées pendant 2 tours
- // TODO, controller l’advsersaire pour l’envoyer exactement à 22OO.
2/ Inspirez-vous des meilleures techniques observées
Comme évoqué dans la méthodologie, il est essentiel d’observer ce que font les autres pour détecter les meilleures pratiques et les reproduite, voire les améliorer. C’est ce qu’a fait notamment Vincent Leclerc : « En visualisant certaines parties, j’ai trouvé la technique du double WIND, que certains adversaires appliquaient, très belle. Elle permet de manière quasi sûre de pouvoir envoyer des araignées non pas à des distances de 2200 mais de 4400 en appliquant 2 fois de suite le sort WIND. Cela permet de marquer à coup sûr si l’ennemi n’a aucun défenseur prêt pour cette attaque, ou du moins d’envoyer le défenseur ennemi loin dans ses retranchements. »
3/ Testez, contrôlez et avisez
Il est rare de trouver la solution du premier coup. C’est pourquoi, il faut souvent y aller pas à pas pour avancer plus vite. Vincent Ernst recommande ici deux techniques en particulier :
- La 1re consiste à simuler et à tirer des coups sur deux ou trois tours de profondeur et évaluer le résultat ;
- La 2e est intéressante lorsque vous êtes bloqué :
« Souvent on ne sait plus par où prendre le problème ou on a plus aucune piste. Je conseille alors d’abord de faire un coup de ménage refacto. Ensuite, faire des tests et observer les mécaniques du jeu. Cette technique permet petit à petit d’ouvrir plus de possibilités, car une fois le moteur du jeu bien compris et codé, on peut se permettre de gérer des calculs sur des stratégies de plus en plus poussées. Petit à petit, on peut construire une sorte de boîte à outil de calcul en dehors de l’algorithme. »
Quoi de mieux qu’un (petit) bout de code pour mieux comprendre ?
Vivre l’expérience Codingame 2022
Malgré la fatigue, le stress, les erreurs… Codingame reste une expérience incroyable et une aventure humaine avant tout.
Participer au Codingame Spring Challenge 2022, c’est :
- Frustrant, comme toujours quand on passe des heures à corriger des bugs Passionnant, car le jeu est fun et permet de tester beaucoup d’idées ;
- Enrichissant, car l’équipe de Meritis avec laquelle partager ses idées, ses joies et ses peines tout au long de la compétition est très présente ;
- Frustrant, comme toujours quand on passe des heures à corriger des bugs pour qu’au final le résultat soit moins bon qu’avant ;
- Immersif, quand on sait que le peu de temps libre qu’on a, on essaie de le consacrer au challenge !
- Excitant, de voir son classement monter et de finir dans le Top 5 mondial ;
- Hyper motivant, grâce à l’entraide de toute l’équipe via Discord.
Retour d’expérience : concours salaire-in-game
Didier Andersen, consultant chez Meritis dévoile les coulisses du concours salaire in Game. Découvrez ses méthodes de calcul et explications.
5ème mondial au concours Spring Challenge Codingame
La team Meritis a participé du 21 avril au 2 mai dernier au CodinGame Spring Challenge 2022 et se hisse à la 5ème place du podium.
Crack The Captcha Challenge © – Les éléments de résolution
Crack The Captcha Challenge est un concours qui consistait à cracker 10 000 captchas par programmation en 2 heures !
Pas encore de commentaires