Programmation compétitive

Two men sitting at desks with a computer and papers sprawled on them.
Petr Mitrichev (à gauche) et Gennady Korotkevich (à droite), deux programmeurs compétitifs de premier plan lors de la coupe d'algorithmes Yandex 2013.

La programmation compétitive ou programmation sportive est un sport intellectuel dans lequel les participants essayant de programmer selon des contraintes fournies. Les concours se déroulent généralement directement sur Internet ou en physique connecté sur un réseau local. La programmation compétitive est reconnue et soutenue par plusieurs sociétés multinationales de logiciels et d'Internet, telles que Google,[1],[2], Meta[3] ou encore Huawei[4] mais également par des sociétés financières comme Jane Street[4] ou encore Citadel Securities (en)[4].

Lors d'une compétition de programmation compétitive l'organisateur propose généralement un ensemble de problèmes logique ou mathématiques aux candidats (dont le nombre peut varier de dizaines, voire de centaines, à plusieurs milliers). Les candidats doivent écrire des programmes informatiques capables de résoudre ces problèmes, dans la majorité des cas les candidats soumettent leurs programmes à une banque de donnée de tests cachés. Le jugement est principalement basé sur le nombre de problèmes résolus et le temps passé à rédiger des solutions efficaces, mais peut également inclure d'autres facteurs (qualité du résultat produit, temps d'exécution, utilisation de la mémoire, taille du programme, etc.).

Histoire

L'un des plus anciens concours connus est le International Collegiate Programming Contest (ICPC), né dans les années 1970 [5] et qui s'est développé pour inclure 88 pays dans son édition 2011.

De 1990 à 1994, Owen Astrachan, Vivek Khera et David Kotz ont organisé The internet programming contest, l'un des premiers concours de programmation distribués sur Internet, inspiré d'ICPC.[6]

L'intérêt pour la programmation compétitive a considérablement augmenté depuis 2000, atteignant des dizaines de milliers de participants et est fortement lié à la croissance d'Internet, qui facilite l'organisation de concours internationaux en ligne permettant instantanément à un grand nombre de personnes pouvant participer.

Aperçu

L’objectif de la programmation compétitive est d’écrire des programmes informatiques capables de résoudre des problèmes donnés. La grande majorité des problèmes apparaissant dans les concours de programmation sont de nature mathématique et/ou logique. Ces tâches typiques appartiennent souvent à l'une des catégories suivantes : combinatoire, théorie des nombres, théorie des graphes, théorie algorithmique des jeux, géométrie algorithmique, chaîne de caractères, mathématiques discrètes et structures de données .[7] Les problèmes liés à la programmation par contraintes et à l’intelligence artificielle sont également populaires dans certaines compétitions.

Quelle que soit la catégorie du problème, le processus de résolution d'un problème peut être divisé en deux grandes étapes : la construction d'un algorithme efficace et l'implémentation de l'algorithme dans un langage de programmation approprié (l'ensemble des langages de programmation autorisés varie d'un concours à l'autre). Ce sont les deux compétences les plus couramment testées dans les concours de programmation.

Dans la plupart des concours, le jugement est effectué automatiquement par des machines hôtes, communément appelées juges. Chaque solution soumise par un candidat est soumise au juge par rapport à un ensemble de cas de test (généralement secrets). Normalement, les problèmes de concours ont un système de notation tout ou rien, ce qui signifie qu'une solution est « acceptée » uniquement si elle produit les résultats attendu sur tous les cas de test exécutés par le juge et est rejetée dans le cas contraire. Cependant, certains problèmes de concours peuvent permettre une notation partielle, en fonction du nombre de cas de test réussis, de la qualité des résultats ou d'autres critères spécifiés. Certains autres concours exigent uniquement que le candidat soumette la sortie correspondant aux données d'entrée données, auquel cas le juge n'a qu'à analyser les données de sortie soumises.

Les juges en ligne sont des environnements dans lesquels les tests ont lieu. Les juges en ligne disposent de listes de classement indiquant les utilisateurs ayant le plus grand nombre de solutions acceptées et/ou le temps d'exécution le plus court pour un problème particulier mais également à titre indicatif le nombre de caractères utilisé pour répondre au problème.[8]

Compétitions notables

Concours d'algorithmes

Nom du concours[9] Organisateurs Public Description Nombre de participants Status
Google Code Jam (GCJ) Google Ouvert Concours annuel organisé et sponsorisé par Google de 2003 jusqu'à son annulation en 2023.[10] 32 702 (2022)[11] Inactif
Concours international de programmation collégiale (ICPC)[12] Fondation ICPC étudiants universitaires Compétition par équipes pour étudiants universitaires, le concours se compose de plusieurs épreuves régionales qui se concluent par une finale mondiale organisée chaque année. Les équipes sont composées de trois étudiants de la même université et ils ne sont autorisés à utiliser qu'un seul ordinateur.[13] 50 000+ (2022)[14] Actif
Olympiade internationale d'informatique (IOI) IOI élèves du secondaire Concours international pour les élèves du secondaire. Organisé chaque année depuis 1989. Chaque pays peut envoyer au maximum 4 participants pour concourir. 349 de 88 pays (2022)[15] Actif
Meta Hacker Cup (anciennement Facebook Hacker Cup ) Méta-plateformes Ouvert Concours annuel organisé depuis 2011. Organisé et sponsorisé par Meta (anciennement Facebook ). 27 604 (2022)[16] Actif
Topcoder Open (TCO) Topcoder Ouvert Concours annuel d'algorithmes organisé de 2001 jusqu'à son annulation en 2023 [17] Inactif
M(IT)^2 MIT Ouvert Concours annuel d'algorithmique organisé depuis 2024. Organisé par l'association M(IT)^2 du MIT.[18] Actif
Prologin Prologin Ouvert Concours national d'algorithmique organisé par l'association Prologin en France depuis 1996. L'un des plus vieux concours encore actif.[19] Actif

Dans la plupart des compétitions ci-dessus, les compétitions sont généralement organisées en plusieurs tours. Ils commencent généralement par des qualifications en ligne, qui se terminent par une finale en présentiel. Les meilleurs élèves de l'IOI et de l'ICPC reçoivent des médailles d'or, d'argent et de bronze. Dans les autres concours, des prix en espèces sont attribués aux meilleurs. Les concours suscitent également l’intérêt des recruteurs de nombreuses sociétés de logiciels, qui contactent souvent les concurrents avec des offres d’emploi potentielles.

Intelligence artificielle et apprentissage automatique

  • La liste peut être incomplète
Nom Principaux organisateurs Description Statut
Kaggle Google Plateforme de compétition et communauté en ligne en science des données, apprentissage automatique et optimisation. Actif
AI Challenge Université de Waterloo Concours international de programmation en intelligence artificielle qui s'est déroulé de 2009 à 2011. Inactif
Halite AI Programming Competition Two Sigma, Cornell Tech Concours de programmation informatique où les participants construisent des robots dans le langage de programmation souhaité pour concourir sur un champ de bataille en deux dimensions. Inconnu
Russian AI Cup Mail.Ru Group, My.com Concours annuel de programmation en intelligence artificielle. Inconnu

Concours axés sur les technologies open source

  • La liste peut être incomplète
Nom du concours Sponsor principal Description Création Se déroule en Statut
Multi-Agent Programming Contest Université de technologie de Clausthal en collaboration avec des ateliers axés sur les agents Concours international annuel de programmation pour stimuler la recherche dans le domaine du développement et la programmation de systèmes multi-agents . Septembre Inactif
Google Summer of Code Google Inc. Un programme annuel dans lequel Google attribue des bourses à des centaines d'étudiants qui terminent avec succès un projet sur un logiciel libre/open source développer durant l'été.[20] Mars-aout Actif
Google Highly Open Participation Contest Google Inc. Un concours organisé par Google en 2007-2008 destiné aux lycéens. Le concours est conçu pour encourager les lycéens à participer à des projets open source. Novembre-février Inconnu

Plateformes en ligne

La communauté de programmation du monde entier a créé et maintenu plusieurs ressources Internet dédiées à la programmation compétitive. Ils proposent des concours pouvant pour certain être directement créer par la communauté avec ou sans prix. Les utilisateurs se verront habituellement attribuer une note en fonction de leurs performances. Ils proposent également de pouvoir lancer des archives de concours à volonté, ce qui est une méthode privilégiée par les compétiteurs pour s'entrainer. Il existe plusieurs organisations proposant régulièrement des concours de programmation.

Nous pouvons penser à:

Name Description
Advent of Code Un concours de programmation annuel qui se déroule pendant l'Avent, avec une nouvelle paire d'énigmes publiées chaque jour, jusqu'au jour de Noël inclus. Le deuxième problème de chaque jour est bloqué jusqu'à ce que la première partie soit terminée, il en est généralement la suite logique. Il existe des classements mondiaux et privés pour chaque année, dans lesquels le classement est basé sur le premier à résoudre le problème.
CodeChef[21],[22] Gérer par Unacademy, fournit gratuitement une plateforme d'hébergement de concours aux établissement d'enseignement mais également des cours afin de se perfectionner.
Codeforces[23],[21] Plateforme russe, gérée par l'université ITMO, qui propose des concours fréquents (jusqu'à deux par semaine) d'une durée de 2 à 3 heures (disponibles en anglais et en russe). Les utilisateurs peuvent également participer à des concours publiés par d'autres utilisateurs dans la section « gym », soumettre des cas de test supplémentaires pour « pirater » les soumissions d'autres concurrents pendant les concours, écrire des blogs pour partager des techniques entre eux et voir le code source des solutions d'autres utilisateurs. Les concurrents qui obtiennent une note suffisamment élevée peuvent se voir accorder des fonctionnalités supplémentaires, comme la possibilité d'ajouter des étiquettes aux problèmes et de proposer des ensembles de problèmes dans le cadre de concours officiels.
CodinGame Puzzles (avec des difficultés croissantes), code golf. Organise régulièrement des concours en ligne. Propose également des compétitions courtes Clash of Code permettant à un maximum de 8 joueurs de s'affronter en ligne dans 3 modes de jeux différents (Taille de Code, Rapidité et Reverse) durant au maximum 15 minutes.
HackerEarth[21] Basé à Bangalore en Inde, qui propose un environnement permettant de proposer des tests techniques dans le cadre d'évaluation de recrutement.
HackerRank HackerRank propose des problèmes de programmation dans différents domaines de l'informatique. Il organise également des Codesprints annuels qui permettent de mettre ne relation les codeurs et les startups de la Silicon Valley.
LeetCode LeetCode a plus de 2 300 problèmes qui couvrent de nombreux principes et offres des compétitions mensuel et bi-mensuel. Les sujets sont proposé en anglais et en mandarin.
Project Euler[22] Contient une grande collection de problèmes mathématiques informatiques (qui ne sont pas directement liés à la programmation mais dont la résolution nécessite souvent des compétences en programmation). Contrairement à d'autres juges en ligne, le code sources n'est pas nécessaire pour soumettre des solutions. Pour chaque problème nous avons une entrée généralement imposante et nous devons retourné un fichier qui contient les réponses de ce problèmes. Cela permet de laisser une liberté aux candidats dans les approches pour le résoudre.
SPOJ[21] Plateforme polonaise qui offre de nombreux problèmes et fournit une plateforme afin d'héberger leurs concours de programmation.
Topcoder[23],[21] Ressource et entreprise américaine qui organise des concours et fournit également des problèmes industriels en tant que travailleur indépendant. Elle propose des dizaines de concours courts et plusieurs longs (« marathons ») chaque année. Particularité : les participants ont la possibilité de vérifier l'exactitude des solutions des autres concurrents après la phase de codage et avant le test automatique final (appelé « Challenge phase »).
UVa Online Judge[23],[21] Ouvert en 1995, il s'agit de l'un des plus vieux site web dédié à la programmation sportive. Contient plus de 4 500 problems.
Kattis[24] Contient exclusivement des problèmes issues de compétition passé. Permet de créer des concours en le composant de problème issue d'autres compétitions.
France IOI[25] Est une plateforme française destinée à l'apprentissage de la programmation sportive orientée vers la préparationaux olympiades et concours informatiques comme IOI.

Avantages et critiques

La participation à des concours de programmation peut accroître l’enthousiasme des étudiants en informatique . Les compétences acquises lors des concours de programmation de type ICPC améliorent également les perspectives de carrière, car elles aident à réussir les « entretiens techniques », qui demandent souvent aux candidats de résoudre sur place des problèmes de programmation et d'algorithmique complexes[23],[26].

La programmation compétitive a également fait l’objet de critiques, notamment de la part des développeurs de logiciels professionnels.[27] Un point critique est que de nombreux concours de programmation rapides enseignent aux concurrents de mauvaises habitudes de programmation et un mauvais style de code (comme l'utilisation inutile de macros, le manque d'abstraction et de commentaires POO, l'utilisation de noms de variables courts, etc.).[28],[27] De plus, en proposant uniquement de petits puzzles algorithmiques avec des solutions relativement courtes, les concours de programmation comme l'ICPC et l'IOI n'enseignent pas nécessairement de bonnes compétences et pratiques en ingénierie logicielle, car les vrais projets logiciels comportent généralement plusieurs milliers de lignes de code et sont développés par de grandes équipes sur de longues périodes.[27] Peter Norvig a déclaré que, selon les données disponibles, le fait d'être gagnant d'un concours de programmation était corrélé négativement avec la performance d'un programmeur dans son travail chez Google (même si les gagnants du concours avaient plus de chances d'être embauchés).[29]

Un autre sentiment est que plutôt que de « perdre » leur temps à se livrer à une concurrence excessive en résolvant des problèmes avec des solutions connues, les programmeurs de haut niveau devraient plutôt investir leur temps dans la résolution de problèmes appartenant au monde de la recherche.[27]

Littérature

  • Halim, S., Halim, F. (2013). Competitive Programming 3: The New Lower Bound of Programming Contests. Lulu.
  • Laaksonen, A. (2017). Guide to Competitive Programming (Undergraduate Topics in Computer Science). Édition : Springer International
  • Xu, X. (2020) Le développement, la prospérité et le déclin de l'olympisme en informatique . Publié en ligne .
  • Kostka, B. (2021). Sports programming in practice. Université de Wrocław.
  • Christoph Dürr, Jill-Jênn Vie (2016) Programmation efficace - 128 algorithmes qu’il faut avoir compris et codés en Python au cours de sa vie. Édition : ELLIPSES[30]

Voir aussi

Références

  1. « Google Code Jam » [archive du ], google.com (consulté le )
  2. « TCO12 Sponsor: Google - TCO 12 » [archive du ], topcoder.com
  3. « Facebook Hacker Cup », Facebook (consulté le )
  4. a b et c (en-US) « Sponsors 2024 | ICPC EUC | EUC ICPC » (consulté le )
  5. Li, Choi, Chung et Kushman, « Competition-Level Code Generation with AlphaCode », Science, vol. 378, no 6624,‎ , p. 1092–1097 (ISSN 0036-8075, DOI 10.1126/science.abq1158, arXiv 2203.07814)
  6. Khera, Astrachan et Kotz, « The internet programming contest », ACM SIGCSE Bulletin, vol. 25, no 1,‎ , p. 48–52 (ISSN 0097-8418, DOI 10.1145/169073.169105, lire en ligne [archive du ], consulté le )
  7. Pak, « Algorithms », Math 182 (consulté le )
  8. Programming Challenges (Skiena & Revilla) (ISBN 0387001638), (ISBN 978-0387001630)
  9. Bartosz Kostka, Sports Programming in Practice, University of Wrocław, (lire en ligne)
  10. « Celebrate Google's Coding Competitions with a final round of programming fun », Google Developers Blog, Google (consulté le )
  11. (en) « Code Jam - Google's Coding Competitions » [archive du ], Coding Competitions (consulté le )
  12. (en) « ICPC », icpc.global (consulté le )
  13. (en-US) « Programming Environment – ICPC Documents » (consulté le )
  14. (en) « ICPC », icpc.global (consulté le )
  15. « Olympiads », stats.ioinformatics.org (consulté le )
  16. « Meta Hacker Cup - 2022 - Qualification Round », www.facebook.com (consulté le )
  17. (en) « FAQ - Topcoder Community Town Hall with Doug Hanson, Topcoder CEO », Topcoder (consulté le )
  18. (en) « M(IT)^2 - MIT Informatics Tournament », sur mitit.org (consulté le )
  19. « Prologin, le concours national d'informatique », sur Prologin (consulté le )
  20. « Indemnités pour les contributeurs en 2025 | Google Summer of Code », sur Google for Developers (consulté le )
  21. a b c d e et f Luigi, Farina, Laura et Nanni, « oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System », Olympiads in Informatics, vol. 10,‎ , p. 207–222 (DOI 10.15388/ioi.2016.13, S2CID 6877554, lire en ligne)
  22. a et b Combéfis et Wautelet, « Programming Trainings and Informatics Teaching Through Online Contests », Olympiads in Informatics, vol. 8,‎ , p. 21–34 (lire en ligne)
  23. a b c et d (en) Aaron Bloomfield et Borja Sotomayor, « A Programming Contest Strategy Guide », SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education (conférence),‎ (lire en ligne [PDF]).
  24. « Kattis, Kattis », sur open.kattis.com (consulté le )
  25. « France-IOI – Cours et problèmes », sur www.france-ioi.org (consulté le )
  26. Jackson, « The Google Technical Interview. How to Get Your Dream Job. », XRDS: Crossroads, the ACM Magazine for Students, vol. 20, no 2,‎ , p. 12–14 (DOI 10.1145/2539270, S2CID 27549057, lire en ligne)
  27. a b c et d Smith, « The Competitive Programming Debate »,
  28. Halim, « CS3233 - Competitive Programming », NUS School of Computing
  29. « Winning at programming competitions is a negative factor for being good on the job », YouTube,
  30. (en-US) Jill-Jênn Vie, « The Book », sur TryAlgo (consulté le )
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya