Algoritmiek

Praktikum Voorjaar 2016

Bij het vak Algoritmiek is een praktikum van zes opdrachten, die je alleen moet programmeren in C# en moet inleveren via het DomJudge-systeem:

Inlogpagina DomJudge

Let op dat tussen opdracht 1 en 2 maar èèn week de tijd hebt, en tussen opdrachten 4 en 5 ook!

Opdrachten

Nr Opdracht Deadline
(om 23:59)
Testinvoer Hier als file maar je programma leest van standaardinvoer/-uitvoer
1 Tel A2B 18 feb 2017 geen.in/geen.uit, klein.in/klein.uit, twee.in/twee.uit
2 Pretty Printing 25 feb 2017 voorbeeld.in/voorbeeld.uit, klein.in/klein.uit, lexico.in/lexico.uit, havelaar.in/havelaar.uit
3 Where is Waldo 11 mar 2017 strand.in/strand.uit, beestjes.in/beestjes.uit, medium.in,/medium.uit
4 Dungeon Adventure Game 25 mar 2017 voorbeeld.in/voorbeeld.uit, randomklein.in/randomklein.uit, kwadraatklein.in/kwadraatklein.uit, kwadraatmedium.in/kwadraatmedium.uit,
5 War Of The Worlds 8 apr 2017 WarMars.in/WarMars.uit, WarBottle.in/WarBottle.uit, WarCom10-4.in/WarCom10-4.uit, WarVolle.in/WarVolle.uit, WarFFval.in/WarFFval.uit, WarDisjunct.in/WarDisjunct.uit, WarNulkant.in/WarNulkant.uit, WarLongCut.in/WarLongCut.uit
6 Het Eindfeest 15 apr 2017 voorbeeld.in/voorbeeld.uit, klein.in/klein.uit, klein2.in/klein2.uit, medium.in/medium.uit
Ver Maak opdracht af 8 jul 2017

Plaats bovenaan de code van je programma in een comment je naam en studentnummer.

Bij een gratis GitHub-account is al je code openbaar! Zet je code dus NIET op GitHub, want als een andere student jouw code vindt en inlevert ben (ook) jij de klos! UU-studenten kunnen gratis gebruik maken van GitLab.

Inloggen

Voor problemen met het inloggen bij DomJudge of storingen kan je mailen met: Tom van der Zanden (met studentnummer en F-nummer als je dat hebt). Inhoudelijke vragen over de opdrachten alleen via clarifications!

Clarifications

Je kunt over de opdrachten vragen stellen tijdens het werkcollege, maar tijdens het werkcollege wordt niet naar je code gekeken; wel kan er advies over te gebruiken algoritmen of datastructuren gegeven worden.

Je kan ook hulp inroepen via DomJudge's clarifications. We doen ons best, maar kunnen geen snelle beantwoording garanderen. Het is dan ook je eigen verantwoordelijkheid om tijdig hulp te zoeken. Het onbeantwoord blijven van een clarification is nooit een excuus om de deadline niet te halen. Let op: de studentassistenten die clarifications beantwoorden zijn niet verantwoordelijk dat je programma werkt: dat ben je zelf. Ze worden ook niet betaald voor 24/7-service; hulp door clarifications heeft dus zijn grenzen...

Veel van wat je moet weten wordt op hoorcollege behandeld; bezoek dus de colleges zo veel mogelijk.

Algemene aanwijzingen

De opdrachten worden steeds moeilijker, dus doe vanaf het begin mee en loop lekker binnen met de weggevertjes!

De eerste opdracht helpt je op weg met het beheersen van de C#-ontwikkelomgeving, het begrijpen van de opdrachtformulering en het DomJudge inleversysteem. Je leert ook de basis van het vervangen van een recursieve oplossing door tabellering. De ontwikkelomgeving Visual Studio voor C# kun je gratis downloaden van Microsoft. UU-studenten kunnen zelfs gratis de professionele editie krijgen. Die heeft allemaal leuke goodies, bv een ingebouwde profiler waarmee je kunt zien waar je programma veel tijd aan besteedt.

Voor verschillende van de opdrachten heb je mogelijk niet genoeg tijd als je eraan begint na de deadline van de vorige opdracht. Begin dus op tijd en plan je werk goed.

Fraude, Plagiaat en Verboden samenwerking

Je mag uiteraard met anderen over de opdracht praten, wij moedigen dit zelfs aan omdat je van elkaar het meeste kunt leren. Zo'n gesprek mag echter niet bestaan uit het helemaal voordoen of uitleggen van de opdracht. Als richtlijn geldt dat een gesprek over de opdracht maximaal zo'n 3 minuten duurt.

Vorige jaren ging de samenwerking helaas in een paar gevallen wat te ver. Er werd code overgenomen of per ongeluk code van anderen ingestuurd.

Let op: je moet de ingeleverde code helemaal zelf maken. Het overnemen of delen van code is niet toegestaan! Je mag daarom ook niet je programma door anderen laten bewaren of testen en je mag je programma niet op openbare code-platforms zetten. Je mag ook geen pseudocode met andere studenten uitwisselen. Bij een gratis GitHub-account is al je code openbaar! Zet je code dus NIET op GitHub. UU-studenten kunnen gratis gebruik maken van GitLab.

Als je (kleine) delen van je code van internet haalt (bijvoorbeeld voor algemene veelvoorkomende datastructuren) dan moet je in een comment de bron vermelden. Het moet hierbij wel gaan om korte snippets. Wees hierbij redelijk: als de opdracht "schrijf een wordprocessor" is, mag je de code van QuickSort opzoeken en die overnemen. Als de opdracht "schijf een sorteeralgoritme" is, mag dat uiteraard niet.

DomJudge bevat plagiaat-detectie en plagiaat wordt bestraft volgens de regels van de Universiteit Utrecht. Docent of nakijkers kunnen je vragen, delen van je code toe te lichten.

Inleveren met DomJudge

Voor je met het inleveren begint, kun je er het best voor zorgen dat de hiernaast gegeven invoeren correct worden verwerkt (de correcte uitvoeren staan er naast). Bezoek de DomJudge TEAM pagina en log in met je Solis-id.

Submitten: Het inzenden van een C# oplossing is eenvoudig: Klik "Select file..." en selecteer de file met je C#-code; DomJudge verwacht dat je alle classes in een file zet. Geef aan welk van de problemen je hebt opgelost (hoop je) en "kies" de programmeertaal (alleen C# is mogelijk). Beuk op Submit en wacht af wat DomJudge van je programma vindt. Dit systeem kijkt de ingeleverde opdrachten automatisch na; daarom is het belangrijk dat je de gespecificeerde uitvoerstructuur exact aanhoudt.

Beoordeling van DJ: DomJudge kan aangeven dat je programma niet compileert, te langzaam werkt, of een verkeerde uitvoer geeft. DomJudge kan niet controleren of je het juiste algoritme hebt geïmplementeerd. Dus als de opdracht zou zijn 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.

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 algoritme nog binnen de tijd lukken. Dan volgen meestal grotere instanties, 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! Dus 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 kan veiliger zijn, je vragen op het werkcollege te stellen. Het is jouw verantwoordelijkheid dat je de deadline haalt, niet de onze!

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 verlenging kunt meedoen en lever het dan opnieuw in.

Becijfering en beoordeling

De becijfering van het praktikum is gebaseerd op het aantal succesvol en tijdig ingeleverde opdrachten. In het verdere betekent een opdracht "doen" dan ook: dat je hem op tijd hebt ingeleverd en er een CORRECT status voor hebt gekregen. Je moet ten minste vier opdrachten doen; met drie of minder haal je geen Algoritmiek. Vijf gemaakte opdrachten geven een bonus-ophoging van 1/2 punt, zes opdrachten 1 punten bovenop je theoriegemiddelde.

Verlengen? Om aan de verlenging van Algoritmiek mee te mogen doen, moet je al minstens drie opdrachten hebben gedaan. In de verlenging mag je een vierde opdracht doen om zo aan het minimum aantal te komen. Je mag ook in de verlenging een vijfde opdracht maken om aan de enkele bonus (1/2 pt) te komen. Je kunt niet in de verlenging een zesde opdracht maken en de dubbele opdrachtbonus (1 pt) halen: de dubbele bonus kun je alleen binnen periode 3 halen.

De keuze voor C#

Binnen de opleiding Informatica wordt de taal C# gebruikt. Algoritmiek volgt die keuze en het is niet mogelijk of toegestaan in Java te werken. Door de keuze voor èèn taal en automatisch nakijken voorkomen we dat assistenten veel tijd kwijt zijn waar je als student weinig van merkt.

Wat is de consequentie voor Java-ervarenen? Voor de opdrachten heb je vrijwel geen grafische en interactieve libraries nodig, want bijna alles werkt met tekst input/output en algoritmische constructies. De verschillen tussen Java en C# zijn daar minimaal, dus qua programmeren maakt het niet veel uit.

Je moet wel met de C# ontwikkelomgeving werken, dus je hier even op inlezen en inwerken. De eerste programmeeropdracht Tellen van A naar B helpt je hiermee op weg. Ook al lijkt hij simpel, begin er niet te laat aan! Houd er rekening mee dat je misschien nog iets aan een assistent moet vragen op het werkcollege voordat je hem kunt inleveren.