63 hold mødt op lørdag morgen på Københavns Universitet og Aarhus Universitet for at konkurrere om det traditionsrige DM i Programmering.
Og i år er der spænding om udfaldet.
For alle deltagerne på sidste års vinderhold, The Ballon Animals fra Københavns Universitet, der løste alle opgaverne og ikke bare vandt det danske mesterskab, men var de bedste i hele Norden, er faldet for aldersgrænsen og deltager i stedet som old boys hold udenfor den officielle konkurrence.
Forrige års vindere, The floor is made of Java med Alice Ryhl i spidsen, der vandt to år i træk, er også faldet for aldersgrænsen.
Så i år er det åbent, hvem der i år vinder den officielle turnering, hvor man skal være universitetsstuderende på de første år af studiet for at kunne deltage.
Konkurrencen foregår i hold på hver tre personer.
Det gælder om at løse flest af programmeringsopgaverne på de fem timer, konkurrencen varer.
Hvis flere hold har løst det samme antal opgaver, er det tiden, der afgør, hvem der vinder.
Når man har løst en opgave, sender man programmet ind til en server, der tester programmet mod nogle testdata. Hvis man indsender en løsning, der indeholder fejl eller ikke kan klare alle testcasene, får man 20 strafminutter og må prøve igen.
Så frigives opgaven
Klokken 11:00 bliver opgaver frigivet, og der bliver helt stille i kantinen på biocenteret på Københavns Universitet, hvor konkurrencen på Sjælland foregår, og hvor der er samlet hold fra Københavns Universitet, ITU og DTU.
De jyske hold er samlet på Aarhus Universitet, og konkurrencen bliver samtidigt afholdt på lokationer i Sverige, Norge, Finland, Island, Letland og Estland.
Når konkurrencen går i gang, gælder det om at få identificeret de nemme opgaver og få løst dem hurtigst muligt.
Der er tale om algoritmiske opgaver, hvor programmerne ikke behøver at være særligt lange, men hvor det svære ligger i at udvikle en algoritme, der kan løse problemet.
Opgaverne varierer i sværhedsgrad fra opgaver, som mange af holdene kan løse på få minutter, til opgaver, som de fleste programmører ville skulle bruge flere dage på at løse.
Syv minutter
Og mens de erfarne oldboys fra The Ballon Animals finder og løser den første opgave på kun syv minutter, så volder opgaverne større problemer for øvrige deltagere.
Det første universitetshold, der løser en opgave, er Big O No fra Aarhus Universitet, der løser den første opgave efter 11 minutter, efterfulgt af Bit Flippers fra Københavns Universitet, der løser den første opgave efter 17 minutter.
De bliver dog hurtigt overhalet af et af favoritholdene, Lord of the Graphs fra DTU, der blev nummer fem sidste år.
De får løst opgave nummer to efter 34 minutter. Dermed tegner det som så ofte før til at blive et opgør mellem Københavns Universitet, Aarhus Universitet og DTU.
Efter 53 minutter lykkes det string & a long fra Københavns Universitet at løse opgave nummer tre, men de bliver med det samme indhentet af Ctrl Alt Elite fra ITU, der også løser opgave nummer tre.
Så lige pludselig er der fem forskellige hold, der kan gøre sig gældende i konkurrencen, der dermed er mere åben end den har været i mange år, hvor der ofte har været et enkelt hold, der har domineret konkurrencen.
Efter 67 minutter lykkes det Ctrl Alt Elite fra ITU at løse opgave nummer fire skarpt efterfulgt string & a long fra Københavns Universitet, der løser opgave nummer fire efter 69 minutter. Og efter 74 minutter lykkes det også Kotlin Supporters fra Aarhus Universitet at løse den fjerde opgave.
Så skifter konkurrencen karakter
Men efter den første halvanden time skifter konkurrencen karakter.
Konkurrencen bliver nemlig i sidste ende ikke afgjort af hvem, der er hurtigst, men hvem der kan løse de svære opgaver. I alt har man fem timer til at løse så mange af de 11 opgaver som muligt.
Og de sværeste opgaver tager selv de bedste hold flere timer at løse.
Man skal ikke bare lave et program, der kan løse opgaverne, man skal ofte også finde en effektiv løsning, som kan løse opgaverne indenfor den specificerede køretid, for testdatasættene kan være endog meget store.
Og når opgaverne bliver sværere, begynder de mere erfarne hold at markere sig i konkurrencen.
Efter halvanden time får string & a long fra Københavns Universitet løst den femte opgave, men efter to timer bliver de overhalet af holdet Øhmmm? fra Københavns Universitet, der løser den sjette opgave.
Men allerede 10 minutter senere får holdet Brown Bananas fra Aarhus Universitet også løst opgave nummer seks og lægger sig i spidsen, fordi de har haft færre fejlagtige løsningsforsøg end Øhmmm?, og dermed har fået færre strafminutter.
Efter to en halvt time løser Brown Bananas fra Aarhus Universitet også opgave nummer syv, og så sker der ikke rigtigt noget den næste time, hvilket forklarer, hvorfor DM i Programmering ikke tiltrækker lige så mange tilskuere som de store esport begivenheder. Men det er spændende at følge med i, hvis man interesserer sig for algoritmer.
Efter tre en halv time time lykkes det også Kotlin Supporters fra Aarhus Universitet og string & a long, Bit Flippers og Øhmmm? fra Københavns Universitet at løse den syvende opgave.
Og så er Danmarksmesterskabet pludseligt fuldstændigt åbent.
For det er i sidste ende antal løste opgaver og ikke tiden, der afgør, hvem der bliver Danmarksmestre.
Og efter fire timer er der fem hold, der har løst syv opgaver.
Så danmarksmesterskabet vil nu blive afgjort af, om der er et af de fem hold, som er i stand til at løse den ottende opgave.
Danmarksmesterskabet er pludseligt mere åbent og mere spændende, end det har været nogensinde før i konkurrencens historie.
Slutspurten sættes ind
Den sidste time af konkurrencen bliver tavlen med stillingen ikke længere opdateret. Holdene ved derfor ikke længere, hvordan de andre hold ligger, og om nogle af de andre hold har løst den ottende opgave.
Det er først til sidst ved selve præmieoverrækkelsen, at det bliver afsløret, hvem der har vundet konkurrencen.
Den ottende opgave er en virkelig tricky opgave, der går ud på at montere elektroniske komponenter.
Man har en mængde af elektroniske komponenter af op til 1.000 forskellige typer, og hver type tager forskellig tid at montere.
Maskinen kan montere op til to komponenter ad gangen, og det er den langsomste komponent, der afgør hvor lang tid, det tager at montere de to komponenter.
Men maskinen kan kun montere to komponenter af forskellige typer ad gangen, ikke to komponenter af den samme type. Opgaven går så ud på at udvikle en algoritme, der indenfor den maksimale køretid på fire sekunder kan finde den optimale måde at montere komponenterne på.
Mange af holdene kæmper hårdt med dette problem og indsender mange forkerte løsninger. Men kun to minutter før de fem timer er gået, lykkes det string & a long fra Københavns Universitet at indsende en korrekt løsning i ottende forsøg. Dermed overhaler de Brown Bananas fra Aarhus Universitet, der har sendt fem forgæves forsøg på at løse opgaven.
Se slutstillingen blandt de danske hold: https://ncpc23.kattis.com/contests/ncpc23/standings?filter=5259
string & a long består af William Meyling, Thor Eriksen og Elias fra Københavns Universitet, og de er ikke helt uvante med at løse algoritmiske opgaver. Tidligere på året var William Meyling således med til at vinde verdensmesterskabet i computer-geometri, hvor man også skulle udvikle en algoritme, der kunne løse et geometrisk optimeringsproblem hurtigst muligt.
Det kan du læse mere om her: https://barc.ku.dk/news/bachelor-project-at-barc-wins-computational-geometry-challenge
De bedste hold fra hvert universitet går videre til den nordeuropæiske finale NWERC, der i år bliver afviklet i Delft i Holland til november.
Og de bedste hold fra NWERC går videre til verdensmesterskabet i programmering. Det er kun en gang lykkedes et dansk hold at kvalificere sig til VM. Men string & a long blev nummer tre i Norden og har dermed en god chance for at gå videre til verdensmesterskabet.
Udenfor konkurrencen deltog forskellige oldboyshold, blandt andet The Baloon Animals, der vandt hele den nordiske konkurrence sidste år.
De løste hele ni opgaver på de fem timer, og blev nummer to blandt oldboys holdene i Norden, kun overgået af det legendariske Omogen Heap hold fra Sverige, der løste 10 opgaver.
DM i Programmering har også en mindre søskende, Dansk Datalogi-Dyst for gymnasielever.
Dansk Datalogi-Dyst er en del af Science Olympiaderne, der også omfatter konkurrencer i matematik, kemi, fysik, biologi og geografi. Dansk Datalogi-Dyst begynder i dag mandag 9. oktober og varer tre uger frem.
Man kan både løse opgaverne indsende dem online eller træne på øvelsesopgaverne. Hvis du kender en datalogi-interesseret gymnasie- eller folkeskoleelev, så kan man læse mere på siden https://danskdatalogidyst.dk/
DM i Programmering er sponseret og arrangeres af Netcompany og Jobindex, der ejer Computerworld, og afholdes i samarbejde med universiteterne.