Catégories
Evénements en ligne Informaticiens et développeurs

Les concours de code / algo : je m’y mets ?

Quel meilleur moyen de s’échapper un peu de ces temps étranges que de se lancer des défis personnels ? Se (re)mettre au piano, enfin lire ces 20 livres achetés l’an dernier, apprendre une langue… Développeur (pro, amateur ou étudiant) et en manque d’idée de challenge ?

Et pourquoi pas essayer les compétitions d’algorithmique !? 💻

pexels-photo-171198

 

Algorithmique ?

Derrière un nom effrayant, des possibilités infinies de faire travailler son cerveau 🤯 et d’apprendre plein de choses en s’amusant : une série de problèmes vous sera donnée, et vous devrez coder un programme pour chaque problème. Trouver le chemin le plus court d’un labyrinthe 🚀, établir la stratégie optimale pour tricher à un jeu de cartes…

Il va falloir être créatifs, et rapides ! 😄

Par où commencer ?

Beaucoup de plateformes et de compétitions existent : BattleDev, Codejam (c’était dernièrement !), ou encore Codingame, il y en aurait presque trop. Débutant 🎓, confirmé 👴🧓, ou voulant s’y remettre, nous vous avons déniché un concours parfait pour tous les niveaux : le 30-Day LeetCoding Challenge.

Tous les jours à 9h sur tout le mois d’avril, un nouvel exercice à résoudre en 24h ⏱ est publié sur la plateforme LeetCode. Les problèmes sont suffisamment abordables pour être résolvables en maîtrisant seulement les bases de l’algorithmique ainsi que votre langage de programmation favori. Pour les plus aguerris, il vous faudra optimiser votre solution pour avoir l’algorithme le plus rapide et utilisant le moins de mémoire !

Premier challenge

Pour vous donner un avant goût, nous allons résoudre ensemble le premier exercice publié dans ce challenge. Voilà l’énoncé 🧐 :

Étant donnée une liste d’entiers, tous les éléments sont présents en double sauf un qui est unique. Trouvez cet élément. Exemple :

Input: [1,2,2,4,1]

Output: 4

Choisissez votre langage favori et essayez d’écrire un programme qui répondra à l’énoncé !

pexels-photo-356043

C’est bon ? Nous allons maintenant présenter rapidement 3 résolutions différentes, en optimisant de mieux en mieux les performances de l’algorithme 👍

 

Solution 1

La première solution consiste à avoir une liste, où l’on va stocker les éléments que l’on voit pour la première fois. La deuxième fois qu’on les voit, on les retire de la liste. Il ne restera dans cette liste que l’unique élément, qui est celui que nous recherchons !

Une implémentation Python 🐍 :

ConcoursCode01

Solution 2

La solution 1 est relativement simple, mais il y a mieux. Pourquoi ne pas utiliser un peu de maths ?

Tous les éléments apparaissant en double sauf un, la formule suivante peut nous aider à retrouver l’élément unique (une bonne équation vaut mieux qu’un long discours) :

2∗(a+b+c)−(a+a+b+b+c)=c

Ce qui nous donne la fonction suivante :

ConcoursCode02

Élégant non ?

 

Solution 3

Il y a encore mieux ! La solution 2 est en O(n) en complexité temporelle, et en O(n) également en complexité spatiale. La solution optimale est toujours en O(n) en temporel… mais O(1) en spatial.

Essayez de trouver une solution par vous-même avant de lire celle qui suit. (attention, elle est difficile 🤯 à trouver !)

ConcoursCode03

Vous avez compris cet algorithme, ou encore mieux, trouvé un algorithme de complexité équivalente ?

Félicitations 💪, les autres exercices n’auront aucun secret pour vous ! Et pour les autres, le LeetCoding challenge est une opportunité parfaite de vous entraîner sur ce genre de problèmes fréquemment posés aux entretiens d’embauche de Google et bien d’autres.

 

Envie d’essayer ?

Cela vous a donné envie de vous y mettre ? 👉 Foncez sur leetcode.com !

Et pour de l’aide, discuter de vos solutions ou découvrir les solutions des meilleurs joueurs de France 😎, nous avons créé un channel dédié sur notre serveur Discord que nous vous invitons à rejoindre ici.

Si le sujet vous intéresse ou vous a rendu curieux d’en savoir plus, que diriez-vous d’en discuter directement avec nous lors d’un prochain Apéro discussion des Déconfinés de l’IT 👉 Dites-le nous en commentaire pour que l’on puisse l’organiser prochainement 😊

pexels-photo-3760259

 

Auteurs : Clément & Mathis HAMMEL | Programmeurs compétitifs et organisateurs de challenges techniques

ClémentHammel MathisHammel

Deux frères passionnés d’informatique, nous avons décroché plusieurs titres nationaux et internationaux en participant à diverses compétitions et hackathons : BattleDev, Meilleur Dev de France, championnats d’Europe d’algorithmique, équipe de France de cybersécurité…

Pour faire de notre passion un métier, nous avons fondé h25 une startup spécialisée dans l’organisation de compétitions de code et de cybersécurité. Nous animons aussi régulièrement des activités auprès de notre communauté, par exemple des streams sur YouTube ou des meetups.

Par Sylvain Lareyre

Chasseur de Talents IT & Co-fondateur du Cabinet de recrutement JobOpportunIT

Après un M2 MIAGE et plusieurs années comme développeur Java/JEE, j’ai basculé côté recrutement et j’ai adoré ce métier !

Meilleur Sourceur de France #RMSConf en 2014, je suis aujourd’hui multi-casquettes : chasseur de têtes, formateur en sourcing pour les entreprises, enseignant dans différentes écoles, animateur d’événements et blogueur quand j’en ai le temps 😉

2 réponses sur « Les concours de code / algo : je m’y mets ? »

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.