Programmazione competitiva
# Programmazione competitiva

Con l'espressione programmazione competitiva (dall'inglese competitive programming) o programmazione agonistica si intende l'attività di programmazione specificamente finalizzata alla partecipazione a gare organizzate su Internet o su rete locale.

## Storia

L'interesse verso la programmazione competitiva è notevolmente cresciuto dalla fine degli anni novanta, in concomitanza con la diffusione di Internet. Tuttavia, la nascita delle prime importanti gare di programmazione risale agli anni settanta, con l'istituzione dell'ACM International Collegiate Programming Contest. La manifestazione si tiene tuttora e, tra le iniziative dello stesso genere, è quella che si distingue sia per il maggior prestigio in ambito accademico internazionale, sia per il maggior numero di partecipanti.

Vanno segnalate anche le Olimpiadi internazionali dell'informatica, nate nel 1989. Tuttavia, esse sono destinate esclusivamente a studenti di scuola secondaria, e non permettono la partecipazione via Internet, neppure fuori concorso.

Oggigiorno, la programmazione competitiva è riconosciuta e promossa anche da importanti aziende informatiche, tra cui Google, Facebook e IBM. Se ritenuto opportuno, tali aziende possono decidere di utilizzare le proprie gare pure per cercare programmatori esperti e verificare sul campo le loro capacità.

## Contenuti

Tipicamente, in una competizione di programmazione vengono proposti uno o più problemi di natura algoritmico-matematica e si richiede che il partecipante scriva almeno un programma informatico che li risolva. Tra gli argomenti trattati più frequentemente, sono presenti: teoria dei grafi, combinatoria, teoria dei numeri, geometria, intelligenza artificiale, algoritmi ad hoc.

Nella maggioranza delle gare, la correzione delle soluzioni proposte è gestita, in maniera completamente automatizzata, da apposito software. I criteri di valutazione variano da una gara all'altra. Ad esempio, in alcuni casi può essere premiato il maggior numero di soluzioni esatte consegnate nel minor tempo, in altri il programma più efficiente in termini di tempo di esecuzione e memoria utilizzata.

## Lista di competizioni

* ACM-ICPC, per studenti universitari in gruppi da 3
* IOI, le competizioni internazionali per studenti delle scuole superiori
* Google Code Jam, gestite da Google
* Facebook Hacker Cup, gestite da Facebook
* OII, la gara nazionale italiana per studenti delle scuole superiori, parte del processo di selezione del team italiano alle IOI
