alt=Two men sitting at desks with a computer and papers sprawled on them.|vignette| 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, Meta ou encore Huawei mais également par des sociétés financières comme Jane Street ou encore Citadel Securities (en).
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 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.
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. 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èmeProgramming Challenges (Skiena & Revilla) , .
Compétitions notables
Concours d'algorithmes +Nom du concours Organisateurs Public Description Nombre de participantsStatus Google Code Jam (GCJ) Google Ouvert Concours annuel organisé et sponsorisé par Google de 2003 jusqu'à son annulation en 2023. 32 702 (2022)Inactif Concours international de programmation collégiale (ICPC) 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. 50 000+ (2022)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)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)Actif Topcoder Open (TCO) Topcoder Ouvert Concours annuel d'algorithmes organisé de 2001 jusqu'à son annulation en 2023InactifM(IT)^2MITOuvertConcours annuel d'algorithmique organisé depuis 2024. Organisé par l'association M(IT)^2 du MIT.ActifProloginProloginOuvertConcours national d'algorithmique organisé par l'association Prologin en France depuis 1996. L'un des plus vieux concours encore actif.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 . 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é. 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. 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 à: