Olimpiada de Programare ( Olimpiada de Informatică ) este o competiție intelectuală pentru rezolvarea diverselor probleme pe calculator , pentru a cărei rezolvare este necesară inventarea și aplicarea oricărui algoritm sau program într - unul dintre limbajele de programare . De regulă, participanților li se oferă un set de mai multe sarcini. Problema se consideră rezolvată dacă participanții au reușit să creeze un program care să funcționeze corect pe testele pregătite de juriu. Testele sunt necunoscute participanților.
Olimpiadele sunt individuale și de echipă. Olimpiadele pe echipe implică de obicei 3 persoane și li se oferă 1 computer pe toată durata olimpiadei pentru rezolvarea problemelor. Pentru a desfășura astfel de competiții sunt folosite sisteme software specializate de turneu.
Problemele de programare sportivă sunt unice prin faptul că răspunsul la ele este un program care rezolvă problema în mod optim dintr-o dată pentru toate datele de intrare posibile.
De exemplu, dacă cea mai simplă problemă de matematică sună ca „Adăugați două numere: 4 și 5 ” , atunci cea mai simplă problemă de programare va suna ca „Scrieți un program care adaugă oricare două numere”. În acest caz, participantului i se va cere să scrie un program care citește două numere prin fluxul de intrare standard și scoate un număr - răspunsul la problemă - în fluxul de ieșire standard . Uneori, organizatorii competiției oferă să citească și să scoată date într-un alt mod, de exemplu, prin . A+B este o provocare clasică pentru a cunoaște acest format.
Desigur, juriul competiției trebuie să se asigure cumva că programul participantului funcționează corect pentru orice date. Pentru a face acest lucru, înainte de competiție, este pregătit un set de teste , pe care vor fi lansate soluțiile participanților și un set de răspunsuri la acestea. Dacă juriul și participantul au aceleași răspunsuri la toate testele, decizia va primi un punctaj complet, dacă nu, unul parțial sau zero. La cele mai multe olimpiade, verificarea este automatizată și se efectuează imediat după ce participantul trimite soluția, ceea ce îi permite să-l informeze rapid despre rezultat și să-i ofere șansa de a perfecționa programul.
Adesea, soluția este verificată nu numai pentru corectitudine, ci și pentru eficiență. Pentru a face acest lucru, sistemul de testare introduce o limită a cantității de timp de procesor pe care o poate folosi programul încărcat, iar datele de intrare în unele teste sunt selectate astfel încât soluția ineficientă să ruleze prea mult timp. Ca urmare, o astfel de soluție nu trece la aceste teste și primește un scor incomplet.
Autorii încearcă să selecteze datele de intrare în așa fel încât timpul de rulare al unei soluții ineficiente să depășească de mai multe ori limita stabilită, ceea ce elimină influența diferențelor de caracteristici ale procesorului, erori de măsurare, Turbo Boost și alți factori asupra rezultatului. În același timp, se măsoară timpul procesorului și nu timpul real de execuție, astfel încât încărcarea procesorului serverului de testare cu alte sarcini nu ar trebui să afecteze rezultatul.
În lumea programării sportive, există un anumit format pentru condițiile problematice. Deși nu este standardizat oficial de nimeni, competițiile de facto din întreaga lume împart condițiile problemelor în următoarele paragrafe:
Prima Olimpiada de programare în rândul școlarilor de la Moscova a avut loc în 1981 (au fost doar 4 participanți), iar prima Olimpiada din URSS (sub numele Olimpiada de Informatică) a avut loc în rândul școlarilor și a avut loc în 1988 la Sverdlovsk [1] . În viitor, olimpiadele de informatică au devenit parte a întregii uniuni (și după prăbușirea URSS - toate olimpiadele rusești) subiecte pentru școlari.
În mod tradițional, olimpiadele pentru școlari sunt competiții individuale, desfășurate după un sistem pe mai multe niveluri, în mai multe etape: olimpiade raionale, orașe, regionale, naționale. Câștigătorii olimpiadei rusești primesc dreptul de a participa la olimpiadele internaționale de informatică .
Olimpiade listateÎn fiecare an, Consiliul rus al olimpiadelor pentru elevi (RSOS) întocmește o listă specială de olimpiade, care poate include olimpiade personale în programarea sportivă. Astfel de competiții se desfășoară întotdeauna în două etape: de calificare (online) și finală (în persoană, dar au fost permise excepții din cauza pandemiei de COVID-19 ). Numai autoritățile din domeniul învățământului și instituțiile de învățământ superior au dreptul de a desfășura olimpiade de listă. [2]
Rezultatele ridicate afișate la astfel de olimpiade pot oferi anumite privilegii la intrarea într-o universitate , inclusiv admiterea fără teste de admitere sau rotunjirea rezultatelor USE în informatică la 100 de puncte (dacă studentul a obținut cel puțin 75 de puncte).
Competiții pe echipe școlareOlimpiadele pe mai multe niveluri se desfășoară și în rândul școlarilor, conform regulilor similare cu regulile olimpiadelor internaționale studențești [3] [4] .
Cea mai faimoasă Olimpiada pe echipe este Olimpiada pe echipe din întreaga Rusie pentru școlari în programare [5] (VKOSHP). Are loc de obicei la începutul lunii decembrie în diferite orașe ale Rusiei: Sankt Petersburg, Barnaul și orașe din alte țări. Trebuie să te califici la această olimpidă din regiunea ta, de obicei merg 10-20 de echipe de la Moscova, puțin mai puțin de la Sankt Petersburg [6] .
Nu s-au ținut olimpiade de informatică printre studenții URSS din întreaga țară. Începând cu 1996, studenții universităților ruse au început să participe la competiții incluse în sistemul Campionatului Mondial de Programare pe Echipe în rândul studenților , organizate de asociația americană ACM .
Pasionații au organizat și diverse olimpiade intra și interuniversitare. De obicei, aceste olimpiade sunt sponsorizate de o companie de dezvoltare de software care este interesată să atragă studenți talentați să lucreze cu ei.
Procesul de verificare a soluțiilor necesită putere de calcul, măsurarea precisă a resurselor consumate, suport pentru un număr mare de compilatoare, izolarea programelor executabile și multe alte soluții tehnice complexe. În Rusia, au fost dezvoltate mai multe sisteme și platforme pentru competiții de programare:
Nume | Stat | Scris in | Notă |
---|---|---|---|
judeca | Acceptat, licențiat conform GPL | Xi | Un sistem open source dezvoltat în anii 2000.
Datorită particularităților arhitecturii, nu acceptă testarea multi-core, ceea ce încetinește foarte mult testarea. Cu toate acestea, este încă folosit în competiție. |
PCMS | Sprijinit | Java | Creat în 2004 la Universitatea ITMO pentru a găzdui propriile olimpiade, continuă să se dezvolte în interiorul zidurilor sale.
Pe acest sistem de testare se desfășoară Olimpiada Rusă a școlarilor . |
sortează-mă | Sprijinit | merge | Proiectul a fost lansat pe 1 octombrie 2021.
Potrivit creatorilor, este cel mai rapid sistem de testare din lume care poate accelera nu numai verificarea, ci și compilarea programelor. [7] Singurul proiect din Rusia care se dezvoltă fără sprijinul vreunei universități, fundații sau corporații. |
Codeforces | Sprijinit | Java | Creat în 2010 la Universitatea de Stat din Saratov .
Cea mai populară platformă de programare sportivă. Biblioteca testlib.h creată de Codeforces este standardul de facto pentru dezvoltarea sarcinilor. Proiectul este localizat în limba engleză și dezvoltat cu sprijinul Universității ITMO și al sponsorilor străini. |
Concurs Yandex | Sprijinit | Piton | Proiect Yandex . Poate fi folosit pentru propriile tale competiții. Este folosit în principal pentru olimpiade de enumerare și antrenamente locale. |
Concurent | Proiect inchis | Delphi / FreePascal | Creat la Academia Tehnologică de Stat Kovrov în 2008. Era un server independent care conținea aproximativ 130 de sarcini. |
Timus Judecător Online | Menținută, dar nedezvoltată | necunoscut | O arhivă mare online de probleme dezvoltată în 2000 la Universitatea Federală Ural . |
acm.sgu.ru | Proiect inchis | necunoscut | Site pentru formarea studenților Universității de Stat din Saratov . |
acmp.ru | Sprijinit | .NET | O arhivă mare de sarcini, dezvoltată din 2006 cu sprijinul Palatului Pionierului Krasnoyarsk . Acest site găzduiește etapele școlare și municipale ale Olimpiadei rusești pentru școlari (doar pentru teritoriul Krasnoyarsk). |
În Belarus, olimpiada de programare (în informatică) în rândul școlarilor se desfășoară în mai multe etape.
Prima etapă este o olimpiade intra-școlare. Efectuat în rândul studenților unei anumite instituții de învățământ. În urma competiției, câștigătorii trec în etapa următoare. Pentru a desfășura astfel de olimpiade sunt folosite sisteme de testare (sisteme de turnee). Ce sistem să folosească este hotărât de organizatorii olimpiadei. De exemplu, la Brest se folosește sistemul Brain Training , în unele instituții sistemul eJudge
A doua etapă este olimpiada municipală (uneori se numește urbană). O astfel de olimpiada se desfășoară printre câștigătorii etapei precedente, reprezentate de fiecare școală dintr-o anumită zonă a orașului. De exemplu, la Brest au loc două olimpiade regionale: pentru districtele Moscova și Leninsky. Câștigătorii din fiecare raion trec la următoarea etapă. Condițiile obligatorii pentru continuarea participării la olimpiade (trecerea la etapa următoare) sunt să obțină mai mult de 50% din punctele posibile (în anul universitar 2014-2015, această regulă a fost anulată).
A treia etapă este olimpiada regională. Aici participă câștigătorii etapei precedente (olimpiadele regionale). Întreaga Belarus este împărțită în 6 regiuni (Brest, Vitebsk, Mogilev, Grodno, Gomel și Minsk), precum și orașul Minsk. În plus, Instituția de Învățământ de Stat „Liceul Universității de Stat din Belarus” acționează ca o echipă separată. În fiecare dintre ele, participanții sunt selectați pentru următoarea etapă a olimpiadei.
A patra etapă este Olimpiada Republicană (etapa finală). Câștigătorii olimpiadelor regionale concurează pentru titlul de cel mai bun programator dintre școlari.
Cei mai buni participanți la Olimpiada Republicană (de obicei doar de la clasele 9-11) sunt selectați pentru taberele de pregătire pentru Olimpiada Internațională de Informatică. În timpul cantonamentului, dintre ei este selectată echipa finală.
Cea mai mare competiție internațională de programare pentru echipe de studenți este Concursul internațional de programare colegială ACM . Sponsorii generali ai campionatului sunt companii precum Microsoft și IBM . În 2004, au participat 3150 de echipe din 75 de țări.
Echipele din Rusia au devenit în repetate rânduri câștigătoare ale acestei prestigioase competiții [8] [9] [10] [11] [12] . Ca urmare a performanțelor de succes, echipele au fost onorate cu o întâlnire cu Președintele Federației Ruse [13] [14] [15] . Unul dintre formatorii și organizatorii acestor olimpiade din Rusia a fost distins cu Premiile Președintelui Federației Ruse și ale Guvernului Federației Ruse în domeniul educației [16] .
Multe competiții în programarea sportivă nu au legătură directă cu sistemul de învățământ, adică la ele participă și programatori profesioniști. O competiție de programare sportivă populară în lume este resursa TopCoder , care găzduiește în mod regulat runde (SRM), ale căror rezultate formează evaluarea participanților, precum și TopCoder Open anual . Resursa rusă Codeforces deține și runde regulate [16] pe baza rezultatelor cărora se formează propriul rating. La sfârșitul anului 2021, platforma Sort Me a câștigat popularitate în Rusia , găzduind lunar Sort Me Round [17] conform regulilor ACM modificate [18] .
Marile companii IT organizează competiții regulate și de obicei individuale de programare, cum ar fi Google Code Jam , Facebook Hacker Cup , Russian Code Cup .
Concursuri de programare | |
---|---|
Competiție | |
Organizații |