Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Ég var að undirbúa mig fyrir Google HashCode heimsmeistaramótið 2017. Þetta er stærsta keppnin með reiknirit vandamál á vegum Google.

Ég byrjaði að læra C++ frá grunni í níunda bekk. Ég vissi ekkert um forritun, reiknirit eða gagnauppbyggingu. Á einhverjum tímapunkti skrifaði ég fyrstu línuna mína af kóða. Sjö mánuðum síðar blasti við sjóndeildarhringurinn forritunarkeppnin. Mig langaði að sjá hversu vel stíll minn við að læra forritun virkaði. Það var hið fullkomna tækifæri.

Eftir tveggja daga keppni komu úrslitin: Ég vann gullverðlaun.

Mér var brugðið. Ég var á undan keppendum með 5 ára reynslu. Ég vissi að ég hafði lagt hart að mér en þetta afrek fór fram úr öllum mínum væntingum. Ég áttaði mig á því að íþróttaforritun var viðfangsefni mitt og dró mig ofan í það.

Ég veit hvað leiddi mig til velgengni og mig langar að deila því með ykkur.

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Greinin var þýdd með stuðningi EDISON Software, sem sér um heilsu forritara og morgunmat þeirraOg þróar sérsniðinn hugbúnað.

Hvaða forritunarmál á að velja

  • C++ - mæli eindregið með! Hann er mjög fljótur. Innleiðing reiknirita tekur lítinn tíma vegna STL. C++ er samþykkt í öllum keppnum. Ég skrifaði fyrstu línuna mína af kóða í C++.
  • C - Lærðu C++ vegna STL. Ef þú kannt C geturðu líka forritað í C++.
  • Java er hægt forritunarmál. Það er með Big Integer flokki, en það mun ekki hjálpa þér mikið. Ef keppni hefur tímamörk, með Java muntu örugglega fara yfir þau. Java er ekki samþykkt í öllum keppnum.

Hvar er hægt að æfa sig

ég mæli með Sphere Online Judge (SPOJ). Það er áhrifarík auðlind hvað varðar magn og gæði. Ritstjórar og lausnir eru fáanlegar á netinu ef þú festist í því að leysa vandamál. Til viðbótar við þessa síðu mæli ég með SPOJ verkfærakista и vandamálaflokkari fyrir SPOJ.pl.

Fyrst þarftu að skerpa á þekkingu þinni á grunnatriðum

Þegar þú hefur vanist setningafræði tungumálsins eru nokkur vandamál sem þarf að sigrast á. Byrjaðu á einföldum vandamálum sem krefjast æfingar. Á þessu stigi er aðalatriðið að ákvarða forritunarstílinn þinn. Kannski finnst þér gaman að skrifa kóða með miklu bili, kannski gerir þú það ekki. Þú gætir verið að setja svigana á sömu línu og "ef", eða þú gætir verið að setja þá á aðskildar línur.

Þú verður að finna þinn forritunarstíl því hann er þinn stíll.

Þegar þú leitar að því, mundu eftir tveimur grundvallarreglum:

  • Kóðinn þinn ætti að vera auðveldur í framkvæmd. Þér ætti að líða vel að útfæra lausnina sem þú kemur með. Hvers vegna? Vegna þess að meðan á keppni stendur er það síðasta sem þú vilt að villast í kóðanum þínum. Það er alltaf betra að eyða 5 mínútum til viðbótar í að hugsa um hvernig eigi að einfalda innleiðingu kóðans heldur en að eyða 10 mínútum í að finna út úr því.
  • Kóðinn þinn ætti að vera auðvelt að lesa. Þegar kóða er auðvelt að lesa er auðvelt að kemba hann. Við skulum horfast í augu við það - villur gerast alltaf. Þú þekkir þessa tilfinningu þegar þú átt 10 mínútur eftir og þú finnur ekki helvítis mistökin? Auðvitað gerir þú það. Til að forðast þetta ástand skaltu skrifa læsilegan kóða. Þegar þú byrjar að kemba hann mun kóðinn virðast eðlilegur og auðskiljanlegur.

Hér er dæmi um mitt forritunarstíl.

Hvernig á að bæta þroskafærni þína

Æfing, æfa og æfa meira. Ég mæli með að þú vinnur í gegnum fyrstu 250 leysanlegustu vandamálin SPOJ. Leysið þau í röð. Eyddu að minnsta kosti klukkutíma í að hugsa um lausnina fyrir hvert þeirra.

Ekki segja: "Þetta vandamál er of erfitt fyrir mig, ég skal reyna að leysa það næsta." Svona hugsa taparar.

Taktu blað og blýant. Hugsa um það. Kannski er hægt að finna lausn, kannski ekki. Að minnsta kosti munt þú þróa reiknirithugsun. Ef þú getur ekki fundið lausn innan klukkustundar skaltu leita að tilbúinni lausn á spjallborðinu eða í greinum.

Hverju munt þú ná með þessari nálgun? Lærðu að útfæra hugmyndir þínar fljótt með því að nota kóða. Og rannsakað klassísk vandamál og reiknirit.

Í öðru lagi verður þú að ná góðum tökum á reikniritum og gagnaskipulagi

Fylgdu stigveldisaðferð. Byrjaðirðu að hlaupa án þess að kunna að ganga? Nei. Geturðu byggt skýjakljúf án trausts grunns? Ekki aftur.

Þú getur ekki hunsað skrefin á námsleiðinni. Ef þú hunsar þá muntu sitja eftir með þekkingareyður. Með tímanum munu þeir bara versna.

Byrjaðu á grundvallaralgrímum og gagnaskipulagi

Það er erfitt að byrja. Kannski vegna þess að þú veist ekki hvað þú átt að læra fyrst. Þess vegna Ég bjó til myndbandsnámskeið „Reiknirit og gagnauppbygging“. Þegar ég bjó þetta námskeið til byggði ég það á því hvernig ég myndi vilja fá kennslu. Viðbrögðin voru ótrúleg! Meira en 3000 nemendur frá yfir 100 löndum skráðu sig á námskeiðið á fyrsta mánuðinum.

Ef þú vinnur að því að leysa auðveld vandamál muntu aldrei bæta þig.

Áhrifaríkasta leiðin til að skilja það sem þú veist ekki er að upplifa það í reynd. Þannig lærði ég. Ég lærði margar nýjar aðferðir sem ég hafði aldrei heyrt um áður með því að velja krefjandi verkefni.

Þriðja hvert vandamál sem þú vinnur við ætti að kenna þér eitthvað nýtt. Vertu varkárari þegar þú velur vandamál. Veldu erfiðari vandamál!

Þegar þú hefur lokið þessum 250 vandamálum frá SPOJ muntu hafa grunnskilning á kjarnaviðfangsefnum íþróttaforritunar. Með djúpum skilningi á rökfræðinni á bak við grunnalgrím, munu hástigs reiknirit virðast minna flókin. Þannig geturðu nýtt þekkingu þína sem best.

Farðu dýpra í hvert af aðalþemunum

Hér er dýrmæt auðlind með miklum upplýsingum. Þar finnur þú 10 bestu reiknirit og gagnaskipulag fyrir hvert efni. Eftir 250 vandamál frá SPOJ muntu vita mikið af þessum lista. En þú munt líka rekast á margt sem þú hefur aldrei heyrt um áður. Svo byrjaðu að kynna þér þessi efni í hækkandi röð.

Ef þú styrkir ekki þekkingu þína eftir að hafa lært eitthvað nýtt muntu fljótt gleyma öllu.
Ég mæli með því að nota það í reynd eftir að þú hefur lært nýtt reiknirit. Vinndu það í gegnum 2-3 verkefni. Leitaðu að reikniritmerkinu í SPOJ. Þar finnur þú vandamál sem þarfnast þessa reiknirit til að leysa. Taktu á þessum málum fyrst.

Lærðu kraftmikla forritun vegna þess að það mun leiða þig til sigurs
Af minni reynslu hefur hver keppni að minnsta kosti eitt vandamál kraftmikla forritun. Margir fá höfuðverk þegar þeir heyra setninguna „dýnamísk forritun“ vegna þess að þeir skilja hana alls ekki.

Og þetta er gott. Vegna þess að ef þú skilur kraftmikla forritun, þá muntu vinna.

Mér líkar við kraftmikla forritun, það er uppáhaldsefnið mitt. Leyndarmál kraftmikillar forritunar er að taka ákjósanlegar ákvarðanir á heimsvísu, ekki bara staðbundnar. Þú verður að skipta vandamálinu niður í einfaldari undirvandamál. Leysið hvert þessara undirvandamála aðeins einu sinni. Búðu síðan til lausn sem sameinar leyst undirvandamál. Gráðugur reiknirit - andstæðan við kraftmikla forritun. Það krefst þess að gera ákjósanlegar ákvarðanir á staðnum í hverju skrefi. Og staðbundið ákjósanlegt val getur leitt til slæmrar alþjóðlegrar lausnar.

Þegar þú lærir ný hugtök skaltu skoða TopCoder kennsluefni. Þau eru mjög ítarleg og skiljanleg. Þökk sé þeim gat ég skilið tvíundir verðtryggð tré.

Vinna hörðum höndum

Hefur þú einhvern tíma heyrt um íþróttamenn sem vinna Ólympíuleikana án margra ára æfinga? Ég ekki.

Á hverju ári hófst undirbúningur fyrir tölvuólympíuleikana í september og lauk í apríl.

Á hverjum degi í þessa 8 mánuði æfði ég í 5 tíma.

Og já, ég eyddi þessum 5 tímum aðeins í að leysa reiknirit vandamál. Ég man eftir þeim dögum þegar ég æfði í 8 og jafnvel 10 tíma. Hvers vegna? Því mér líkaði það. Á hverjum degi þegar ég kom heim úr skólanum fór ég beint inn í svefnherbergi, settist við tölvuna og fór að greina nýtt vandamál. Eða ég var að læra nýtt reiknirit sem ég þurfti að kunna til að leysa þetta vandamál.

Ef þú vilt vinna þarftu að gera það sama. Veldu vandamál og haltu þig við það. Hugsaðu um það á meðan þú gengur í matvörubúðina eða á meðan þú keyrir.

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Vissir þú að þegar þú sefur, sundrar heilinn þinn upplýsingarnar sem safnað er þann daginn? Hann virðist vera að stafla bókum í stafrófsröð í bókahillu. Í meginatriðum hugsar heilinn þinn um hin ýmsu vandamál sem þú stendur frammi fyrir.

Þetta er hægt að nota af kunnáttu. Áður en þú ferð að sofa skaltu lesa erfið vandamál og muna hvað þarf til að leysa það. Á þessu stigi þarftu ekki að leita að lausninni sjálfri. Farðu að sofa. Heilinn þinn mun byrja að vinna úr þessu vandamáli. Þegar þú vaknar verður þú hissa á að átta þig á því að þú hafir fundið lausnina á meðan þú varst sofandi.

Prófaðu það sjálfur. Það er eins og galdur.

Ég bjó til myndbandsblogg

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Þessi stutta málsgrein tengist ekki íþróttaforritun. Ef þú ert um tvítugt og veltir fyrir þér hvernig ég sé heiminn gætirðu viljað kíkja á það myndbandsbloggið mitt á Youtube. Ég tala um heiminn, lífið og tölvunarfræðina í honum.

Vinna skynsamlega

Þetta er leyndarmál velgengni. Þú þarft markmið.

Við erum fólk og okkur líkar það fresta. Við viljum alltaf fresta því sem þarf að gera núna. Að horfa á Netflix er alltaf skemmtilegra en að takast á við kraftmikil forritunarvandamál. Þú veist þetta og þú þarft að laga það.

Hvernig á að vinna bug á frestun

Settu þér markmið. Þú munt alltaf finna áhugaverð vandamál sem þú getur lært eitthvað nýtt af (skoðaðu úrræðin sem ég nefndi hér að ofan). En þessi vandamál þarf að leysa, ekki bara lesa um.

Svo hér er hvernig ég sigraði frestun. Ég byrjaði á pappírsdagatali og fyllti hvern dag af vandamálum sem ég vildi leysa. Ég fyllti alltaf út vandamál með tveggja daga fyrirvara. Svo ég vissi hvernig ég ætti að stjórna tíma mínum næstu daga.

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad

Svo ég var alltaf áhugasamur. Ég þurfti að leysa nokkur vandamál og finna ný til að fylla næstu daga á dagatalinu. Það er frábært að krossa við leyst vandamál. Ég veit að þér líkar það líka.

Fáðu þitt eigið pappírsdagatal. Ekki búa til annan verkefnalista í símanum þínum sem þú munt gleyma á morgun.

Hvernig á að kemba á áhrifaríkan hátt

Viltu verða atvinnumaður? Ef já, þá þarftu að „kemba það í huganum“.
Þetta er lang skilvirkasta villuleitartækni sem ég veit um vegna þess að það krefst alls ekki villuleitar. Heilinn þinn skoðar margar kóðagreinar í einu og gefur þér miklu víðtækari yfirsýn yfir kóðann miðað við klassískt villuleit.

Þú getur borið þig saman við stórmeistara sem teflir og telur 3 skref á undan.

Ég nota þessa tækni eingöngu sem upphafsvörn mína. Svo nota ég alvöru kembiforrit.

Til að læra hvernig á að kemba í hausnum þínum þarftu að æfa þig. Þegar þú staðfestir lausn á vandamáli og færð „rangt svar“ skaltu ekki fara beint í villuleitarhnappinn. Lestu kóðann aftur og hugsaðu: "Hvað er að gerast í þessari línu?", "Hvernig hefur "ef" hér áhrif á forritið?", "Þegar við förum út úr lykkjunni, hvert er gildi endurtekningsins?"

Þannig hugsarðu sjálfur. Með tímanum muntu læra að skrifa kóða og kemba hann á flugu.

Um höfundinn

Hvernig ég vann 3 af 4 gullverðlaunum á Computing Olympiad
Andrei Margeloiu er ákafur forritari með áhuga á frumkvöðlastarfi, sprotafyrirtækjum og útiveru. Þú getur haft samband við hann á LinkedIn.

Þýðing: Diana Sheremyeva

Heimild: www.habr.com

Bæta við athugasemd