Programmeren is groepswerk.
Schrijf je daarom in teams van 3:
2 is te weinig, 4 te veel.
En schrijf 5 programma's in 3 uur tijd.
3x 2 handen werken op 1 laptop.
Simpel concept, leuke boel!
De ultieme beloning is natuurlijk de intellectuele uitdaging, maar voor wie meer op het materiële gesteld is, hebben we ook nog
Programmeer in C, C++, C#, Clojure, Haskell, Java, Javascript (node.js), Pascal, Perl, PHP, Prolog, Python, Python 3, Ruby, Scala, Scheme en Visual Basic!
Programmeren is groepswerk.
Schrijf je daarom in teams van 3:
2 is te weinig, 4 te veel.
En schrijf 5 programma's in 3 uur tijd.
3x 2 handen werken op 1 laptop.
Simpel concept, leuke boel!
De ultieme beloning is natuurlijk de intellectuele uitdaging, maar voor wie meer op het materiële gesteld is, hebben we ook nog
Programmeer in C, C++, C#, Clojure, Haskell, Java, Javascript (node.js), Pascal, Perl, PHP, Prolog, Python, Python 3, Ruby, Scala, Scheme en Visual Basic!
De opzet van de wedstrijd is geïnspireerd door de internationale programmeerwedstrijden van de ACM (the Association for Computing Machinery). De VPW is geen klassieke "Olympiade": er wordt een grote nadruk gelegd op teamwork, vragen worden rechtstreeks opgelost op computer, en antwoorden worden volledig geautomatiseerd verbeterd.
Een scorebord toont live de rangschikking van de deelnemers. Vrijwel onmiddellijk na het einde van de wedstrijd is de uitslag gekend, en volgt een officiële prijsuitreiking.
Op woensdagnamiddag 2 maart 2016 organiseren KU Leuven en UCLL de achtste editie van de Vlaamse Programmeerwedstrijd. Deze wedstrijd wordt jaarlijks georganiseerd door een hogeschool of universiteit in Vlaanderen. Deelnemers nemen het tegen elkaar op door in beperkte tijd (3 uur) zoveel mogelijk uitdagende programmeer-oefeningen op te lossen in een van de vele ondersteunde programmeertalen.
De deelnemers organiseren zich in teams van 3 personen, en dienen onderling samen te werken om hun kans op slagen te verhogen. Deelname is volledig gratis.
Aangezien het de Vlaamse programmeerwedstrijd (VPW) is, laten we enkel deelnemers toe die in een Vlaamse (onderwijs)instelling/bedrijf studeren/werken. De opgaven zullen enkel in het Nederlands beschikbaar zijn.
De wedstrijd wordt ingericht voor vier aparte categorieën (elk met een eigen aangepaste moeilijkheidsgraad):
Dankzij onze sponsors gaan de beste 3 teams in elke categorie steeds met een mooie prijs naar huis.
De Vlaamse Programmeerwedstrijd wordt georganiseerd door een groep vrijwilligers bestaande uit leden van vier Vlaamse universtiteiten (VUB, KULeuven, UGent en UHasselt) en zes Vlaamse hogescholen (PXL IT, VIVES, Odisee, UCLL, Erasmus Hogeschool en de HoGent) en is in 2015 aan zijn zevende editie toe.
De eerste zeven edities werder respectievelijk georganiseerd door de KULeuven in Heverlee (2009), UGent in Gent (2010), Katho en Kulak in Kortrijk (2011), PHL in Hasselt (2012), VUB in Brussel (2013), HoGent in Gent (2014) en KULeuven en Thomas More in Sint-Katelijne-Waver (2015).
Hiernaast vind je een lijst met de programmeertalen die je kan gebruiken om oplossingen in te sturen.
Voor elke opgave moet je een programma schrijven (één bronbestand!) dat invoer inleest en uitvoer uitschrijft. Invoer en uitvoer gebeuren altijd via de standaard invoer (stdin) en uitvoer (stdout).
Je mag beroep doen op de voorzieningen van de gebruikte programmeertaal om van standaard invoer te lezen of naar standaard uitvoer te schrijven. Voor alle opgaves volstaat kennis voor het inlezen van getallen en strings via standaard invoer, eventueel gescheiden door spaties of leestekens als er meerdere gegevens op een regel voorkomen.
Je zal je oplossingen moeten indienen via een website; de extensie van je bestand bepaalt de te gebruiken programmeertaal.
Gelieve vragen en/of opmerkingen te richten naar info@vlaamseprogrammeerwedstrijd.be.
Klik op een taal voor meer informatie; o.a. versie en omgeving die gebruikt zal worden bij het testen van de ingestuurde oplossingen tijdens de wedstrijd. Gelieve hiermee rekening te houden, om discussies omtrent straftijd (zie reglement) en de daaraan gekoppelde gevolgen te vermijden.
Versie | gcc version 4.9.2 |
---|---|
Extensie | c, cpp, cc, c++ |
Compileervlaggen | gcc/g++ -std=gnu++11 -Wall -O2 -static -o test test.c -lm |
Uitvoering | ./test |
Opmerkingen | main() moet eindigen met return 0; |
Versie | .NET 4.0 |
---|---|
Extensie | cs |
Compileervlaggen | csc.exe test.cs |
Uitvoering | ./test |
Opmerkingen |
Versie | Glasgow Haskell Compiler, Version 7.8.3, stage 2 booted by GHC version 7.6.3 (Platform 2014.2.0.0) |
---|---|
Extensie | hs, lhs |
Compileervlaggen | ghc --make -Wall -O2 -o app.exe app.hs |
Uitvoering | app.exe |
Versie | Java SE 1.8.0_25 |
---|---|
Extensie | java |
Compileervlaggen | javac Main.java |
Uitvoering | java -Xrs -Xmx262144k |
Opmerkingen | Uw klasse moet Main heten. Gebruik geen package. |
Versie | Free Pascal Compiler 2.6.4 |
---|---|
Extensie | pas, p |
Compileervlaggen | fpc -viwn -O2 -Sg -XS -otest test.pas |
Uitvoering | ./test |
Opmerkingen | Gebruik crt niet! |
Versie | PHP 5.6.3 |
---|---|
Extensie | php |
Compileervlaggen | |
Uitvoering | php app.php |
Versie | SWI-Prolog 6.6.6 |
---|---|
Extensie | pro (niet .pl! Dit is Perl) |
Compileervlaggen | nvt |
Uitvoering | swipl -q -O -t "['test.pro'],main." |
Opmerkingen | Je oplossing
|
Versie | Python 2.7.8 |
---|---|
Extensie | py |
Compileervlaggen | |
Uitvoering | python app.py |
Versie | Ruby 2.1.5p273 |
---|---|
Extensie | rb |
Compileervlaggen | nvt |
Uitvoering | ruby file.rb |
Opmerkingen |
Versie | racket 6.1.1 |
---|---|
Extensie | scm, rkt |
Compileervlaggen | nvt. |
Uitvoering | racket test.scm |
Opmerkingen |
|
Versie | .NET 4.0 |
---|---|
Extensie | vb |
Compileervlaggen | vbc.exe test.vb /imports: Microsoft.VisualBasic,System, System.Collections, System.Collections.Generic, System.Data,System.Diagnostics, System.Linq,System.Xml.Linq |
Uitvoering | ./test |
Opmerkingen |
Versie | Clojure 1.6.0 (bovenop Java SE 1.8.0_25) |
---|---|
Extensie | clj |
Uitvoering | java -Xrs -Xmx262144k -cp clojure-1.6.0.jar clojure.main $SOURCE |
Opmerkingen | Je hebt toegang tot de standaard Clojure 1.4 API (geen clojure-contrib libraries) |
Versie | node.js v0.10.33 + lazylines voor I/O |
---|---|
Extensie | js |
Uitvoering | node app.js |
Opmerkingen | Merk op: je Javascript broncode draait niet in een browser, maar op een node.js-installatie. Gebruik de lazylines library voor invoer van standard input. Uitvoer kan via console.log |
Versie | Perl 5.20.1 |
---|---|
Extensie | pl |
Uitvoering | perl app.pl |
Opmerkingen | Prolog programmeurs: gebruik .pro als extensie. |
Versie | Python 3.4.2 |
---|---|
Extensie | py3 |
Compileervlaggen | |
Uitvoering | python app.py3 |
Opmerkingen | Let op de niet-standaard extensie! We gebruiken .py voor Python 2, .py3 voor Python 3. |
Versie | Scala 2.11.4 (bovenop Java SE 1.8.0_25) |
---|---|
Extensie | scala |
Compileervlaggen | scalac test.scala |
Uitvoering | scala Main |
Opmerkingen | Uw module moet Main heten. |
De wedstrijd vindt plaats op op Technologiecampus Diepenbeek. On-site registratie kan vanaf , de eigenlijke wedstrijd begint (stipt) om en eindigt om 17u45.
Inschrijven gebeurt liefst zo vroeg mogelijk via het online-inschrijvingsformulier. De inschrijvingen sluiten op . In 2016 kunnen we plaatsen garanderen voor een 400-tal deelnemers. Inschrijven kan per team van 3 personen. Bij de inschrijving moet vermeld worden (*) naam, geslacht, t-shirtmaat van de drie teamleden, instelling waar elk lid studeert, e-mail van alle deelnemers, en optioneel een begeleider (met vermelding van e-mail) van het team.
Een team hoeft geen begeleider te hebben, maar het kan. De rol van de begeleider is niet het helpen bij het programmeren (in het bijzonder wordt de begeleider tijdens de wedstrijd beschouwd als niet deel uitmakend van het team), en wordt niet verder door de wedstrijdorganisatie bepaald. Het registreren van begeleider legitimeert de aanwezigheid van de begeleider op de locatie van de wedstrijd. Tijdens de wedstrijd mogen de begeleiders geen contact zoeken met de deelnemers.
Tijdens de wedstrijd kan beeldmateriaal verzameld worden dat later kan gepubliceerd worden op de website van de VPW. Ditzelfde beeldmateriaal kan ook gebruikt worden tijdens de promocampagne voor volgende wedstrijden. Voor andere doeleinden zal dit beeldmateriaal niet aangewend worden. Wie beeldmateriaal van de site wil laten verwijderen, kan contact opnemen via info@vlaamseprogrammeerwedstrijd.be.
Enkel deelnemers die studeren of werken in Vlaanderen zijn toegelaten. Een team kan deelnemen in een van de volgende categorieën:
De drie teamleden mogen studeren in verschillende instellingen en mogen van verschillend niveau zijn (secundair/bachelor/master/afgestudeerd). Als een team uit deelnemers van verschillende niveaus bestaat, dan telt het hoogste niveau binnen het team voor de bepaling van de categorie waarin het team deelneemt. Bijvoorbeeld:
Studenten die ingeschreven zijn in een schakelprogramma om een Masteropleiding te volgen sluiten zich aan bij categorie 3.
De definitieve toewijzing van teams aan categorieën gebeurt door de organisatie.
De opgaven worden opgesteld door een onafhankelijke jury bestaande uit leden van de organiserende universiteiten en hogescholen. Elk team krijgt 5 opgaves voorgeschoteld, die tijdens de wedstrijd moeten opgelost worden. De vier categorieën krijgen verschillende opgaves, en de moeilijkheidsgraad is afhankelijk van de verwachte programmeerervaring van de deelnemers.
Na het inschrijven krijgen de deelnemers toegang tot een oefenwedstrijd. De inschrijving van een team is pas geldig nadat het team minstens 1 opgave in deze wedstrijd heeft opgelost. Er wordt een zeer eenvoudige opgave voorzien ("MinMax") die iedereen zou moeten kunnen oplossen (beschouw dit als een test voor de minimum programmeer-ervaring nodig om deel te nemen aan de VPW).
Deze maatregel is nieuw sinds 2013 en ingevoerd omdat op vorige wedstrijden bleek dat veel deelnemers moeite hadden met het lezen van invoer en het schrijven van uitvoer. Door een eenvoudige opgave op te lossen, bewijzen de deelnemers dat zij de wedstrijdinterface begrijpen. Een goede voorbereiding vermijdt frustraties achteraf.
Als een team 2 weken voor de aanvang van de wedstrijd nog geen vraag correct heeft ingediend dan kan de organisatie beslissen om de inschrijving van het team te annuleren en door te geven aan een team op de wachtlijst.
Op de oefenwedstrijd zijn ook vragen van vorige jaren beschikbaar, waardoor deelnemers zich via dit platform kunnen voorbereiden en zich vertrouwd maken met de wedstrijd-interface.
Voor elke opgave worden een aantal testgevallen opgegeven in de wedstrijdinvoer. Voor elk testgeval moet de oplossing op één regel afgedrukt worden. Het precieze formaat wordt telkens beschreven in de opgave.
Elke uitvoerregel die volledig correct is (en dus elk testgeval dat volledig werd opgelost) levert punten op. Het aantal punten dat een team wint voor een opgave komt overeen met het aantal correcte uitvoerregels, uitgedrukt als een percentage van het totaal aantal testgevallen: voor elke opgave is de som van de punten dus 100. Daarenboven wordt een bonus van 50 punten toegekend aan elk team dat álle gevallen van een bepaalde opgave correct oplost: deze teams behalen dus 150 punten voor die opgave. Op die manier kan een team toch punten behalen (maximaal 99 punten) wanneer hun programma niet helemaal correct werkt en slechts een deel van de invoer-gevallen oplost.
Het programma dat de oplossingen beoordeelt, gebruikt het standaard UNIX "diff" commando om een oplossing te vergelijken met de modeloplossing. De jury kan alle maatregelen nemen om te vermijden dat teams punten verdienen door misbruik te maken van deze werkwijze. Voorbeelden van zo'n misbruik zijn een programma dat de oplossingen voor de voorbeeldinvoer rechtstreeks afdrukt zonder die oplossing te berekenen of dat gokt bij ja/nee antwoorden. De jury heeft o.m. het recht om ingediende oplossingen te weigeren of teams te diskwalificeren als deze regel overtreden wordt. De jury hoeft een team niet tijdens de wedstrijd in te lichten over het overtreden van deze regel. Ook na de bekendmaking van de uitslag kan deze regel nog ingeroepen worden om een uitslag te wijzigen.
De rangschikking is in de eerste plaats gebaseerd op het totaal aantal punten. Bij ex aequo wordt de totale submissietijd van een team gebruikt: hoe korter die is, hoe beter de rangschikking. De totale submissietijd is de som van de submissietijden van de beste oplossingen voor elke vraag. De submissietijd van een oplossing is de tijdsduur tussen het tijdstip van de submissie van die oplossing en het begin van de wedstrijd.
Er wordt een afzonderlijke rangschikking opgesteld per categorie.
Omdat de uitvoering van je programma na verloop van een tijdslimiet wordt gestopt, heb je er alle belang bij om de oplossing van een invoergeval zo snel mogelijk af te drukken (in plaats van eerst alle resultaten op te slaan in een array of andere gegevensstructuur en dan pas op het einde deze resultaten af te drukken).
Wanneer je als uitvoer WRONG_ANSWER krijgt, kan dit te wijten zijn aan de tijdslimiet. Dit betekent niet dat al je oplossingen fout zijn, maar wel dat niet alle oplossingen binnen de gegeven tijdslimiet werden berekend. Het is dus mogelijk dat je programma in dat geval een aantal (maar niet alle) juiste oplossingen heeft berekend, zodat het toch de moeite loont om het te "submitten" (= het programma met de wedstrijdinvoer te laten lopen).
Er wordt verwacht dat elk team een laptop of PC met draadloze netwerktoegang (Wifi) meeneemt waarmee men zal deelnemen aan de wedstrijd. Teams zijn zelf verantwoordelijk voor het installeren van de nodige programmeertalen (compilers, eventuele ontwikkel-omgevingen, tekst-editors, etc.).
Elk team beschikt over maximaal één laptop of één pc, en over slechts één toetsenbord en één scherm. Het gebruik van extra tablets e.d.m. is niet toegelaten. Er is geen beperking op wat op de meegebrachte laptop mag staan. Deelnemers mogen documentatie (zoals boeken) meebrengen. Er wordt aangeraden om documentatie omtrent APIs offline te bewaren, vermits toegang zoeken tot het internet tijdens de wedstrijd zelf verboden is. De deelnemers houden zich aan de regels van fair play, waaronder
Vragen of opmerkingen aan het adres van de jury over de opgaves of andere aspecten van de wedstrijd gebeuren via het communicatiesysteem dat deel uitmaakt van de wedstrijdinterface ("clarifications"). In uitzonderlijke gevallen (b.v. technische problemen) kan rechtstreeks een vraag gesteld worden aan de leden van de organisatie die aanwezig zijn. Elk team ontvangt de opgaven op papier om . Tot kunnen oplossingen ingezonden worden: de inzendprocedure wordt uitgelegd tussen en .
Zo snel mogelijk na elke inzending wordt aan het team de score meegedeeld: die komt overeen met het percentage correcte uitvoerregels (plus een eventuele bonus indien ALLE uitvoerregels correct zijn) + een standaard boodschap (tijdslimiet overschreden, geheugenlimiet overschreden, runtime fout, compileert niet, linkt niet, ...). Uitleg over die boodschap kan bekomen worden bij de jury. Een uitvoerregel wordt als correct beschouwd indien die op de geheime wedstrijdinvoer (vooraf door de jury vastgelegd) de juiste uitvoer produceert. Dit wordt gecontroleerd met het standaard UNIX "diff" commando. Elke inzending moet worden uitgevoerd binnen de gestelde tijdslimieten en geheugenlimieten. Deze limieten zijn ad hoc per taal + hardware bepaald en worden niet meegedeeld.
Alle teams moeten programmeren in een aangewezen ruimte en plaats. Tijdens de wedstrijd mogen de deelnemers zich vrij bewegen buiten de programmeerruimten, met inachtneming van de regels van fair play.
De teams gebruiken enkel de ondersteunde programmeertalen: een team hoeft niet voor elk probleem dezelfde programmeertaal te gebruiken. De inzendingen blijven eigendom van de teams, en de organisatie zal geen ingezonden oplossingen (ook geen foutieve) verspreiden.
Er wordt een drankje voor deelnemers en begeleiders. Na de wedstrijd zelf is er bovendien ook een gratis broodje voor alle deelnemers en begeleiders.
Deelnemers mogen zelf ook drank en voedsel meebrengen, maar alcohol is niet toegelaten en zal ook niet door de organisatie voorzien worden.
Door hun deelname leggen de deelnemers zich neer bij de beslissingen van de jury en de organisatoren.