Op deze pagina:
Opdrachten
Aanwijzingen
DomJudge
Fraude

Datastructuren

Praktikum Voorjaar 2020

Bij Datastructuren is een praktikum van zeven opdrachten, die je alleen moet programmeren in C# en inleveren via DomJudge.
De meeste deadlines zijn op zaterdag maar de eerste is op woensdag en de laatste (reparatie) op vrijdag!
Je moet de programma's zelf maken in je eentje. Als je twijfelt of je werkwijze voldoet, kijk dan even onder het kopje Fraude.

Meteen naar DomJudge

De opdrachten

Elke opdracht wordt beschreven in een kort PDFje, steeds met ongeveer dezelfde structuur. De meeste gebruiken een stukje theorie dat ongeveer een tot drie weken voor de deadline wordt behandeld.
Nr Opdracht Einddatum
(23:59)
Testinvoer
1 Collatz Wo 29 april ColVb1.in, ColVb1.out.
2 Inpakken Za 9 mei InpKlein.in, InpKlein.out,
InpEenDoos.in, InpEenDoos.out,
InpDubbel.in, InpDubbel.out
3 Disco-Drukte Za 16 mei DisVijf.in, DisVijf.out.
4 MotorMerge Za 30 mei MoBlok.in, MoBlok.out,
MoABC.in, MoABC.out.
5 Nemo Za 6 juni nemkl.in, nemkl.out.
6 Koelkast Za 20 juni KDiepDik40.in, KDiepDik40.out.
7 Bouwmarkt Za 27 juni Bklein.in, Bklein.out.
Btien.in, Btien.out.
R Reparatie:
Zelfde opdracht
Vr 10 juli
Vrijdag!
De Inleiding legt uit waar het in de opdracht om draait, wat je programma uit moet rekenen, zodat je ongeveer snapt wat voor programma je moet gaan maken. De Specificatie beschrijft zo precies mogelijk de structuur van de invoer en uitvoer en welke invoerwaarden voor kunnen komen. Omdat je programma automatisch wordt nagekeken, is het belangrijk je hieraan stipt te houden. Een enkele extra letter of punt in de uitvoer zal DomJudge al jouw programma laten afkeuren! De Voorbeelden maken dit verder duidelijk en kun je gebruiken om je programma te testen. De Algoritmische aanwijzingen geven je verdere tips (het is handig om ...) en verplichtingen (je programma moet...) voor je programma.

Je kunt over de opdrachten vragen stellen op het werkcollege, of een clarification request sturen aan het practicumteam. Stel geen vragen over een programmeeropdracht per mail! Mail ons nooit je C# code! Veel van wat je moet weten wordt op hoorcollege behandeld; bezoek dus de colleges zo veel mogelijk. Je mag aan de opdrachten beginnen voordat de theorie behandeld is, maar als je er dan niet uitkomt, kun je hem het beste even laten liggen tot na het college.

Wat gegeven is over de invoerwaarden, hoef je niet te controleren (als in Defensief Programmeren). Dus als de opdracht bv. zegt: op deze regel staat een getal kleiner dan 1000000, hoef je het getal niet te testen op deze grens. DomJudge test in principe alleen met legale invoeren, en als er per ongeluk toch een testinvoer niet klopt is dat onze verantwoordelijkheid.

Algemene aanwijzingen

De opdrachten worden steeds moeilijker, dus doe vanaf het begin mee! De eerste opdracht helpt je op weg met het beheersen van de C#-ontwikkelomgeving, het begrijpen van de opdrachtformulering en het DomJudge inleversysteem.

Je programma moet voor invoer en uitvoer altijd de console gebruiken, dus de instructies Console.ReadLine(); en Console.WriteLine(...);. De voorbeelden geven de complete invoer en uitvoer als bestand, en je kunt om te testen de console koppelen aan een bestand met een redirect. Bij opdracht 1 is het paar ColVb1.in en ColVb1.out gegeven. Het windows-commando colprog.exe <ColVb1.in >mijnColVb1.out moet een bestand mijnColVb1.outopleveren dat exact gelijk is aan ColVb1.out.

Werken met DomJudge

DomJudge is een platform voor het inleveren en nakijken van programma's, dat je meteen feedback op je inzending geeft. Je kunt net zo vaak inleveren als je wilt, tot je programma correct is, de deadline is verstreken, of je het opgeeft. De jury (het Datastructuren-team) kan al je pogingen zien, inclusief de tijd en de feedback.

Voor je gaat inleveren, kun je het best zorgen dat de gegeven voorbeeldinvoeren correct worden verwerkt (de correcte uitvoeren staan er naast). Probeer zelf met verdere tests vast te bevestigen dat je programma goed werkt. Bezoek dan de DomJudge TEAM pagina en log in met je Solis-id.

Submitten: Het inzenden van een C# oplossing is eenvoudig: Klik op de Overview-pagina "Browse..." en selecteer de file met je C#-code (extensie .cs, niet een .exe of .sln). DomJudge verwacht dat je alle code en alle classes in 1 file zet. Selecteer de gemaakte opdracht met problem en "kies" de language (alleen C# is mogelijk). Beuk op Submit en wacht af wat DomJudge van je programma vindt.

Beoordeling van DJ: DomJudge kan aangeven dat je programma niet compileert (COMPILER-ERROR), crasht (RUN-ERROR), te langzaam werkt (TIMELIMIT), geen (NO-OUTPUT) of een verkeerde uitvoer geeft (WRONG-ANSWER). Het mooist is de melding CORRECT want die betekent dat je programma goed is en je opdracht af. Door op de melding te klikken, krijg je meer informatie over de beoordeling.

DomJudge kan niet controleren of je het juiste algoritme hebt geïmplementeerd. Dus als de opdracht vermeldt implementeer QuickSort en je gebruikt HeapSort, zal je programma mogelijk door DomJudge worden geaccepteerd zonder dat het echt goed (dwz. conform de opdracht) is. Als DomJudge je programma zonder gepruttel accepteert (de letters CORRECT verschijnen in groen), en je hebt je gehouden aan de algoritmische eisen (voor zover die in de opdracht staan), heb je de opdracht in principe af. Alleen als je algoritmische eisen hebt genegeerd of fraude hebt gepleegd, kan je programma daarna nog door ons worden afgekeurd.

Kleine en grote tests: Meestal heeft DJ eerst een paar kleine testcases, om te zien of je oplossing correct werkt. Deze kunnen met een langzaam programma nog binnen de tijd lukken. Dan volgen meestal grotere invoeren, om te zien of je oplossing ook snel genoeg is.

Verborgen tests: DJ bevat een aantal openbare en een paar gesloten tests. Daarom kan het gebeuren dat je programma niet goed is, maar toch op alle zichtbare testcases CORRECT geeft. Het probleem zit dan in een verborgen testcase. Je moet dat wel oplossen, want je opdracht is nog niet af!

Clarification: Via Clarifications is communicatie met het praktikumteam mogelijk. Maar niet altijd en niet snel! Als je 5 minuten voor de deadline tegen een issue aanloopt en je kunt niet verder zonder hulp, dan heb je een probleem. Een Clarification is een soort vraag die je aan "de Jury" (het praktikumteam) kunt stellen. Wij proberen die vragen te beantwoorden, maar een snel antwoord kan niet altijd worden gegarandeerd, zeker niet vlak voor een deadline! Het is jouw verantwoordelijkheid dat je de deadline haalt, niet de onze!
Het is een goed idee om vroeg aan elke opdracht te beginnen! Als je al begint voordat de theorie erover is behandeld, en je krijgt de opdracht niet werkend, wacht dan tot de theorie behandeld is. Vermijd het, clarification te vragen over theorie die nog behandeld gaat worden. Stel geen vragen per mail over een opdracht.

Clarifications op zaterdag: Op zaterdag is de jurystoel onbemensd, en dan is beantwoording van Clarifications onzeker. Vermijd daarom dat je op de dag van een deadline nog van clarifications afhankelijk bent! Zorg dat je uiterlijk vrijdag de opdracht snapt en voldoende precies weet hoe je hem op moet lossen.

Deadline: De deadlines staan niet exact op middernacht ingesteld. Houd er rekening mee, dat inleveren in de laatste seconde van de dag onmogelijk is, en in de laatste minuut moeilijk kan zijn. Als je de deadline niet hebt gehaald, email ons dan je programma niet! Een programma kan na de deadline niet meer meetellen, we draaien het niet proef "alleen maar om te kijken of-ie het nu doet", en we geven geen feedback op programma's van na de deadline. (Storingen in het DomJudge platform zijn uiteraard reden voor ons om de deadline op te schuiven.) Als je de deadline niet hebt gehaald, zorg dan dat je aan de reparatie kunt meedoen en lever het dan opnieuw in.

Vorig jaar al gedaan? Je moet de opdrachten dit jaar inleveren: wat je vorig jaar bij Datastructuren hebt ingeleverd, telt nu niet vanzelf weer mee. Als de opdracht hetzelfde is, mag je natuurlijk wel je (eigen!) code oppoetsen, versnellen en/of verbeteren en opnieuw inleveren.

Fraude, Plagiaat en Verboden samenwerking

Frauderen is afkijken, het is oneerlijk en onethisch en natuurlijk doe jij dat niet en wil jij dat niet! Het schaadt het vertrouwen in de wetenschap, maar daarnaast kan het jouzelf in grote problemen brengen.

Samenvatting: Je moet al je code zelf schrijven, je mag geen code overnemen, en je code ook niet aan anderen geven of publiek maken.

Voor vrijwel iedereen is 100% duidelijk wat hiermee wordt bedoeld. Heb je hier toch nog vragen over, lees dan verder. Je mag uiteraard met anderen over de opdracht praten, wij moedigen dit zelfs aan omdat je van elkaar het meeste kunt leren. De samenwerking gaat te ver als er code wordt overgenomen of code van anderen ingestuurd. Het zelf intypen van code die je afleest van het scherm van een medestudent of die een medestudent opleest, zien wij niet als zelf schrijven van een programma!

Let op: DomJudge bevat plagiaat-detectie en plagiaat wordt bestraft! Je inzending wordt ook vergeleken met inzendingen van vorig jaar. Docent of nakijkers kunnen je vragen, delen van je code toe te lichten.

Als je delen van je code van internet haalt (bijvoorbeeld voor algemene veelvoorkomende datastructuren) dan moet je in een comment de bron vermelden.

Ook het delen van code is niet toegestaan! Je mag je programma niet door anderen laten bewaren of testen en het niet op openbare code-platforms zetten. Geef zeker nooit je code aan iemand die er niet uit komt, ook niet "alleen om te kijken". Als je dat toch doet, en een studiegenoot levert jouw code in of een variant daarvan, kun jij bestraft worden voor fraude!

Hetzelfde nogmaals in informelere taal:
Hoe ver mag samenwerken gaan bij het praktikum? Je mag wel met elkaar praten over hoe je dingen hebt opgelost. Maar je moet het uiteindelijk allemaal zelf doen en zelf maken.
Er mag nooit code van je medestudent in een submission naar DomJudge zitten. En let op: DomJudge bewaart alle submissies, ook als je daarna een nieuwere versie instuurt! Je mag nooit je code aan een collega-student geven. Niet als inspiratie, niet om te helpen, niet om te testen, niet als backup, dus gewoon nooit! Je mag ook niet je code op openbare platforms op Internet zetten.
Als wij merken dat je een van deze dingen wel doet, wordt op z'n minst je opdracht ongeldig, maar strengere straffen kunnen ook. Is het halen van Datastructuren belangrijk voor je, zorg dan dat dit jou niet overkomt.

Waar zit het grootste "risico" voor fraude? Praktikumfraude komt in ongeveer driekwart van de gevallen voort uit tijdnood. Je zit vlak voor de DomJudge-deadline maar komt er niet uit, en je hebt wel de code van iemand anders bij de hand. Je wilde er alleen maar naar kijken en het dan zelf oplossen, maar ... de deadline komt dichterbij en je beseft dat je het niet gaat halen ... zonder een piepklein stukje code over te nemen. Als je het een beetje verandert merkt vast niemand dat, en je hebt toch echt wel begrepen hoe het werkt dus is dat nou zo erg? Over het eerste: bestaande code zo veranderen dat het origineel lijkt is meer werk dan nieuwe code schrijven. Over het tweede: ja, het is erg! Afgezien van de ethische kant (hoe hard verdien je een voldoende als je hem op deze manier haalt), als wij het merken ben je de opdracht sowieso kwijt en je behulpzame collega ook! Overnemen van code is dus ongeveer het stomste wat je kunt doen.
Dit samen met het doorgeven van je eigen code. Want je begrijpt uit dit verhaal dat als jij je code aan een vriendje geeft, en die verwerkt dat op een stomme manier in zijn programma, dan ben jij ook de klos! En hey, als jouw vriendje zo slim zou zijn om op een slimme manier te frauderen, dan kon hij die code ook wel zelf schrijven, toch?