DomJudge-Practicum. Open Dag UU

Vergelijkbare documenten
Het Eindfeest. Algoritmiek Opgave 6, Voorjaar

Datastructuren en algoritmen voor CKI

PG blok 4 werkboek bijeenkomst 4 en 5

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Opgave 2. Binaire informatie

Memoriseren: Een getal is deelbaar door 10 als het laatste cijfer een 0 is. Of: Een getal is deelbaar door 10 als het eindigt op 0.

1. REGELS VAN DEELBAARHEID.

Greedy algoritmes. Algoritmiek

Algoritmisch Denken: Dodo s Bit Parity

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

DOMjudge teamhandleiding

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Programmeermethoden NA. Week 5: Functies (vervolg)

Algoritmen en programmeren: deel 2 - basis

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15)

algoritmiek - antwoorden

Public Key Cryptography. Wieb Bosma

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

WISKUNDE B -DAG = 2. maar en hoe nu verder? 29 november 2002

DOMjudge teamhandleiding

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Verzamelingen, Lijsten, Functioneel Programmeren

1 Hele getallen. Rekenen en wiskunde uitgelegd Kennisbasis voor leerkrachten basisonderwijs. Uitwerkingen van de opgaven bij de basisvaardigheden

Inhoudsopgave Voorwoord 5 Voordat je begint 6 Wat heb je nodig? 7 De website bij het boek 7 Voor ouders, verzorgers en leraren

1.5.1 Natuurlijke, gehele en rationale getallen

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

1.3 Rekenen met pijlen

Verzamelingen, Lijsten, Functioneel Programmeren

Programmeermethoden NA. Week 5: Functies (vervolg)

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

PO: Informatica Olympiade

In Katern 2 hebben we de volgende rekenregel bewezen, als onderdeel van rekenregel 4:

Verzamelingen, Lijsten, Functioneel Programmeren

Uitwerkingen oefeningen hoofdstuk 1

1 Kettingbreuken van rationale getallen

5.1 Herleiden [1] Herhaling haakjes wegwerken: a(b + c) = ab + ac (a + b)(c + d) = ac + ad + bc + bd (ab) 2 = a 2 b 2

REKENVAARDIGHEID BRUGKLAS

Programmeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019

WISKUNDE 1. Aansluitmodule wiskunde MBO-HBO

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

Haskell: programmeren in een luie, puur functionele taal

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Programmeren in C++ Efficiënte zoekfunctie in een boek

handleiding ontbinden

regel: de som van de cijfers op de even plaatsen min de som van de cijfers op de oneven plaatsen moet 0 of 11 zijn.

De eerste ronde Nederlandse Informatica Olympiade

ANTWOORDEN blz. 1. d = 1013; = ; = ; =

Programmeren: Visual Basic

Programmeermethoden NA. Week 3: Controlestructuren

We beginnen met de eigenschappen van de gehele getallen.

Rekentijger - Groep 7 Tips bij werkboekje A

Uitwerking puzzel 91-7: Je kunt het schudden

Bij elkaar behorende instructies die een probleem oplossen of een taak uitvoeren.

Datum: Gemaakt door: Berend de Groot Voor: ComSi, ROC Friese Poort

Opgaven Eigenschappen van Getallen Security, 2018, Werkgroep.

Het programma ELGAMAL

Excel. Inleiding. Het meest gebruikte spreadsheet programma is Excel.

opdrachten algoritmiek - antwoorden

VAKANTIEWERK WISKUNDE

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Algoritmiek. 2 februari Introductie

Rekenen aan wortels Werkblad =

Games met Lua en Löve2D

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Van CaseTalk naar een database in SQLite studio

II. ZELFGEDEFINIEERDE FUNCTIES

Outlook. Nog geen Microsoft ID? Klik links op Registreren (en lees het stappenplan op pagina 2 tot 5) Open je browser en ga naar outlook.

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

De eerste ronde Nederlandse Informatica Olympiade

Stroomschema s maken in Word

Combinatoriek groep 1 & 2: Recursie

Examencursus. wiskunde A. Rekenregels voor vereenvoudigen. Voorbereidende opgaven VWO kan niet korter

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Proefstuderen Informatica

Extra oefeningen Hoofdstuk 8: Rationale getallen

Modulewijzer InfPbs00DT

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?

Informatica: C# WPO 13

PYTHON REEKS 1: BASICS. Mathias Polfliet

BEGINNER JAVA Inhoudsopgave

RSA. F.A. Grootjen. 8 maart 2002

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

Cursus Programmeren en Dataverwerking.

Getaltheorie I. c = c 1 = 1 c (1)

Rekentermen en tekens

Routeboekje. bij Pluspunt. Groep 4 Blok 1. Van...

2 REKENEN MET BREUKEN Optellen van breuken Aftrekken van breuken Vermenigvuldigen van breuken Delen van breuken 13

EXCEL BASIS 2013

Kernbegrippen Kennisbasis wiskunde Onderdeel breuken

Examen Datastructuren en Algoritmen II

Transcriptie:

1 Introductie DomJudge-Practicum Open Dag UU Bij veel vakken die je volgt tijdens je studie informatica aan de UU, moet je programmeeropdrachten maken. Soms moet je die inleveren zodat ze door de docent nagekeken kunnen worden, maar steeds meer vakken gebruiken het automatische nakijksysteem DomJudge. Als je een programma in DomJudge inlevert, wordt het automatisch getest met een aantal testinvoeren. Afhankelijk van hoe je programma werkt, krijg je binnen een paar minuten een beoordeling terug: Correct: je hebt de opgave goed. Wrong-Answer: de uitvoer van je programma klopte niet. Timelimit: je programma was te langzaam. Run-Error: je programma liep vast met een foutmelding. Bij een correct heb je de opdracht gehaald, en anders... mag je het tot de deadline net zo vaak proberen als je wilt! 2 Opgaven In de bundel zitten vier opgaven, in volgorde van oplopende moeilijkheid. De eerste twee opgaven zijn al opgelost, maar de oplossing is fout! Lever de opgave in in DomJudge, kijk wat de fout is, en probeer die te verbeteren. Collatz: schrijf een programma om de lengte van een Collatz-rij te berekenen. Deze opgave is geschikt als je nog helemaal geen programmeerervaring hebt. Priem: zoek gegeven een getal x, het eerste getal y x dat een priemgetal is. Als je al een beetje programmeer-ervaring hebt is deze goed te doen. A2B: tel het aantal A2B-rijtjes. Voor de meer ervaren programmeurs. Feest: bouw een TomTom voor carpoolen. Deze opgave is extreem moeilijk, en alleen ouderejaars studenten zullen hem kunnen oplossen. Maar het is misschien wel leuk om te zien, wat je allemaal kan leren binnen de opleiding informatica.

3 Instructies Bestanden. S:\domjudge. De bestanden die je nodig hebt voor dit practicum staan in Visual Studio. We programmeren in de programmeertaal C# en doen dit in de editor Visual Studio. Open Visual Studio door te dubbelklikken op het bestand Collatz.sln (dit is al voor je gedaan). Je krijgt nu de code te zien (die staat in Collatz.cs - dit is het bestand dat je in DomJudge moet inleveren, en niet het.sln-bestand). Druk op F5 om het programma te testen. (Voor gevorderde programmeurs) Als je je eigen programma wil maken kun je via File New Project C# Console Application een nieuw project maken. Inleveren. Open https://domjudge.cs.uu.nl/dj/opendag/team/ en registreer een account met username en password en log vervolgens in. Klik op select file... en selecteer het in te leveren bestand (waarschijnlijk Collatz.cs of Priem.cs 1 ). Selecteer in de dropdowns het probleem dat je inlevert (Collatz, Priem of A2B) en de taal (de voorbeeld-programma s zijn in C#). Druk op submit - binnen enkele seconden krijg je te zien of je programma correct is of niet. Oplossen. De geleverde voorbeeldoplossingen zijn fout! Probeer de fout te vinden, verbeter hem, en lever opnieuw in. Is het programma nu wel correct? 1 Dit staat in de gelijknamige submap van de domjudge-map.

Collatz-Lengte DomJudge Practicum Opgave 1, Open Dag 18-19 Nov 1 Van een (positief) getal maak je met het volgende recept een Collatz-rij 2 : Als het getal 1 is bereikt, stopt de rij. Als een getal even is, deel door 2; als het oneven is, vermenigvuldig met 3 en tel er 1 bij. De Collatz-rij van 22 bevat 15 stappen: 22, 11, 34, 17, 52, 26, 13, 4, 2, 1, 5, 16, 8, 4, 2, 1. Zou je na 1 verder gaan, dan kom je na 3 stappen (1, 4, 2, 1) weer bij 1. Je programma moet van vier begingetallen de lengte van de Collatz-rij berekenen. 2 Specificatie van Input en output De invoer bestaat uit vier regels, die elk precies èèn getal kleiner dan 1 bevatten. De uitvoer moet ook vier regels hebben met elk een getal, namelijk de lengte van de Collatz-rij van het zoveelste invoer-getal. 3 Voorbeeld Voorbeeld ColVb1: Houd rekening met minimale invoer (1)! 15 871 1 22 17 178 15 4 Aanwijzingen Er bestaat een Collatz-anagram: van het startgetal 871 bestaat de lengte uit dezelfde cijfers. Kun je een getal vinden dat gelijk is aan de lengte van zijn Collatz-rij? Kun je twee getallen vinden die elkaars Collatz-lengte zijn? 1 Versie: 4 november 216. 2 Zie https://nl.wikipedia.org/wiki/vermoeden van Collatz.

Priemgetal DomJudge Practicum Opgave 2, Open Dag 18-19 Nov 1 Help! Teus de Timmerman is zijn gereedschap kwijt! Help hem zoeken naar het volgende priemgetal. Vind, voor ieder getal x op de invoer, het kleinste priemgetal x vanaf dat getal. 2 Specificatie van Input en output De invoer bestaat uit positieve getallen, eentje per regel, gevolgd door een. Voor elk positief getal moet je zoeken naar het eerstvolgende priemgetal. De uitvoer heeft de lijst met gezochte priemgetallen, en wordt ook afgesloten met. 3 Voorbeeld Voorbeeld PriemVb1: Als het invoergetal priem is, is dat ook de uitvoer. Wat zou er gebeuren als je de uitvoer er weer instopt als invoer? 4 135 25 253 222222 999999999 41 1361 253 253 222247 17 4 Aanwijzingen Je kunt testen of een getal n priem of een product is, door het te delen door alle getallen tussen 2 en n 1. Gaat zo n deling geheel op (rest ) dan is n een product. Als geen van de delingen opgaat, is n priem. Het delen gaat iets sneller als je niet door alle getallen deelt, maar alleen door 2 en alle oneven getallen. Zal het zoeken ook sneller gaan wanneer je alleen oneven waarden voor n probeert? Als n een deler d heeft, dan is het getal e = n/d ook een deler. En: het is zeker dat d of e kleinergelijk is aan de wortel van n. (Waarom?) 1 Versie: 4 november 216.

Tellen van A naar B DomJudge Practicum Opgave 3, Open Dag 18-19 Nov 1 Een (A, B)-rijtje is een rij tekens I (voor Increment) en D (voor Dubbel) zo, dat als je de operaties toepast op A, er B uitkomt. Voorbeeld: DII is een (5, 12)-rijtje. Begin met 5, verdubbel, verhoog, verhoog en je krijgt 12. Er bestaan drie (5, 12)-rijtjes, namelijk IIIIIII, DII, ID. Je programma berekent van K paren A en B, het aantal (A, B)-rijtjes. 2 Specificatie Invoer en Uitvoer De invoer begint met een regel met één getal, K < 256. Daarna volgen K regels met elk twee getallen A en B, waar < A B < 1. De uitvoer bestaat uit K regels met elk één getal, op de i de regel het aantal rijtjes van het i de paar. 3 Voorbeeld Voorbeeld geen: Check altijd de minimaal toegestane invoer. Voorbeeld klein: Dit kun je nog met de hand checken. 2 3 14 5 24 Voorbeeld twee: Het aantal loopt snel op; reken met longs, niet met ints. 2 1 1 1 1 8 13 354 74116423 4 Aanwijzingen Het aantal (A, B)-rijtjes is uit te drukken als het aantal rijtjes dat op I eindigt, plus het aantal dat op D eindigt. Het aantal rijtjes dat op I eindigt, is gelijk aan het aantal (A, B 1)-rijtjes. 1 Versie: 4 november 216.

Het Eindfeest DomJudge Practicum Opgave 4, Open Dag 18-19 Nov 1 Om het (successvol) afsluiten van het vak Algoritmiek te vieren, is er een feest georganiseerd. Jij beschikt als enige van je vrienden over een auto. Het feest kan pas beginnen als iedereen er is, dus je besluit om te gaan carpoolen. Je kan je vrienden thuis ophalen, maar je vrienden kunnen ook naar een ophaallocatie lopen en daar opgepikt worden of direct naar het feest lopen. Je vrienden zijn te voet S langzamer dan jij met je auto. Jouw taak is om voor jezelf en je vrienden een zo efficiënt mogelijke route te berekenen, d.w.z. een route waarbij het feest zo vroeg mogelijk kan beginnen als iedereen tegelijkertijd vertrekt. Je mag aannemen dat er genoeg plaats in je auto is voor al je vrienden. 2 Specificatie Invoer en Uitvoer De invoer begint met een regel met daarop vijf gehele getallen: n 1., m 1., k 18, S 1. en de uitvoermodus (die 1 of 2 kan zijn). Hierbij is n het aantal mogelijke locaties l 1,... l n en is k het aantal vrienden. Dan volgen n regels met op de i e regel een string: de naam van locatie l i. Dan volgen op één regel k +2 getallen: het eerste is de locatie van jouw huis, het tweede de locatie van het feest en de overige getallen zijn de locaties van je vrienden v 1,..., v k. Dan volgen m regels met ieder 3 gehele, positieve getallen. Een paar a, b, c stelt voor dat er een ongerichte verbinding is tussen locaties l a en l b die met de auto c minuten kost om te overbruggen. De uitvoer is een getal X, het aantal minuten tot het feest kan beginnen, gerekend vanaf het moment dat de eerste persoon van huis vertrekt. Indien de uitvoermodus 1 is, volgt hierna een routebeschrijving. De routebeschrijving bestaat uit een lijst namen van locaties, ieder op een aparte regel, in de volgorde dat je ze bezoekt. Als je vriend i ophaalt wordt dit aangegeven met een regel Vriend i. Je mag je vrienden alleen laten instappen op een knooppunt, dit kan uit veiligheidsoverwegingen niet halverwege een verbinding. Je vrienden beschikken zelf over een routeplanner, hun route hoef je dus niet te geven. Als een vriend zelf naar het feest loopt (en dus niet met de auto meerijdt) dan komt deze vriend niet in de uitvoer. 1 Versie: 17 november 216.

3 Voorbeeld Invoer en Uitvoer Voorbeeld voorbeeld: Vriend 3 loopt eerst van Afrit 19 naar School, daar pik je hem op. 9 12 3 1 1 Thuis Toren Stadhuis Kasteel School Afrit 18 Feest Afrit 19 1 8 4 7 9 1 2 3 1 3 4 1 8 6 2 4 6 2 3 2 3 5 8 4 5 5 5 6 2 5 9 3 6 7 12 6 8 4 7 9 2 48 Thuis Toren Kasteel Vriend 1 School Afrit 18 Vriend 2 School Vriend 3 Feest 4 Algoritmische Aanwijzingen Dit is de lastigste opdracht. Laat je inspireren door twee algoritmen/technieken die op het college zijn behandeld. Misschien is het handig om bitstrings 2 /bit-operaties te gebruiken. Kun je bewijzen dat het probleem N P -moeilijk is, bijvoorbeeld door een reductie van traveling salesman? Is het probleem in NP? 2 Niet de BitArray-klasse, een bitstring is gewoon een int of long.