Calculum UdeM

🎯 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.