🎯 Bienvenue au Calculum
Club d'algorithmique et de programmation compétitive de l'Université de Montréal
📅 Horaire
18:30
Consultez le sondage sur Discord
📍 Local
AA-3189
Pavillon André-Aisenstadt
💡 C'est quoi, la programmation compétitive?
La programmation compétitive est un terme assez vaste qui regroupe tous les casse-têtes informatiques. Malgré son nom, on ne fait pas que de la programmation et on ne fait pas que des compétitions — mais c'est le terme consacré!
Ces problèmes font appel à:
- L'algorithmique — concevoir des algorithmes efficaces
- La programmation — implémenter ces algorithmes
- La logique — raisonner sur les problèmes
- Le travail d'équipe — pour les concours en équipe
- ... et bien d'autres compétences!
🧩 Types de problèmes
1. Casse-têtes algorithmiques
Le type le plus classique! On vous donne un problème et vous devez écrire un programme qui résout n'importe quelle instance de ce problème, avec:
- Une taille maximale donnée
- Un temps d'exécution limité
- Une mémoire maximale
Le processus:
- Trouver un algorithme suffisamment efficace et correct
- Penser à la complexité (pas besoin d'analyse ultra-poussée!)
- Programmer l'algorithme dans un vrai langage
- Soumettre à un juge automatique qui teste votre code sur des tests inconnus
Plateformes: Kattis, Codeforces, LeetCode, AtCoder, etc.
Variante: Parfois on vous donne juste une instance à résoudre (comme dans l'Advent of Code). Vous devez juste donner la réponse pour cette instance, mais elle est assez compliquée pour nécessiter un programme!
2. Code Golf ⛳
L'objectif n'est plus de faire le programme le plus rapide, mais le plus court possible — avec le moins de caractères!
Stratégies:
- Pas besoin d'algorithme ultra-efficace, juste qu'il soit simple
- Trouver des constructions astucieuses dans le langage
- Choisir le bon langage (certains sont plus "terse" que d'autres)
- Il existe même des langages créés spécifiquement pour le code golf!
Plateforme: code.golf
Exemple classique: Écrire une "quine" (programme qui imprime son propre code source) en le moins de caractères possible!
3. Affrontement de programmes ⚔️
Contrairement aux deux premiers types, ici les programmes s'affrontent directement selon des règles du jeu établies!
Exemples célèbres:
- Core War — Les programmes s'exécutent dans une machine virtuelle avec mémoire limitée. Le but: faire planter l'adversaire en écrivant dans sa zone mémoire!
- Halite — Jeu de stratégie en temps réel
- Battlecode (MIT) — Combat de robots en Java, avec prix de 30 000 $ pour les gagnants!
- Leek Wars — Sympa pour les débutants, vous gérez un artichaut qui combat
- LeetBattle — Affrontements basés sur des problèmes algorithmiques
🏆 Compétitions et événements
ICPC (International Collegiate Programming Contest)
La compétition de référence en programmation compétitive universitaire!
- Format: Équipes de 3 personnes + 1 coach
- Calendrier: Régionale en mars, puis finales mondiales
- Niveau: Tous les niveaux bienvenus — c'est le bon moment pour s'entraîner!
- L'UdeM peut envoyer plusieurs équipes
CS Games
Compétition inter-universitaire québécoise avec plusieurs épreuves (programmation, sécurité, IA, etc.)
- Format: Équipes plus grandes
- Événement sur plusieurs jours avec volet social
Autres compétitions populaires
- Advent of Code — 25 jours de problèmes en décembre
- Google Hash Code / Kick Start
- Meta Hacker Cup
- Battlecode (MIT) — Début janvier, 30 000 $ de prix!
- Concours locaux — On pourrait en organiser au DIRO!
🎓 Pourquoi rejoindre le club?
- Plaisir et défis — Résoudre des casse-têtes stimulants
- Préparation aux compétitions — ICPC, CS Games, Advent of Code, etc.
- Entrevues techniques — Entraînement aux questions des GAFAM et grandes compagnies
- Amélioration en programmation — Apprendre de nouvelles techniques et algorithmes
- Communauté — Rencontrer d'autres passionnés, échanger des stratégies
- Tous les niveaux — Du débutant complet à l'expert aguerri
📋 Activités du club
- Rencontres hebdomadaires — Résolution de problèmes ensemble
- Préparation aux concours — Sessions d'entraînement ciblées
- Séances thématiques — Structures de données, algorithmes, optimisation
- Mock contests — Simulations de compétitions
- Code reviews — Analyser et améliorer les solutions
- Guest speakers — Anciens compétiteurs, professionnels de l'industrie
- ... et vos idées! C'est un club participatif 🙌
🛠️ Langages et outils
Les compétitions acceptent généralement tous les langages courants:
- C++ (très populaire pour sa vitesse)
- Python (rapide à écrire, bon pour débuter)
- Java
- C, C#, JavaScript, Rust, Go...
Vous pouvez utiliser le langage avec lequel vous êtes le plus à l'aise!
💪 Dernier rappel: Que vous soyez simple curieux, débutant ou déjà aguerri, vous êtes les bienvenus au Calculum! C'est en pratiquant qu'on s'améliore, et on est là pour apprendre ensemble.