Nederlands Kampioenschap Programmeren dit jaar op de UT

Aanstaande zaterdag wordt op de Universiteit Twente het Nederlands Kampioenschap Programmeren (NKP) gehouden, zo meldt de organisatie in een persbericht. Het NKP wordt dit jaar georganiseerd door Inter-Actief, de studievereniging van de faculteit Informatica. Honderd programmeurs proberen zaterdag acht praktische problemen op te lossen door daar een programma voor te schrijven. De opdrachten zijn bedacht door verschillende docenten en studenten en elk team heeft de beschikking over slechts één computer. De deelnemers zijn afkomstig van negen universiteiten en hogescholen. Volgens de organisatie is het niveau dit jaar weer vrij hoog. Het wordt de verschillende teams dus weer flink lastig gemaakt:

NKP2003 logo'De afgelopen jaren is gebleken dat het niveau aardig hoog ligt. Geen van de teams kreeg alle opgaven opgelost, ook de kampioen van vorig jaar niet.' Wat dat betreft liggen er kansen voor de Twentse programmeurs: 'We groeien in de strijd. Vorig jaar werd één van onze teams zelfs vierde. Nationaal gezien is dat een heel knappe prestatie.'

Door Matthijs Abma

22-10-2003 • 22:19

73

Bron: NKP2003

Reacties (73)

73
70
46
17
2
13
Wijzig sortering
Ik ben benieuwd welke taal ze gebruiken om te programmeren.
Wordt er van tevoren vast gesteld welke deze is? Of mag ieder team het voor zichzelf bepalen?

En waar wordt erop gelet bij het beoordelen van de opdrachten?
Anoniem: 18598 @BramBo22 oktober 2003 22:37
"3.3.2 Oplossingen moeten geschreven worden in C/C++, Java of Pascal."

Zie ook http://www.nkp2003.nl/.
In de regelementen stond lange tijd dat je alleen in C, C++ of Java mocht programmeren. Pascal wordt in de regelementen die in het programmaboekje staan vermeld niet eens genoemd. In dat boekje staat vervolgens wel doodleuk dat Pascal beschikbaar is, maar dan alleen onder Linux.

Ik kan alleen hopen dat de organisatie in Enschede het dit maal beter doet dan de organisatie van het NKP 1998 (ook gehouden in Enschede).

Groningen staat 6 maal op de beker van de 11 maal dat de wedstrijd gehouden, dus daarom ook maar even twee links naar succesvolle NKP's gehouden in Groningen 8-)

http://www.nkp2000.nl
http://www.wing.rug.nl/~nkp
Janoz Moderator PRG/SEA @hwh23 oktober 2003 10:20
afaik was dat 99, en dat was idd behoorlijk ruk georganiseerd. Nu ben ik natuurlijk wat biased richting linux systemen, maar dat windows systeem lag er daar 1 uur in de wedstrijd al uit! Je kon je oplossingen wel inleveren, maar je hoorde vervolgens nooit of ze wel juist waren! Daar heb ik me later nog behoorlijk over lopen opwinden eigenlijk.

[edit] @jvo
Owh ok, ik zal nog wel ff op m'n kubus tshirt kijken waneer het was ;)
Dat was niet 1999, want toen was er geen nk. Er was in dat jaar alleen een ek, in Den Bosch.
edit:
En inderdaad ook een wk natuurlijk.
Pascal is toegevoegd na een e-mail van mij naar de organisatie waar de Pascal compiler was. Pascal is één van de drie talen, de overige zijn C en Java, die internationaal op programmeerwedstrijden gebruikt worden.
Er kan geprogrammeerd worden in C, C++ en Java, en Pascal, hoewel de laatste ivm restricties die freepascal aan je OS oplegt alleen onder Windows te gebruiken is.
Bij het beoordelen van de resulaten wordt natuurlijk gekeken of het resultaat is wat het zou moeten zijn?
Degene die er het dichtste bij zit of het gewoon goed heeft zal de winnaar van die ronde zijn?
Het programma wordt gedraaid op een (voor de programmeurs onbekende) testset en de uitvoer wordt vergeleken.
De score wordt in de eerste plaats bepaald door het hoogste aantal goede antwoorden en in de tweede door de laagste tijd. (Voor elke goedgekeurde opgave de tijd in minuten vanaf het begin van de wedstrijd plus 20 minuten voor elke foute inzending.)
Er is dus maar 1 ronde.
Er kan geprogrammeerd worden in C, C++ en Java, en Pascal, hoewel de laatste ivm restricties die freepascal aan je OS oplegt alleen onder Windows te gebruiken is.
Dit gold voor het nkp2002. Destijds werd onder Solaris gewerkt en daar was inderdaad geen fpc voor.
Bij het beoordelen van de resulaten wordt natuurlijk gekeken of het resultaat is wat het zou moeten zijn?
Degene die er het dichtste bij zit of het gewoon goed heeft zal de winnaar van die ronde zijn?
Je moet exact dezelfde uitvoer genereren als het programma dat de jury uitvoert. Je weet helemaal niets van de Juryimplementatie, je krijgt alleen te horen of jouw oplossing goed of fout was.

Wie de meeste opgaven goed heeft, wint. Bij gelijke opgaven geldt de tijd die je verbruikt hebt, zodra je een opgave goed inlevert wordt de tijd vanaf het begin van de wedstrijd plus 20 minuten voor iedere foute poging bij je totale tijd opgeteld. Het klinkt als een vreemd systeem, maar werkt perfect en is zeer eerlijk.
Dergelijke wedstrijd is mijns inziens totaal onzinnig en zegt niets over je capaciteiten als programmeur

Dit is meer een wiskunde/logisch denken wedstrijd dan iets anders, er staat letterlijk op de site "enkel het resultaat telt, je mag zo ranzig programmeren als je wil"

In een echte programmeerwedstrijd wordt niet het resultaat bekeken, maar wèl de code
het gaat ook niet om de code, het gaat om de oplossingen.

Kan jij als programmeur een gegeven probleem oplossen binnen de gestelde tijd en grenzen?

Hoe ranzig je het oplost maakt niet uit.. net programmeren zegt niks over je programmeer kunst, hoewel het wel helpt.

Maar quick hacks coden gaat nu eenmaal sneller dan super nette optimized code. En met ranzige code gaat het om je analytisch denk en werk vermogen...... iedere typemonkey kan nette code inkloppen, maar niet elke typemonkey kan een probleem goed tacklen...
typemonkey kan nette code inkloppen, maar niet elke typemonkey kan een probleem goed tacklen...
Uiteraard is een werkend programma erg belangrijk, maar ik zou graag een werkend programma dat bovendien nog een beetje netjes is geprogrammeerd. Ik ben nu al bijna 15 jaar programmeur en ik wordt regelmatig geconfronteerd met de 'apres nous le deluge' programmeurs (na ons de zondvloed - Louis XIV). Programmeren alsof de code nooit gedebugged hoeft te worden, of alsof er nooit iets aangepast moet worden. Vreselijk. Ik heb vaak genoeg dagen zitten werken om van een quick hack fatsoenlijke (én stabiele/werkende) code te maken. De kokosnoot die het had gebakken was heel snel klaar en meteen gevlogen natuurlijk. Heel creatief, alleen had ie van mij wel een uurtje langer mogen nadenken over zijn brouwsels.

Het is dus een en/en situatie en zeer zeker niet of/of.
Heb niet echt het gevoel dat opgaves van zo'n test later nog gedebugged moeten worden. Als de opgave goedgekeurd wordt snel verder met de volgende!
Zoals mphillip als laat zien gaat het er in de praktijk ook om dat je je aan software engineering regels houdt als het gaat om goed programmeren, ook al denkt de programmeur op dat moment dat zijn/haar werk nooit meer aangepast of hergebruikt hoeft te worden.
Dat er bij dit kampioenschap door de regels niet het gevoel wordt gewekt dat er later nog met de code gewerkt moet kunnen worden is juist de beperking die dit kampioenschap geen volwaardig programmeer kampioenschap maakt.
Iemand die heel snel een aantal problemen kan oplossen door het schrijven van wat code is vaker een puzzle kampioen met kennis van een taal dan een goed programmeur voor in de praktijk.
Ik noem deze wedstrijd dan ook liever het "NK quick and dirty oplossend programmeren."
De manier waarop je iets probeert op te lossen en hoe ver je daarmee komt laat naar mijn idee veel beter zien of je een correcte en intelligente denkwijze hanteert dan wanneer er alleen maar naar een (goed werkende) oplossing wordt gekeken.
De grootste boer kan net nederlands leren spreken maar dat maakt hem nog geen advocaat.
Dit is meer een wiskunde/logisch denken wedstrijd dan iets anders,
Ja, natuurlijk. Het gaat hier niet om enterprise applicaties; het gaat hier om het oplossen van wiskundige problemen. Code rechtzetten kan later wel en daar kan je ook een mindere programmeergod voor inhuren. Het is zonde om als echt begaafd persoon je tijd te verdoen met het rechtzetten en begrijpbaar voor leken maken van je code.

* 786562 Confusion
Dit is meer een wiskunde/logisch denken wedstrijd dan iets anders,
Ja, natuurlijk. Het gaat hier niet om enterprise applicaties; het gaat hier om het oplossen van wiskundige problemen.
Je ziet dan ook vaak dat teams vaak uit 1 programmeur (informatica student), 2 wiskundigen en 1 natuurkundige bestaat. Dit geeft al aan dat de nadruk toch meer op wiskundig puzzlen ligt.

Bij een bepaalde tak van programmeren zijn zulk soort vaardigheden inderdaad heel belangrijk, maar het zegt inderdaad niks over je capaciteiten om grote software projecten te kunnen overzien en daar de architectuur van kunnen ontwerpen/behappen. Het is zeker niet zo dat als je goed bent in het schrijven van kleine snelle routines (zeg 100 regels), dat je dan ook automatisch goed bent in het schrijven van middel grote systemen (zeg 32.000 regels). Het is geen kwestie van 320 keer zoveel werk doen, maar vereist gewoon andere vaardigheden. (in principe kunnen zowel die 100 als 32.000 regels evenveel werk zijn)

Het punt is gewoon dat al die andere vaardigheden een beetje moeilijk zijn te testen met een wedstrijd. Input/output match is snel een direct. Zelfs het ontwerp van een GUI (om weer eens wat anders te noemen) beoordelen zou al te veel tijd kosten.
...een mindere programmeergod... ...echt begaafd persoon...
Wat een arrogante instelling zeg!
Ik hoop dat je dit enkel op dit soort wedstrijden zo opstelt, want ik vind dat zo'n superieure opvatting de gehele ICT tak schade toebrengt ("de klant/leek is dom en ik ben slim").

Ook al vind je van jezelf dat er misschien geen nette code/oplossing hoeft te worden afgeleverd, je werkt toch vaak in een team en die vinden het vaak fijn als zij het ook snappen. En verder moet de code die als eindprodukt wordt afgeleverd ook netjes zijn voor eventueel toekomstig onderhoud. Ik vind dat iedere zichzelf respecterende programmeur dat als gewoonte moet hebben en niet af-en-toe als het moet.

Bovendien kan je wiskundig heel goed zijn en van heel grote waarde (dat zul je me niet horen ontkennen), de waarde van het desbetreffende informatiesysteem is daarmee nog niet gegarandeerd! Hoe mooi de oplossing ook is, de klant kan er misschien niets aan hebben. Systeemontwikkeling is meer dan algoritmes uitwerken!

En zou je niet juist omdat je hoogbegaafde roze wolk zit netjes moeten coden zodat de 'minder begaafden' er ook nog iets van snappen?
Ik studeer ook informatica en hoor redelijk wat over de wedstrijd en blijkbaar is de overgrote meerderheid van de universitaire informatica studenten in heel nederland het niet met jou eens.
In een echt wedstijd kijken ze naar het resultaat én de code, niet alleen maar de code hoor :)
Anoniem: 8145 @Yoeri22 oktober 2003 22:58
De oplossing moet wel netjes zijn, een brute force oplossing is in 99% van de gevallen te langzaam. Dus er moet wel een beetje nagedacht worden.
Precies. Aan de ene kant wordt er niet gekeken naar de netheid van de code zelf, maar het is wel belangrijk het juiste algoritme te kiezen. Maar goed, ik heb ook weleens opgaven goed gekregen met wat extra if-constructies om de laatste foutjes eruit te halen.
Anoniem: 86857 23 oktober 2003 06:35
Hm, ik heb de opgaven voor 2000 eens gedownload maar guess what.. het is in latex formaat. Volgens mij is Word formaat toch ietsje bekender en eventueel is voor een dergelijk wedstrijd waarbij er verschillende OSen kunnen worden gebruikt PDF wel een sociaal formaat.

Hoe dan ook, een dergelijk wedstrijd zal waarschijnlijk gaan over het berekenen van wiskundige problemen (priemgetallen, fibonacci getallen) en is zodoende voor studenten Toegepaste Wiskunde interessanter dan voor de informatici.

Wat me opvalt aan het programma is dat er geen tijd is voor de lunch of is dat 11:30-12:00?? Overigens de utwente kennende zal de borrel wel het meest interessant zijn; die duurt ook veel langer dan de wedstrijd!!! :P

Overigens vind ik het idee ontzettend goed om in een team met flinke tijdsdruk een opdracht te moeten doen, maar als het "Programmeren" heet moet het wel programmeren zijn. Dus bijvoorbeeld: Neem een week de tijd om met zijn vieren een PHP-achtige scripttaal te schrijven of een Wolvenstein achtige 3D engine. Of implementeer een webbased ERP systeem a la Exact Software.
Een week, leuk maar denk je dat je daar mensen voor kunt vragen zonder dat er een redelijke vergoeding tegen over staat?

Op een NKP gaat het niet om het programmeren, dat is maar een klein onderdeel. Het "zien" van de oplossing is vele malen belangrijker, dat je vervolgens ook nog je oplossing in no-time moet uit programmeren is voor de meeste mensen niet zo'n probleem.
Wat me opvalt aan het programma is dat er geen tijd is voor de lunch of is dat 11:30-12:00??
Deze is dus tijdens de wedstrijd, zodat iedereen op zijn eigen tijd kan lunchen. Je zal je lunch echter wel buiten de PC-zaal op moeten eten...
Overigens de utwente kennende zal de borrel wel het meest interessant zijn; die duurt ook veel langer dan de wedstrijd!!!
Inderdaad, de borrels van Inter-Actief (de organiserende studievereniging, zijn altijd geslaagd en kunnen nog wel eens lang duren... :D
Latex werkt ook onder ieder OS en zelfs zonder compiler kun je het gewoon lezen in elke teksteditor. Mensen die aan dit toernooi meedoen kennen allemaal Latex en dus is het een goede keus.

Daarnaast maakt het niet zo veel uit wat je studeerd, bij ons winnen de natuurkundigen meestal.
Oh, kom je uit Groningen toevallig?
b.t.w. opgaven uit 2000 staan ook in html online. Van de voorronde ook in pdf formaat.
Anoniem: 58284 23 oktober 2003 04:09
Heb een paar weken geleden meegedaan aan het Delfts Kampioenschap, helaas niet hoog genoeg geeindigd om naar het NKP te gaan.

De problemen op t DKP waren niet zozeer moeilijk, het echte probleem is de tijdsdruk. Daarvoor wordt er ook echt lelijke code geschreven.

Voor iedereen die dit niet waardig programmeren vindt: een programmeur die een van deze problemen snel op kan lossen, kan er zonder veel meer moeite ook wel iets nets van maken. Ranzige algoritmes komen namelijk niet door de testen heen, omdat er een max runtime voor staat. Heb zelf ook code moeten optimizen :)

Alhoewel ik zelf geen ubernerd ben is t toch een aanrader voor elke IT student, gewoon een paar uurtjes in teamverband keihard coden :)

offtopic:
Weet zeker dat ik sneller had gewerkt in PHP ipv Java...PHP is de makkelijkste taal voor ugly quick hacks :) (en ja, ik weet dat t een scripttaal is..)
zijn er ook nog voorbeelden van vorige jaren te bekijken ergens? Kon namelijk nix vinden en zou wel is willen kijken wat ze nou precies vragen.

edit.. duh.. zoek anders eerst op de website zelf.. |:(
Valt mee hoor... er zal geen internet beschikbaar zijn in de zaal (wordt compleet afgesloten) is trouwens ook een vaste regel van 't NKP dat er geen internet beschikbaar is.

* 786562 LEiPiE
Anoniem: 11710 @bogy23 oktober 2003 00:24
Script kiddies hebben hier niks te zoeken natuurlijk. Deze wedstrijden zijn voor echte programmeurs, mensen die Dijkstra's werk kennen, Knuth's 'The art of computer programming' op de plank hebben staan etc. Dit soort wedstrijden straft de gemakzuchtige programmeur die met O(N^2) door een array heen loopt genadeloos af, en de programmeur die het in O(N) kan beloont, al kost dat 100 regels extra.

De basis van programmeren zijn nog steeds de simpele algoritmes. Een eenvoudige for-loop door een array heen, waarbij je goed let op initialisatie en geen fencepost-errors maakt.
Meedoen heeft alleen zin als je zo uit je hoofd een quicksort in pascal of C kan intikken, weet wat een dubbel gelinkte lijst is, etc.
Ik had ook mee kunnen doen, samen met 2 klasgenoten.
Heb eens wat opdrachten van vorige jaren gedaan, maar ik heb er te weinig wiskunde inzicht voor vind ik zelf.
Alleen de problemen waar ik me echt op in kan leven waren wel op te lossen (3 van de 8 van 2001 dacht ik)

maw. is te moeilijk voor me, kan me eigendunk ook op een makkelijkere manier mollen :P
while (age < 22)
{
print('Don't go! You are to dumb! ');
}
Nou en je inzicht in het engels is ook niet je van het! :+

P.S. Zoek de fout! :P
Die is er niet, tenzij je de "you are" bedoelt.
Die "to" is goed net als de rest
Vreselijk off-topic, zal er helaas voor weggemod worden, maar:

'to' is wel degelijk fout! Het moet 'too' zijn, met dubbel o dus. Dat gebruik je namelijk:

- als het woord 'ook' (I am dumb and you too)
- als het woord 'te' zoals in dit geval (You are too smart)

On topic:

Ik heb even de opgaven van 2001 bekeken, en ik moet zeggen dat ik de vraagstelling moeilijker vind dan dan de opdrachten op zich :)

Serieus, ik heb niet alles gelezen, maar sommige opdrachten leken me helemaal niet moeilijk en had meer te maken met zoals Roel al zei, wiskunde, dan programmeren. 'Hoeveel boeken passen in deze boekenkast als de boeken een afmeting hebben van x bij x bij x'. Wiskundig gezien is dat lastig (misschien), maar als je daar uitkomt dan kan je met een simpele methode de oplossing wel op het scherm toveren.

Ik verwachte eigenlijk meer opdrachten als 'maak een linked list met bepaalde eigenschappen' of 'schrijf een template class voor ....'. Ik heb ze niet gezien.

Als je 1 redelijke programmeur hebt die niet veel geavanceerde technieken weet, maar wel veel weet van basis statements en loops, en recursie, en je hebt 1 iemand met een wiskunde knobbel, dan moet je volgens mij de meeste opdrachten goed kunnen maken?

Of is iemand het hier niet mee eens (of wel ;))
Don't go! You are to dumb!
MS Word keurt dat goed, maar ik schrijf al jaren Don't go! You are too dumb!
'Hoeveel boeken passen in deze boekenkast als de boeken een afmeting hebben van x bij x bij x'. Wiskundig gezien is dat lastig (misschien), maar als je daar uitkomt dan kan je met een simpele methode de oplossing wel op het scherm toveren.
Het is niet moeilijk om het juiste antwoord te bepalen, maar wel om het juiste antwoord snel genoeg te bepalen. Het is echt lastiger dan het maken van een linked list.
Precies.
Het is ook geen NK applicatie schrijven. Het is het NK algoritme zoeken.

Dit NK bestaat al jaren, ik heb zelf mee gedaan in 1994. (Het resultaat zal hopelijk nooit in de boekenz zijn gekomen) En het zit altijd al zo in elkaar. De opgaven van toen leveren nog steeds de zelfde antwoorden op.
Zou je een applicatie laten bouwen, dan Is het ten eerste heel objectief (Is de interface goed, ergonomisch) En juist de "verfraaingen" maken het onmogelijk te zien of je wel het juiste algoritme gebruikt.
Onzin. Waarom zou je te dom zijn als je jonger dan 22 bent?
Vorig jaar bestond ons team uit mensen van 19, 20 en 20 en we werden 15e van de 37 teams. Het was niet verheffend, maar het was ook geen afgang.
Het gaat bij de wedstrijd vooral om 'het zien' van een efficient algoritme om het probleem op te lossen. Nederlands Kampioenschap Algoritme-kiezen/verzinnen is misschien een betere benaming. En als je eenmaal het goede algoritme gevonden denkt te hebben, mag je het vervolgens nog gaan implementeren :)
Hoezo, dat heeft niets met programmeren te maken? Je hebt wiskunde en programmeervaardigheden nodig, maar je vertelt mij niet dat er geen wiskunde in Informatica-opleidingen zit!
Anoniem: 58284 23 oktober 2003 06:59
1 32 81 64 25
volgende is 6 (^1) (was die zo moeilijk dan :? )
Wat me opvalt aan het programma is dat er geen tijd is voor de lunch of is dat 11:30-12:00??
Eten tijdens de wedstrijd..?
Ehh, please eleborate, ik zie 'm even niet. Hoezo 6?
1^6 2^5 3^4 4^3 5^2 6^1
Lunch is inderdaad tijdens de wedstrijd. Dus gezien je druk bezig bent ga je om een uur of twee, drie eens denken aan eten.

Over het algemeen gaat het niet om enkele instanties zoals 1 32 81 64 25, maar om een probleem waarvan je alle instanties moet kunnen oplossen. Zie de voorbeeldproblemen.

@ narcotic. He, toevallig, ik heb ook meegedaan aan het dkp.

Voor degenen die voorbeeld opgaven willen zien met antwoorden. Kijk eens naar www.acm.inf.ethz.ch/ProblemSetArchive/B_EU_CERC/1999/index.html.
'We groeien in de strijd. Vorig jaar werd één van onze teams zelfs vierde. Nationaal gezien is dat een heel knappe prestatie.'

is dit soms PRO UT ofzo pppfff doe eens normaal man wie was nummer 1 dan ? Adam Rdam Ehoven ?! ... ik vind dit:

UT ONE WORD ... LOSER!!!!

los dit maar op dan:

1 32 81 64 25 ? ....
pff, 6,1 natuurlijk ;-)

edit:" Nu wil ik hem natuurlijk best wel uitleggen:

1^6 = 1
2^5 = 32
3^4 = 81
4^3 = 64
5^2 = 25
6^1 = 6
7^0 = 0

"

En ja, toevallig had ik op de UT gestudeerd :+ :+
Anoniem: 56912 @damen23 oktober 2003 10:14
Leuk raadseltjes !!!
Weet je deze dan ook }>
26 40 16 37 58 89 145 42 20 ? ?
totaal overbodig maar ik kan het niet laten...

4, 16, 37, 58, 89, 145, 42, 20, en opnieuw hetzelfde...

telkens de som van de tweede macht van de afzonderlijke cijfers.

mod mij maar weg :)
En ja, toevallig had ik op de UT gestudeerd
Ehh, dan zou ik je post maar eens snel gaan editten :P
Hmm, interesting. Is elk jaar weer leuk om over te lezen en te horen.

Vierde plaats landelijk gezien? Was dat met of zonder meetelling van de "professionele" teams?

Op dit item kan niet meer gereageerd worden.