Op deze pagina:
Opdrachten
DomJudge
Fraude

Security

Praktikum Najaar 2017

Bij Security is een klein praktikum van twee opdrachten, die je alleen moet programmeren in C# en inleveren via DomJudge.

Meteen naar DomJudge

De opdrachten

Elke opdracht wordt beschreven in een kort PDFje, steeds met ongeveer dezelfde structuur.
Nr Opdracht Einddatum
(om 23:59)
Testinvoer
1 Mining za 30 sept Drieletters.in, Drieletters.out.
Gerard.in, Gerard.out.
2 Wortel za 4 nov wsec17.in, wsec17.out.
wort18.in, wort18.out.
wort308.in, wort308.out.
R Reparatie:
Zelfde opdracht
Vrijdag
5 jan 2018
De Inleiding legt uit waar het in de opdracht om draait, 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. De Voorbeelden maken dit verder duidelijk en kun je gebruiken om je programma te testen. De Algoritmische aanwijzingen geven verdere tips (het is handig om ...) en verplichtingen (je programma moet...) voor je programma.

Opdracht Mining frist het werken met C# en DomJudge op. Je moet ook met hexadecimale rijen werken. Als je eerder met DomJudge en C# hebt gewerkt, kan deze opdracht bijna niet moeilijk voor je zijn. Opdracht Wortel biedt je een uitdaginkje op het gebied van getaltheoretische algoritmen begrijpen.

Houd de deadlines vreselijk goed in de gaten! Wat voor verhaal je ook hebt bij een late inzending, de kans is groot dat ik het al ken! En klein (0) dat je inzending wordt geaccepteerd.

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 Security-team) kan al je pogingen zien, inclusief de tijd en de feedback.

Security gebruikt DomJudge op dezelfde manier als Datastructuren. Veel deelnemers hebben dat vak gevolgd, maar je kunt alles nog eens nalezen op de Practicumpagina van Datastructuren. Je programma moet voor invoer en uitvoer altijd de console gebruiken.

Submitten: 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 de DomJudge TEAM pagina en log in met je Solis-id. Het inzenden van een C# oplossing is eenvoudig: Klik "Select file..." en selecteer de file met je C#-code (extensie .cs). DomJudge verwacht dat je alle classes in een file zet. Selecteer ook de gemaakte opdracht en "kies" de programmeertaal (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), te langzaam werkt (TIMELIMIT), of een verkeerde uitvoer geeft (WRONG-ANSWER). De melding PRESENTATION ERROR betekent dat in jouw output alleen de spaties anders staan dan in de voorbeeldoutput, maar die test wordt dan wel goedgerekend. Een eventuele melding dat je programma INCORRECT is, ligt dan aan een andere (bv verborgen) invoer.

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 (conform opdracht) is. Als DomJudge je programma zonder gepruttel accepteert, 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 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 te 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.

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 dan opnieuw in (voor de reparatie-deadline!).

Fraude, Plagiaat en Verboden samenwerking

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 wordt code overgenomen of code van anderen ingestuurd.

Let op: DomJudge bevat plagiaat-detectie en plagiaat wordt bestraft! 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 wordt nog eens uitgelegd bij Concurrency.

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 sancties kunnen ook. Zorg 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?