Programátorská olympiáda ( Informatická olympiáda ) je intelektuální soutěž pro řešení různých problémů na počítači , k jejichž řešení je nutné vymyslet a aplikovat libovolný algoritmus nebo program v některém z programovacích jazyků . Účastníci dostávají zpravidla soubor několika úkolů. Problém je považován za vyřešený, pokud účastníci byli schopni vytvořit program, který správně funguje na testech připravených porotou. Testy jsou účastníkům neznámé.
Olympiády jsou individuální i týmové. Týmové olympiády se obvykle účastní 3 osoby a po celou dobu olympiády mají k dispozici 1 počítač k řešení problémů. K pořádání takových soutěží se používají specializované softwarové turnajové systémy.
Problémy sportovního programování jsou jedinečné v tom, že odpovědí na ně je program, který problém optimálně vyřeší najednou pro všechna možná vstupní data.
Pokud například nejjednodušší matematický problém zní jako „Sečtěte dvě čísla: 4 a 5 “ , pak nejjednodušší programovací problém bude znít jako „Napište program, který sečte libovolná dvě čísla“. V tomto případě bude účastník požádán, aby napsal program, který načte dvě čísla prostřednictvím standardního vstupního proudu a jedno číslo – odpověď na problém – odešle do standardního výstupního proudu . Někdy organizátoři soutěží nabízejí čtení a výstup dat jiným způsobem, například prostřednictvím . A+B je klasická výzva pro seznámení s tímto formátem.
Porota soutěže se samozřejmě musí nějak postarat o to, aby program účastníka fungoval správně pro jakákoli data. K tomu je před soutěží připravena sada testů , na kterých budou spuštěna řešení účastníků a sada odpovědí na ně. Pokud porota a účastník odpoví na všechny testy stejně, obdrží rozhodnutí plné skóre, pokud ne, částečné nebo nulové. Na většině olympiád je kontrola automatizovaná a provádí se ihned poté, co účastník odevzdá řešení, což mu umožňuje rychle ho informovat o výsledku a dát mu šanci program upřesnit.
Často se kontroluje nejen správnost řešení, ale také účinnost. K tomu testovací systém zavádí limit na množství procesorového času, který může načtený program využít, a vstupní data v některých testech jsou vybírána tak, že neefektivní řešení běží příliš dlouho. Výsledkem je, že takové řešení v těchto testech neprojde a získá neúplné skóre.
Autoři se snaží vybírat vstupní data tak, aby doba běhu neefektivního řešení mnohonásobně překročila stanovený limit, čímž se eliminuje vliv rozdílů v charakteristikách procesoru, chyb měření, Turbo Boost a dalších faktorů na výsledek. Současně se měří čas procesoru , nikoli skutečná doba provádění, takže zatížení procesoru testovacího serveru jinými úkoly by také nemělo ovlivnit výsledek.
Ve světě sportovního programování existuje určitý formát pro problémové stavy. Ačkoli to není oficiálně nikým standardizováno, de facto soutěže po celém světě rozdělují podmínky problémů do následujících pododstavců:
První olympiáda v programování mezi školáky v Moskvě se konala v roce 1981 (byli pouze 4 účastníci) a první olympiáda v SSSR (pod názvem Olympiáda v informatice) se konala mezi školáky a konala se v roce 1988 ve Sverdlovsku [1] . Olympiády v informatice se v budoucnu staly součástí Všesvazových (a po rozpadu SSSR - Všeruských) oborových olympiád pro školáky.
Olympiády pro školáky jsou tradičně individuální soutěže, pořádané podle víceúrovňového systému, v několika fázích: okresní, městské, krajské, celostátní olympiády. Vítězové celoruské olympiády získávají právo účastnit se mezinárodních olympiád v informatice .
Vypsané olympiádyRuská rada olympiád pro studenty škol (RSOS) každoročně sestavuje zvláštní seznam olympiád, který může zahrnovat osobní olympiády ve sportovním programování. Takové soutěže probíhají vždy ve dvou fázích: kvalifikační (online) a finálové (osobně, ale byly povoleny výjimky z důvodu pandemie COVID-19 ). Pouze orgány v oblasti školství a vysoké školy mají právo pořádat seznamové olympiády. [2]
Vysoké výsledky na takových olympiádách mohou poskytnout určitá privilegia při vstupu na univerzitu , včetně přijetí bez vstupních testů nebo zaokrouhlení výsledků USE v informatice na 100 bodů (pokud student dosáhl alespoň 75 bodů).
Soutěže školních týmůMezi školáky se konají i víceúrovňové týmové olympiády, a to podle pravidel podobných pravidlům mezinárodních studentských olympiád [3] [4] .
Nejznámější týmovou olympiádou je Všeruská týmová olympiáda pro školáky v programování [5] (VKOSHP). Obvykle se koná začátkem prosince v různých městech Ruska: Petrohrad, Barnaul a města v dalších zemích. Na tuto olympiádu se musíte ve svém regionu kvalifikovat, obvykle jede 10-20 týmů z Moskvy, o něco méně z Petrohradu [6] .
Olympiády v informatice mezi studenty SSSR v celé zemi se nekonaly. Počínaje rokem 1996 se studenti ruských univerzit začali účastnit soutěží zařazených do systému World Team Programming Championship mezi studenty , pořádaných americkou asociací ACM .
Nadšenci také organizovali různé vnitrouniverzitní a meziuniverzitní olympiády. Obvykle jsou tyto olympiády sponzorovány společností zabývající se vývojem softwaru, která má zájem přilákat talentované studenty, aby s nimi spolupracovali.
Proces ověřování řešení vyžaduje výpočetní výkon, přesné měření spotřebovaných zdrojů, podporu velkého množství kompilátorů, izolaci spustitelných programů a mnoho dalších složitých technických řešení. V Rusku bylo vyvinuto několik systémů a platforem pro programátorské soutěže:
název | Stát | Zapsáno v | Poznámka |
---|---|---|---|
odsoudit | Podporováno, licencováno pod GPL | Xi | Open source systém vyvinutý v roce 2000.
Vzhledem ke zvláštnostem architektury nepodporuje vícejádrové testování, což testování značně zpomaluje. V soutěži se však stále používá. |
PCMS | Podporováno | Jáva | Byla vytvořena v roce 2004 na univerzitě ITMO za účelem pořádání vlastních olympiád a nadále se rozvíjí v jejích zdech.
Na tomto testovacím systému se koná Všeruská olympiáda školáků . |
seřaď mě | Podporováno | Jít | Projekt byl zahájen 1. října 2021.
Podle tvůrců jde o nejrychlejší testovací systém na světě, který dokáže urychlit nejen kontrolu, ale i kompilaci programů. [7] Jediný projekt v Rusku, který se vyvíjí bez podpory jakékoli univerzity, nadace nebo korporace. |
Codeforces | Podporováno | Jáva | Vytvořeno v roce 2010 na Saratovské státní univerzitě .
Nejoblíbenější sportovní programovací platforma. Knihovna testlib.h vytvořená Codeforces je de facto standardem pro vývoj úloh. Projekt je lokalizován do angličtiny a vyvinut s podporou ITMO University a zahraničních sponzorů. |
Soutěž Yandex | Podporováno | Krajta | Projekt Yandex . Lze použít pro vlastní soutěže. Využívá se především pro výčtové olympiády a místní tréninky. |
Soutěžící | Projekt uzavřen | Delphi / FreePascal | Vytvořeno na Státní technologické akademii Kovrov v roce 2008. Jednalo se o samostatný server obsahující asi 130 úloh. |
Soudce Timus Online | Udržovaný, ale nevyvíjený | neznámý | Velký online archiv problémů vyvinutý v roce 2000 na Uralské federální univerzitě . |
acm.sgu.ru | Projekt uzavřen | neznámý | Místo pro studenty školení Saratov státní univerzity . |
acmp.ru | Podporováno | .SÍŤ | Velký archiv úkolů, vyvíjený od roku 2006 s podporou Krasnojarského Pionýrského paláce . Tato stránka hostí školní a obecní etapy celoruské olympiády pro školáky (pouze pro Krasnojarské území). |
V Bělorusku se olympiáda v programování (v informatice) mezi školáky koná v několika fázích.
První etapou je vnitroškolní olympiáda. Provádí se mezi studenty konkrétní vzdělávací instituce. V důsledku soutěže postupují vítězové do další fáze. K pořádání takových olympiád se používají testovací systémy (turnajové systémy). Jaký systém použít, rozhodují organizátoři olympiády. Například v Brestu se používá systém Brain Training , v některých institucích systém eJudge
Druhou etapou je obecní olympiáda (někdy se jí říká městská). Taková olympiáda se koná mezi vítězi předchozí fáze, zastoupenými každou školou v určité oblasti města. Například v Brestu se konají dvě regionální olympiády: pro Moskevský a Leninský okres. Vítězové z každého okresu postupují do dalšího kola. Závaznou podmínkou pro pokračování účasti v olympiádě (přechod do další fáze) je získání více než 50 % možných bodů (v akademickém roce 2014-2015 bylo toto pravidlo zrušeno).
Třetí etapou je krajská olympiáda. Zde se účastní vítězové předchozí etapy (krajské olympiády). Celé Bělorusko je rozděleno do 6 regionů (Brest, Vitebsk, Mogilev, Grodno, Gomel a Minsk), stejně jako město Minsk. Státní vzdělávací instituce „Lyceum Běloruské státní univerzity“ navíc působí jako samostatný tým. V každém z nich jsou vybráni účastníci do další fáze olympiády.
Čtvrtou etapou je republiková olympiáda (konečná fáze). Vítězové krajských olympiád soutěží o titul nejlepšího programátora mezi školáky.
Nejlepší účastníci republikové olympiády (zpravidla pouze od 9-11 ročníků) jsou vybíráni na soustředění na Mezinárodní olympiádu v informatice. Během soustředění se z nich vybírá finální tým.
Největší mezinárodní soutěží v programování studentských týmů je ACM International Collegiate Programming Contest . Generálními sponzory šampionátu jsou společnosti jako Microsoft a IBM . V roce 2004 se ho zúčastnilo 3150 týmů ze 75 zemí.
Týmy z Ruska se opakovaně staly vítězi této prestižní soutěže [8] [9] [10] [11] [12] . V důsledku úspěšných výkonů byly týmy poctěny setkáním s prezidentem Ruské federace [13] [14] [15] . Jeden z trenérů a organizátorů těchto olympiád v Rusku byl oceněn Ceny prezidenta Ruské federace a vlády Ruské federace v oblasti vzdělávání [16] .
Mnoho soutěží ve sportovním programování přímo nesouvisí se vzdělávacím systémem, to znamená, že se jich účastní i profesionální programátoři. Populární soutěží sportovního programování ve světě je zdroj TopCoder , který pravidelně pořádá kola (SRM), jejichž výsledky tvoří hodnocení účastníků, a také každoroční TopCoder Open . Ruský zdroj Codeforces také pořádá pravidelná kola [16] na základě jejichž výsledků se tvoří jeho vlastní hodnocení. Na konci roku 2021 si v Rusku získala popularitu platforma Sort Me , která měsíčně hostí Sort Me Round [17] podle upravených pravidel ACM [18] .
Velké IT společnosti pořádají pravidelné a obvykle individuální soutěže v programování, jako je Google Code Jam , Facebook Hacker Cup , Russian Code Cup .
Programátorské soutěže | |
---|---|
Soutěž | |
Organizace |