Սպորտային ծրագրավորում

Ծրագրավորման օլիմպիադա, ինտելեկտուալ մրցում, որի ընթացքում լուծվում են բազմաթիվ խնդիրներ էլեկտրոնային հաշվիչ համակարգով՝ օգտագործելով տարբեր ծրագրավորման լեզուների ալգորիթմեր կամ ծրագրեր։ Սովորաբար մասնակիցներին բաժանում են խնդիրների կոմպլեկտ։ Խնդիրը համարվում է լուծված միայն այն ժամանակ, երբ ծրագիրը կարողանում է ճիշտ անցնել ժուրիի կազմած թեստը։ Մասնակիցներին թեստի պարունակությունը մնում է անհայտ։
Սպորտային ծրագրավորումը համարվում է գիտելիքի սպորտ, երբ  հավաքվում են աշխարհի տարբեր ծայրերից ծրագրավորողները ( կամ ապագա ծրագրավորողները ) և հիմնականում ինտերնետի միջոցով  անց է կացվում տարբեր մրցույթներ, քննարկումներ և գիտելիքի փոխանակումներ։ Սպորտային ծրագրավորումը ընդհանուր ծրագրավորման հիմնական ռեսուրսներից մեկն է, որը տրամադրում է մրցունակ ծրագրավորողներ տարբեր ընկերությունների և ստեղծում ավելի ակտիվ համակարգեր։ Այս ամենը ծագում է այն մտքից, որ սպորտային ծրագրավորումը հնարավորություն է տալիս ստեղծել առողջ մրցակցություն տարբեր կայքերի և մրցույթների միջոցով։
Ծրագրավորման օլիմպիադաները բաժանվում են երկու ձևաչափի։ Առաջին ձևաչափում ընդգրկված են թիմային օլիմպիադաները, այդ օլիմպիադային թիմին տրվում է ընդամենը մեկ համակարգիչ խնդիրները լուծելու համար։ Այդ մրցույթների անցկացման համար օգտագործվում են տարբեր մասնագիտացված ծրագրային համակարգեր։
Սպորտային ծրագրավորման խնդիրները հիմնականում լինում են 3 տեսակի՝ ալգորիթմային, օպտիմալային, հետազոտական․

Ալգորիթմային են կոչվում այն խնդիրները, որոնք առաջադրվում են մրցույթների ժամանակ և մասնակիցների կողմից լուծվում են լիովին կամ մասնակի։ Մասնակիցը պետք է գրի ալգորիթմներ՝ առաջադրված ծրագրավորման լեզուներով։ Սերվերին ուղարկելուց հետո, սերվերը աշխատեցնում է մասնակցի գրած ծրագիրը իր թեստերով, յուրաքանչյուր թեստի, ծրագրի կողմից ճիշտ արտածած պատասխանի համար մասնակիցը ստանում է համապատասխան միավոր։
Օպտիմալային են կոչվում այն ծավալուն խնդիրները, որոնց համար լիարժեք լուծում գոյություն չունի։ Գնահատվում է, թե որքան օպտիմալ է մասնակցի (ների) որոշումը տվյալ խնդիրը լուծելու համար։ Որոշ խնդիրների մեջ մասնակիցների որոշումները տվյալ խնդիրը լուծելու համար փոխկապակցված են (խաղեր)։
Հետազոտական են կոչվում այն խնդիրները, որոնք առաջադրվում են ինտերնետային մրցույթների ժամանակ։ Մասնակիցը պետք է գրի ծրագիր՝  առաջադրված ծրագրավորման լեզուներից մեկով և այն ուղարկի սերվերին, որը այնտեղ կոմպիլացվում է և ուղարկում է համապատասխան պատասխան։ Օրինակ՝ բոլոր առաջադրված թեստերի պատասխանները ճիշտ է արտածել՝ մասնակցի կողմից գրված ծրագիրը, թե թերի, կամ կարող են լինել կոմպիլացիոն սխալներ։Ալգորիթմային և հետզոտական խնդիրները շատ նման են իրար, սակայն տարբերվում են գնահատման սիստեմներով։
Խնդիրների լուծման համար անհրաժեշտ է տիրապետել առնվազն 1 ծրագրավորման լեզվի։ Հիմնական օգտագործվող լեզուներն են՝ C, C++, Java, Python, Pascal,  #C։ Այնուամենայնիվ որոշ կայքեր թույլատրում են 20 և ավելի ծրագրավորման լեզուներ։ 
Համեմատաբար բարդ խնդիրների լուծման համար անհրաժեշտ է իմանալ նաև դասական ալգորիթմներ և խնդիրների մոտեցումներ։


== ACM International Collegiate Programming Contest ==

Ծրագրավորման միջազգային ուսանողական մրցույթը խոշորագույն միջազգային ուսանողական թիմային ծրագրավորման օլիմպիադա է։
ICPC-ն թիմային մրցույթ է։ Ներկայիս կանոններով՝ յուրաքանչյուր թիմ պետք է ունենա երեք ուսանող։ Մասնակիցները պետք է լինեն համալսարանի ուսանող, որոնց համալսարանական կրթությունը տևել է հինգ տարուց պակաս։ Ուսանողները, ովքեր երկու անգամ մասնակցել են Աշխարհի եզրափակչին կամ հինգ մարզային փուլերի, այլևս իրավունք չունեն մասնակցել մրցույթին։
Առաջնության գլխավոր հովանավորներից երկուսը Մայքրոսոֆթն ու IBM-ն են։ 2004 թվականին այդ մրցույթին մասնակցում էին 3150 թիմ 75 երկրներից։ Ռուսաստանի թիմը բազում անգամներ հաղթել է օլիմպիադայում։ Այդ ուսանողները հանդիպել են Ռուսաստանի դաշնության նախագահի հետ։


== Օլիմպադաներ ԽՍՀՄ-ում և Ռուսաստանում ==


=== Դպրոցականների միջև ===
Առաջին օլիմպիադան ԽՍՀՄ-ում (ինֆորմատիկայի օլիմպիադա անվանմամբ) կայացավ դպրոցականների միջև 1998 թվականին Սվերդլովսկում։ Հետագայում ինֆորմատիկայի օլիմպիադաները դարձան համամիութենական (այնուհետև ԽՍՀՄ-ի փլուզումից հետո համառուսաստանյան) առարկայական օլիմպիադա։ Համառուսաստանյան ինֆորմատիկայի օլիմպիադան դպրոցականների միջև անցկացվեց 2011 թվականին Պերմում։
Սովորաբար դպրոցականների անհատական ձևաչափով առաջնությունները անցկացվում են մի քանի փուլերով՝ շրջանային, քաղաքային, տարածաշրջանային և ազգային։ Համառուսաստանյան օլիմպիադան հաղթողները իրավունք են ստանում մասնակցելու միջազգային ինֆորմատիկայի օլիմպիադային։
Բարձր արդյունքներ ցուցաբերելը որոշակի առավելություն կտա տվյալ ուսանողին բուհ ընդունվելուց։


=== Դպրոցականների թիմային մրցույթ ===
Նաև անցկացվում են դպրոցականների թիմային առաջնություն, ուսանողների միջազգային օլիմպիադայի նույնատիպ օրենքներով։
Առավել հայտնի թիմային օլիմպիադան դա Համառուսաստանյան ինֆորմատիկայի թիմային օլիմպիադան է դպրոցականների միջև։ Այդ օլիմպիադան սովորաբար անցկացվում է դեկտեմբերի սկզբին, Ռուսաստանի տարբեր քաղաքներում։ Այդ օլիմպիադային մասնակցելու համար պետք է ընտրվել շրջանում, Մոսկվայից սովորաբար գալիս են 10-20 թիմ, իսկ Սանկտ-Պետերբուրգից համեմատ քիչ։


=== Ուսանողներ ===
Ինֆորմատիկայի օլիմպիադա ուսանողների միջև ԽՍՀՄ-ում գլոբալ մասշտաբներով չի անցկացվել։ Սկսած 1996 թվականից ռուսական բուհերի ուսանողները սկսեցին մասնակցել մրցույթների, որոնք մտնում էին 
ուսանողների միջև թիմային ծրագրավորման համակարգի մեջ։


== Այլ հայտնի մրցույթներ ==
Վերջին ժամանակներում օգտագործվում է ավելի ընդհանուր տերմին  «սպորտային ծրագրավորում»։ Սպորտային ծրագրավորման մրցույթները կամ առաջնությունները ուղղակիորեն կապված չեն կրթական համակարգի հետ, այսինք այդ մրցումներին կամ առաջնություններին կարող են մասնակցել պրոֆեսիոնալ ծրագրավորողներ։ Սպորտային ծրագրավորման հայտնի մրցույթ է համարվում TopCoder ռեսուրսը, որտեղ պարբերաբար անցկացվում են տուրեր, որոնց շնորհիվ ձևավորվում է մասնակիցների վարկանիշը։ Նաև ամեն տարի անցկացվում է TopCoder Open մրցույթը։ Հետագայում հայտնվել է նաև ռուսական ռեսուրս Codeforces-ը, որը նույնպես անցկացնում է պարբերաբար տուրեր, որի արդյունքների հաշվին նույնպես ձևավորվում է մասնակիցների վարկանիշները։
Խոշորագույն ՏՏ ընկերությունները նույնպես անցկացնում են մրցույթներ ծրագրավորման ոլորտում, դրանց մեջ են մտնում՝ Google Code Jam-ը, Facebook Hacker Cup-ը և Russian Code Cup-ը։


== IOI ==

Ստեղծվեցին մի շարք մրցույթներ, ինչպիսին է IOI – ը (ինֆորմատիկայի միջազգային օլիմպիադա ), որը առաջին անգամ տեղի է ունեցել 1989  թվականին Բուլղարիայում։ IOI – ը  դպրոցական անհատական օլիմպիադա է, որին մասնակցում են յուրաքանչյուր երկրից ամենաշատը 4 մասնակից։ Մրցույթը կազմված է 2 օրից և յուրաքանչյուր օր առաջադրվում է 3-ական խնդիր, որոնք մասնակիցը պետք է լուծի 5 ժամվա ընթացքում։ Յուրաքանչյուր տարի մրցույթը տեղի է ունենում տարբեր երկրներում և հնարավորություն է տալիս տարբերվել նախորդներից։ Խնդիրների բնույթը համեմատաբար տարբերվում է ICM-ICPC –ից իր հետաքրքրությամբ և բարդությամբ։
IOI-ին թույլատրվում է օգտագործել ծրագրավորման լեզուներից միայն C++, C, Pascal և Java: Բայց Pascal-ը կհեռացվի 2019-թվականին։


== Հայաստանի մասնակիցների արդյունքներն ԻՄՕ-ում ==
1996-2017 ժամանակաշրջանում հայաստանյան թիմերը արժանացել են 1 ոսկե, 4 արծաթե և 23 բրոնզե մեդալների։


== Մրցույթների համար նախատեսված կայքեր ==


=== IZHO ===
Այս մրցույթը իրականացվում է IOI  -ի  նման ոճով, որին մասնակցում են նախկին Խորհրդային Միության պետությունների հիմնական մասը(նաև Հայաստանը)։ Մրցույթը անց է կացվում Ղազախստանում և մեկնարկել է 2005 թվականին։ Մրցույթի հաղթողներին տրվում են արտոնություններ հետագա կարիեիայի համար, ընդհուպ նաև համալսարանական արտոնություններ։


=== CodeForces ===
Այս կայքը ստեղծվել է 2010 թվականին Ռուսաստանում և արդեն դարձել սպորտային ծրագրավորման հետ կապող ամենաէական փաստերից մեկը։ Կայքում անց է կացվում առցանց մրցույթներ և մասնակիցների ռեկորդակիր քանակը եղել է մինչև 9733 օգտատեր։ CodeForces-ը տիպիկ ալգորիթմային խնդիրներով հարուստ մրցույթների կայք է։
Կայքում կար ավելի քան 300000 օգտատեր 2015 թվականի տվյալներով, որոնց թիվը գնալով աճում է մինչև օրս։
Օգտատերերը բաժանված են 10 խմբերի, որոնց համար տեղի է ունենում 3 տարբեր մակարդակների մրցույթներ և մրցակցության հիմնական աղբյուրը, հանդիսանում է իրենց տեղը ընդհանուր օգտատերերի ցուցակում։


=== TopCoder ===
Կայքը մեծ ընկերություն է ՝  նախատեսված դիզայներների, մշակողների, տվյալների փորցագետների և սպորտային ծրագրավորողների համար։ Կայքում օգտատերերի թիվը կազմում է մոտավորապես 1 200 000 (2018 - ի տվյալներով), որը ներկայումս համարվում է առաջատարը շուկայում։ Համակարգը ստեղծվել է 2001 թվականին Jack Hughes – ի  կողմից ԱՄՆ-ում։


== Վարժություններ ==
Ծրագրավորման դասական օլիմպիադաների ժամանակ մասնակիցներին առաջարկվում է մի շարք խնդիրներ, տարբեր բարդության։ Խնդրի լուծումը համարվում է ծրագիրը, որը գրված է թույլատրվող ծրագրավորման լեզուներից մեկի վրա։ Այդ ծրագիրը պետք է հստակ հաշվի տվյալ ձևաչափի ցանկացած մուտքի տվյալներ։ Եվ հստակ մշակել, խնդրի պահանջների համաձայն և դուրս բերել որոշակի ելքային հոսքով նշված տեսքով։
Բոլոր լուծումները ստուգվում է ավտոմատացված համակարգի շնորհիվ։ Այդ համակարգը մեկնարկում է տվյալ խնդրի բոլոր լուծումները, որոշ թեստերի լուծման համար։ Թեստերը լուծելուց հետո համակարգը դիտարկում է ելքային տվյալները և համեմատում է արդեն պատրաստի շաբլոնների հետ կամ կատարում է ավելի բարդ գործողություններ։
Օլիմպիադաների առանձնահատկությունը նրանումն է, որ պետք է խնդրին մոտենալ ավելի ստեղծագործ կերպով։ Այսինքն այդ մրցաշարերին հազվադեպ են հանդիպում խնդիրներ, որոնց մեջ պետք է օգտագործել միանման ալգորիթմներ կամ ծրագրեր։ Ավելի հաճախ խնդրի մեջ ներկայացվում է կարճ պատմություն իր սյուժեյով, հերոսներով և իրենց հակամարտությամբ։ Այսպիսով օլիմպիադայի խնդիրը լուծելու համար անհրաժեշտ է նախապես կազմել իրադարձությունների մաթեմատիկական մոդելը և արդեն ըստ դրա կառուցել համապատասխան ալգորիթմը կամ ծրագիրը։ Ալգորիթմը կարող է լինել հայտնի կամ կարող է ստեղծվել լրիվ նորը։ Դասական և շատ պարզ խնդրի օրինակ է A+B-ն։ Այդ խնդիրը սովորաբար տեղադրում են օլիմպիադաների փորձնական փուլում։


== Ծանոթագրություններ ==