Norsk informatikkolympiade

Om Rundene

NIO arrangerer 3 runder, og formatet er litt ulikt fra runde til runde. Runde 2 og finalen ligner oppgavene i de internasjonale olympiadene, bare en god del enklere. Denne siden beskriver formatene til rundene, og lenker til litt praktisk tilleggsinformasjon.

Runde 1

Første runde arrangeres en uke i slutten av året, oftest uke 46. Testen skal utføres på skolen under tilsyn av lærer, som selv kan finne en passende ukedag og tidspunkt for gjennomføringen. Lærere som ønsker å arrangere NIO på sine skoler kan melde seg på for å få tilgang. Når du er påmeldt får du e-post fredagen uka før konkurransen starter. Se forsiden for årets program.

Konkurransen er individuell, og gjøres på PC. Du trenger ikke installere noe, men får en lenke og kode av læreren som arrangerer. Koden er felles for skolen, så man trenger ikke melde på elever individuelt. Når du starter testen oppgir du e-post-addresse, slik at vi kan kontakte de som kommer vidre til 2. runde.

Runden består av omtrent 10 oppgaver, og deltagerene får 40 minutter på seg. Hver oppgave finnes i 3 varianter i stigende vanskelighetsgrad som gir henholdsvis 2, 3 eller 4 poeng. Hvis man løser flere varianter av samme oppgave får man kun poeng for den vanskeligste, så det er mulig å spare tid ved å hoppe over noen av de letteste. Du får så mange forsøk du vil på oppgavene, og kan fritt hoppe mellom oppgaver. På forsiden har du hele tiden oversikt over hvor mange poeng du har sikret deg så langt.

Bebras-eksempel
Skjermbilde av en typisk oppgave fra runde 1.

Oppgavene skal teste systematisk tenking og programmering, men det kreves ingen tidligere programmeringskunnskaper. Oppgavetekstene forklarer alt du trenger å vite, og utover det får du ingen andre hjelpemidler enn papir og blyant. Du kan altså ikke bruke internett, bøker eller programmer utenfor konkurransenettsiden.

Det digitale formatet for runde 1 begynte i skoleåret 2018/2019. Du kan prøve deg på en tidligere runde ved å gå til tidligere oppgaver. Her finnes også noen oppgaver fra før runde 1 ble digital.

Runde 2

De ca. 100 beste fra runde 1 publiseres på nettsiden og inviteres til runde 2. Den varer en hel uke i Januar, og består av 4-5 oppgaver.

Oppgavene

Oppgavene går ut på å skrive dataprogrammer som løser konkrete problemer, der programmet ditt skal lese inn parametere og gi ut et korrekt resultat.

Runde 2-eksempel
Skjermbilde fra en enkel runde 2-oppgave. “Unike tall” fra runde 2 2018/2019.

Du kan se flere eksempler blant tidligere oppgaver. For trening og tips til denne typen oppgaver, se treningssiden. Mange av oppgavene fra tidligere runde 2 og finaler ligger også på treningsserveren. Her kan du levere egne løsninger og få poeng.

Poeng

Når du har et program leverer du det til konkurranseserveren. Der testes programmet på en mengde med hemmelig input. Den hemmelige inputen er delt opp i grupper med ulike begrensninger, og programmet ditt testes på alle.

Runde 2-testgruppe-eksempel
Skjermbilde av Begrensningene fra samme runde 2-oppgave.

Dersom programmet ditt gir riktig svar på alle inputs i en gruppe, får du poengene for den gruppen. Hvis programmet ga feil svar, krasjet eller brukte for lang tid på noen av inputene får du 0 poeng for den gruppen. Du kan prøve på nytt og levere så mange ganger du vil1. Oppgavene varierer i vanskelighetsgrad, men alle gir til sammen 100 poeng. Akkurat som i runde 1 har du til envher tid oversikt over hvor mange poeng du har fått til nå.

Språk

Programmet du skriver må være i ett av de godkjente programmeringsspråkene: Python 2/3, Java eller C++11. Vi anbefaler C++ siden samme algoritme ofte er raskere i C++. Hvor mange poeng du får er ikke basert på hvor raskt programmet kjører, men programmet må være raskt nok på alle testinput i gruppen for å få poeng. Fasit kjører oftest innen en brøkdel av tidsbegrensningen, men den er skrevet i C++. Vi garanterer ikke at andre språk vil være raske nok.

Regler

Du har lov til å bruke alt av hjelpemidler, bortsett fra å spørre andre om oppgavene eller dele løsninger. Dette er en mulighet til å lære både programmeringsspråk, konkurransesystem og kjente algoritmer.

Det er ikke lov til å omgå konkurranseserveren, prøve å datamine den hemmelige testinputen eller lignende.

Finale

De ca. 20 beste fra runde 2 inviteres til finalen på Universitetet i Bergen. Oppholdet er ca. 4 dager, og NIO dekker kost og losji.

På finalen er formatet likt som runde 2, med 4-5 oppgaver som skal programmeres. Oppgavene er betraktelig vanskeligere, og man får kun 5 timer. De eneste hjelpemidlene man får er blyant og papir, og eventuelle hjelpemidler trykt på papir du tar med deg på konkurransen. Deltagerene sitter på identiske linux-datamaskiner, og har ikke tilgang til internett. Dokumentasjon for programmeringsspråkene ligger på maskinene.

Selv om maskinene kjører linux er desktopen ganske vanlig. Man har flere teksteditorer (gedit, vim, etc.), en filutforsker, og konkurransesystemet åpnes i firefox. Maskinene har minst C++11, Java 8 og Python 3, i tillegg til verktøy som gdb2. Det kan være lurt å lære seg hvordan man kompilerer og tester koden sin i terminalen, men det får man tid til på treningsrunden dagen før finalen.


  1. Vi setter noen begrensninger for å hindre misbruk, men i praksis har man så mange forsøk man vil. ↩︎

  2. Det kan være veldig praktisk å kunne noen gdb-kommandoer for de som skriver C++. Det kan f.eks. fortelle deg hvilken linje programmet krasjer på. ↩︎