Nettavis for fredag 2004

Skrevet av Åsmund, Eirik og Kim

Den siste hele arbeidsdagen er her, og folk nærmer seg innspurten på gruppeoppgavene. Pavel startet som vanlig dagen med morgenoppgaven; denne gangen med en oppgave som satte grå hår i hodet på alle oss som var vant til C/C++ eller andre ordinære språk. Han introduserte språket Lisp, som er et såkalt funksjonelt språk. Det finnes ikke variabler, og det eneste man har muligheten for å gjøre, er å kalle funksjoner. Det eneste man kan sende som parametre til en funksjon eller returnere fra en funksjon, er konstanter eller returverdier fra andre funksjoner. Hele språket baserer seg altså på kalling av funksjoner, og rekursjon er uunngåelig. Den eneste datastrukturen er lister av ukjent størrelse, og de innebygde funksjonene er svært få, men desto kraftigere hvis man bruker dem riktig. Det er et mareritt å skrive og lese programmene, men det er visstnok mye som kan skrives veldig kort og elegant i Lisp. La oss sammenligne koden for summering av alle tall i en liste.

C

int sum(int * L, int size) {
    int result, n;
    result = 0;
    for (n = 0; n < size; ++ n) {
        result += L[n];
    }
    return result;
}

Lisp

(defun sum L(if (empty L) 1 (* (first L) (listmultiply (rest L)))))

Enkelte på gruppen oppdaget hvor farlig det var å få inn ett enkelt tegn for mye (noe som har kostet mang en programmerer viktige poeng i konkurranser). Han skulle foreta sammenligningen (y + 1) > H, men skrev (y += 1) > H. Førstnevnte sammenligner tallet y + 1 med H, mens den andre først øker verdien av y med 1 for så å sammenligne y med H. Når programmet kjøres, blir resultatet av sammenligningen blir det samme (slik at feilen ikke merkes der og da), men den etterfølgende koden vil produsere gale resultater fordi y nå har en annen verdi enn den skulle ha hatt.

Eirik har i lengre tid blitt utsatt for lettere kritikk for at han bruker Basic (et gammelt, tregt, utskjelt programmeringsspråk som attpåtil er et Microsoft-produkt :P ). Han gir seg imidlertid ikke, og er nå i gang med "Internal Speaker Orchestra by Eirik Bakke". Programmet er fremdeles i en betafase, men klarer faktisk å synkronisere PC-høyttalerne på flere maskiner slik at flere maskiner spiller en melodi sammen.

BASIC Program

Algoritmegruppa hadde en diskusjon om hvor gjørbart det var å komprimere all informasjonen på Internett og samle den. Diskusjonen ble stort sett drevet frem av Eirik, som mente at det kunne gjøres. Imidlertid ble han snart overbevist om at det ikke kunne gå, etter noen anslag på størrelsesordenen til informasjonsmengden og hurtig forkasting av foreslåtte algoritmer for komprimering og avgjøring av hvilken informasjon som er interessant.

Thomas P er i gang med å utforske Direct3D, som er en grafikk-API.

AI-gruppa arbeider videre med robotkonstruksjonen, og assisterer dessuten noen fra algoritmegruppa, som sniker seg inn for å konstruere lego-roboter, de også. Lego er bra. Veldig bra. Den siste dagenes prosjekt er en heis. Den kryper opp, og ned, og opp, og litt for langt opp, og må stoppes før den hopper av sporet sitt. Likevel et teknisk vidunder av de helt store.

Lego heis

Cyber Olympics

Cyber Olympics

Det går ikke mange timene før årets Cyber Olympics er i gang; denne ufattelige begivenheten skulle vise seg å bli en både nervepirrende og mentalt krevende opplevelse for de tre lagene som deltok. Av de involverte grenene kan nevnes oppgavefinningsorienteringsløp med påfølgende papirlabyrinter, asynkron dataoverføring på gressplen med feilretting over støyutsatt overføringslenke, menneskelig androidekommando ved nedsatt syn, midtnorsk mesterskap i kapitelær-avhengig konsonanttasting og eggekasting samt pakkekollisjon med dvergløfting til følge. Det var heller ikke stemning det manglet blant publikum idet en undergruppe av leirfolket dundret sammen i et heller vannløselig hångemeng. Det store spørsmålet er imidlertid: hvordan kaster man best et papirark bortover marken for å få det til gå lengst mulig? Mahnamahna.

Red.adm: Det ble tidligere i denne reportasjen henvist til et stykke kode. Det er i ettertid funnet noen feil i denne. Det riktige kodeeksempelet skal lyde:

FUNCTION sum(L(), size)
  result = 0
  FOR n = 0 TO size
    result = result + L(n)
  NEXT n
    sum = result
END FUNN