Besvarelsens innhold

I den innledende runden vil vi fokusere på deltagernes evner til å løse problemer på en strukturert måte - med andre ord algoritmisk tenking. Det viktigste er altså å finne på en algoritme (fremgangsmåte) for å løse problemet, og du trenger faktisk ikke å skrive noe program. Det er imidlertid viktig at algoritmen er mulig for en datamaskin å utføre. En besvarelse må inneholde minst ett av følgende:

  • En detaljert beskrivelse av algoritmen. Den bør ikke inneholde noen tvetydigheter, og alle trinnene må være mulige for en datamaskin å utføre.
  • Koden til et program som løser problemet (eller som prøver å løse det). Ikke send et kompilert program. Denne koden vil bli kompilert av oss og kjørt mot testdata for å se om den fungerer.

Hvis du leverer begge deler, er det naturlig nok meningen at programmet skal følge den algoritmen som er beskrevet. Andre ting vi setter pris på, men som ikke er nødvendig, er:

  • Bevis for at algoritmen fungerer (her trenger du ikke å referere til programkoden; du skal bare argumentere for at fremgangsmåten alltid gir riktig svar).
  • Kompleksitetsanalyse av programmet ditt. Det vil si at du skal finne et matematisk uttrykk for hvor lang tid og hvor mye minne programmet ditt bruker, gitt en viss inputstørrelse. Dette er et vanskelig felt, og vi forventer ikke at folk skal kunne dette.
  • En forståelig, pent formatert og godt kommentert kildekode. Merk at "godt kommentert" ikke betyr at du skal kommentere hva hver eneste linje gjør (vi skjønner f.eks. godt at a = b + c regner ut b + c og lagrer resultatet i a). Det betyr snarere at kommentarene skal forklare hvorfor ikke-åpenbare ting gjøres (hva var f.eks. grunnen til at man la sammen b og c og lagret resultatet i a?). Skriv kommentarer ut i fra at de som skal lese koden din er flinke til å programmere, men ikke aner hvordan programmet ditt er bygd opp eller hva som er logikken bak det.

Man kan maksimalt få 10 poeng for en oppgave. Poengene er fordelt slik:

Selve algoritmen (hvor bra den er)3.5
Beskrivelse av algoritmen, pluss evt. analyse2.0
Kjøring av programmet mot testdata2.5
Bevis1.0
Lesbar og kommentert kode1.0

Valg av programmeringsspråk

Innledende runde

I den innledende runden godtar vi de fleste språk. Dette er fordi vi ikke vil kreve at folk må lære seg et nytt språk for å kunne delta i NIO. Imidlertid skal besvarelsene i den innledende runden rettes for hånd av arrangørene i tillegg til at de skal kompileres og kjøres. For at vi skal godta besvarelser på et visst språk er det derfor nødvendig at språket er noenlunde saklig (dvs. at vi ikke godtar Whitespace, Befunge eller andre språk som er skrevet for spøk), samt at det finnes gratis kompilatorer og dokumentasjon for det (VisualBasic og .NET-språkene er unntatt fra regelen om gratis kompilatorer).

Språk vi foretrekker:

  • C++
  • C
  • Java

Eksempler på andre populære og/eller klassiske språk som vi godtar er:

  • C#
  • J#
  • Objective-C
  • Python
  • VisualBasic og VisualBasic.NET (unntaket fra regelen om gratis kompilatorer)
  • BASIC og dets avarter
  • Perl
  • Lisp, evt. med CLOS
  • Fortran

Hvis du gjerne vil bruke et annet språk enn de du finner på listene her, er det bare å kontakte oss for å høre om vi godtar det språket eller ikke.

Viktig: NIO sine oppgaver krever ikke bruk av grafiske brukergrensesnitt eller biblioteker/klasser som ikke er standard, og du bør unngå å bruke slike i programmet. Se gjerne på eksempeloppgaven og løsningen.

NIO-finalen

Under finalen er man nødt til å levere inn fungerende programmer som skal kompileres og kjøres av et kontrollprogram. Vi foretrekker at finaledeltagere lærer seg ett av språkene i listen under, fordi det er de språkene som kontrollprogrammet støtter. Vi kan imidlertid godta andre språk også. Dette vil eventuelt avtales med finaledeltagerne etter den innledende runden.

  • C++
  • C
  • Java
  • Pascal

IOI

Kontrollprogrammet IOI benytter støtter kun følgende språk:

  • C++
  • C
  • Pascal

Ingenting annet tillates, så de fire som kvalifiserer seg til IOI er nødt til å kunne ett av disse språkene. Det er nok tid mellom NIO og IOI til å lære seg ett av dem hvis man ikke kan noen fra før av.