Mathis Hammel Profile picture
Apr 23, 2022 80 tweets 25 min read Read on X
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

Jun 20
J'en ai trop marre de voir des smicards pleurer pour qu'on augmente pas les impôts des millionnaires.

J'ai gagné un peu plus de 7000€/mois pendant plusieurs années, si tu te considères pas riche à ce niveau c'est du déni ou de la malhonnêteté. Thread ⤵️
J'aime pas trop parler d'argent ici parce que ça peut passer pour de l'orgueil, mais on voit tellement de conneries se propager en ce moment que je me suis senti obligé de partager mon expérience (je supprimerai probablement le thread d'ici quelques jours)
Commençons par "tu t'offres un ou deux resto par mois" : je mange au resto quasiment chaque midi en semaine.

Le soir j'aime bien cuisiner, jamais aucune hésitation avant de prendre des produits bio ou premium.
Read 10 tweets
Mar 29
THREAD - les manipulations illicites du classement lors de la compétition la plus chère d'Europe.

Cette semaine, l'équipe de l'European Cyber Cup a trafiqué arbitrairement son scoreboard pour favoriser certaines équipes qui lui faisaient pression. 1/14 Image
Je suis coach de 10 étudiant·es de @Guardia_School qui ont participé cette semaine aux épreuves de l'European Cyber Cup.

Cette compétition est organisée par le forum InCyber (anciennement FIC, qui a discrètement changé de nom à cause de quelques casseroles).
Le prix d'inscription n'est pas rendu public, mais en 2021 je me souviens que mon entreprise avait dû payer 10.000€ pour nous inscrire, sachant que le cash prize pour l'équipe gagnante est de 5.000€ 🙃 Image
Read 16 tweets
Feb 8
J'ai besoin de votre aide pour m'aider à entraîner l'équipe de France de cybersécurité !

Quelques détails ci-dessous, merci de partager au maximum 🙏
En janvier, j'ai eu l'honneur d'être nommé entraîneur des compétiteurs français en cybersécurité, pour la prestigieuse compétition WorldSkills qui opposera 65 pays cette année.
Contrairement aux excellentes compétitions FCSC/ECSC qui sont très orientées CTF, le challenge WorldSkills va plutôt demander des compétences métier, appliquées à des environnements réalistes.
Read 6 tweets
Nov 8, 2023
THREAD

Je me suis intéressé à la cybersécurité de Crush, l'appli de rencontres pour 10-21 ans qui fait beaucoup de bruit.

J'y ai découvert un réseau de sociétés fictives qui récolte activement les données de dizaines de milliers de mineur·es. Explications ⤵️ Capture de l'appli "Crush, trouve ton crush secret" sur le store iOS.
PARTIE 1. Le fonctionnement de l'appli

Crush est une appli dont le but est de découvrir ses admirateurs secrets au collège/lycée.

Elle a été renommée "Friendzy, sondages entre amis" depuis son bad buzz.
Le principe est simple : après avoir ajouté vos amis sur l'appli, vous répondez à des questions sur vos liens d'amitié.

Dans un autre onglet, vous pouvez savoir ce que les gens ont répondu sur vous, sans voir leur nom. Sondage "La discrétion est son superpouvoir" avec 4 choix parmi mes amis sur l'appli (j'ai masqué deux noms qui appartiennent potentiellement à des vraies personnes)
Read 24 tweets
Aug 1, 2023
Droite au Coeur est toujours en maintenance, mais j'ai réussi à contourner la fermeture de l'authentification donc j'ai toujours accès au site.

La vulnérabilité initiale a été corrigée, je peux donc légalement vous expliquer la pire faille de sécurité du monde. 🧵1/9
L'interface de Droite au Coeur, comme beaucoup de sites web depuis ~2010, est dynamique.

Cela signifie que votre navigateur va d'abord télécharger le code qui gère l'affichage de la page, mais sans télécharger le contenu.

Pendant qq secondes, la page ressemble en gros à ça : Image
C'est ce squelette de page qui va ensuite faire d'autres requêtes pour récupérer le contenu, ici les profils de dating.

Pour ça, l'interface va utiliser une API : c'est un programme hébergé côté serveur, qui va récupérer et formater les données qu'on lui demande. Image
Read 10 tweets
Jul 17, 2023
🧶THREAD - Un programme de 15 lignes de code Python arrive à rivaliser avec les meilleures intelligences artificielles !

Cette drôle de découverte vient d'être publiée par une équipe de chercheurs canadiens, et risque de bouleverser le monde du Machine Learning.

Explications ⤵️ "Qui gagne ?"  À gauche, un réseau de neurones ultra perfectionné avec 340 millions de paramètres  À droite, 15 lignes de Python
La classification de texte est l'un des domaines de recherche les plus actifs en intelligence artificielle : elle consiste à trier automatiquement des textes courts dans un ensemble de catégories pré-définies. Quelques phrases classées par catégorie :  Le briquet a été inventé 3 ans avant l'allumette (Histoire)  Les crocodiles ne peuvent pas tirer la langue (Nature)  Le miel ne périme jamais (Cuisine)  Les amandiers et les pêchers sont dans la même famille d'arbres (Nature)  (Instant culture inutile : toutes ces phrases sont vraies)
Pour évaluer la performance d'un modèle, on va travailler avec des datasets spécifiques.

L'un des plus connus est basé sur 1.4 millions de questions posées sur le site Yahoo Answers, réparties en 10 catégories : Plusieurs questions triées dans un tableau par catégorie. Voici par exemple les questions de la catégorie "Société" :  Comment ont été inventés les gros mots ? Comment devenir gothique ? SI DIEU NOUS A FAIT QUI A FAIT DIEU !? Est-ce que bisexuel est plus fun ? Croyez-vous en le nouvel an chinois ? Sens de la vie ?  (oui, ces questions existent vraiment dans le dataset)
Read 33 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!

:(