PO: Informatica Olympiade

Maat: px
Weergave met pagina beginnen:

Download "PO: Informatica Olympiade"

Transcriptie

1 PO: Informatica Olympiade Wat is de Informatica Olympiade? De Nederlandse Informatica Olympiade (NIO) is een programmeerwedstrijd voor de bovenbouw van het Voortgezet onderwijs. Het is een onderdeel van de International Olympiad in Informatics (IOI). De eerste ronde van de NIO bestaat uit 4 onderdelen A, B, C en D: Klik hier voor de officiële opgaven en een korte toelichting van de NIO. De 100 inzendingen met de meeste punten (mits deze minimaal 200 punten hebben gehaald) worden uitgenodigd voor de tweede ronde van de NIO in maart 2015 op de Technische Universiteit Twente. Om mee te doen aan de olympiade, moeten je uitwerkingen digitaal zijn ingeleverd bij de NIO voor 25 januari (Ze worden direct automatisch nagekeken en je kunt zo vaak nieuwe/verbeterde versies insturen als je wilt). De beste deelnemers van de tweede ronde gaan door naar de derde ronde om te bepalen wie er namens Nederland mee mag doen aan de Internationale Informatica Olympiade 2017 in Iran. 1

2 Inhoud Wat is de Informatica Olympiade?... 1 De PO... 3 Puntenverdeling:... 3 Inleveren en beoordeling:... 4 Automatisch nakijken... 4 Tips en tricks bij de A opgaven... 7 Opdracht 1: Vierkant (1,5 pnt)... 7 Opdracht 2: Klnkrwg (0,5 pnt)... 7 Opdracht 3: Collatz (1,5 pnt)... 7 Opdracht 4: Vullen (1,5 pnt):... 8 Opdracht 4: Brute force strategie... 9 Opdracht 4: Recursieve strategie Opdracht 5: Boomcentrum (1 pnt) Introductie recursie De opgave

3 De PO Als PO voor Informatica gaan we de een deel van de opgaven van de eerste ronde van de NIO maken, namelijk die van categorie A en C. Je bent zelf vrij om ook daadwerkelijk mee te doen aan de Olympiade met je uitwerkingen (Met het maken van de PO ben je al een flink eind op weg, je kunt dan zelf de overige opgaven nog maken voor meer punten). Meer details over hoe je meedoet en welke voorwaarden er zijn, vind je in het document van de NIO op de informaticasite (en op Wt helpt je natuurlijk graag als je officieel mee wilt doen. De olympiade schrijft niet voor in welke programmeertaal je de oplossingen maakt. De opgaven zijn zo gemaakt dat je in principe in elke taal een oplossing kunt schrijven. In dit document ga ik er van uit dat je het in Python doet. Als je liever een andere taal gebruikt, mag dat natuurlijk ook. Puntenverdeling: Je doet deze PO alleen of met zijn tweeën. ( Let op: De deelname aan de NIO zelf is individueel, dus van een duo kan maar 1 persoon deelnemen, omdat je niet 2x dezelfde code in kunt/mag leveren. Als je toch allebei wilt deelnemen, zul je verschillende versies van je oplossingen moeten maken.) We maken voor de PO alleen opgaven A en C (en eventueel D als je wilt). Opgaven B worden uniek gegenereerd voor elke deelnemer. Zeker doen als je aan de Olympiade mee wilt doen, maar voor de PO slaan we ze over. De beoordeling van de PO is als volgt: - 1 punt cadeau - Je verslag en logboek leveren samen 1 punt op - Met het maken van opgaven A1 t/m A4 kun je 5 punten verdienen: o A1: 1,5 punt o A2: 0,5 punt o A3: 1,5 punt o A4: 1,5 punt - Met het maken van A5, en opgave C (en eventueel D als superbonus), zijn de laatste 3 punten te verdienen: o A5: 1,0 punt o C1: 0,5 punt o C2: 0,5 punt o C3: 0,5 punt o C4: 0,5 punt Deels correcte oplossingen van een opgave leveren een deel van de punten op, dus ook al kom je er niet uit, lever je beste poging van elke opgave toch in. Let op: de opgaven lopen op in moeilijkheid, maar de puntenwaardering ligt relatief zwaar op de eerste opgaven. Zo moet het voor iedereen mogelijk zijn een nette voldoende te halen en voor de doorzetters zijn hogere punten haalbaar. 3

4 Inleveren en beoordeling: Je levert bij Wt je gemaakte programma s in. Daarnaast maak je een begeleidend verslagje waarin je de code uitlegt. Hiermee help je mij jouw/jullie code te begrijpen en laat je zien dat je begrijpt wat je gedaan hebt (plagiaatcontrole). Tevens lever je een logboekje in met de bestede tijd per persoon. Dit geeft mij inzicht in jullie tijdsbesteding en kan dienen als bewijsmateriaal bij eventuele onenigheid binnen een duo. Let op: Omdat deze PO plagiaat gevoelig is (Wt heeft er eerder problemen mee gehad), let ik extra op het kopiëren van andermans code en op de codetoelichting die je in je verslag geeft. Bij twijfel zal Wt om een mondelinge toelichting vragen om te checken of je je eigen code hebt geschreven en snapt wat je hebt gedaan! Elkaar een beetje helpen mag natuurlijk, maar code inleveren die je zelf niet helemaal begrijpt en dus niet kan toelichten, mag niet. Je levert alle onderdelen van de PO (de programma s en het verslag) in in een.zip file bij de opdracht die openstaat in Magister. Je hoeft per groepje uiteraard maar 1 keer in te leveren. Uiterlijke inleverdatum: Donderdag 22 december om 23:59 uur Automatisch nakijken De informatica olympiade werkt met een automatisch nakijksysteem. Hierbij kun je een script dat je geschreven hebt als oplossing voor een van de opgaven inleveren. Er worden dan een aantal testcases automatisch op losgelaten en je krijgt punten voor elke testcase waarvoor je script het juiste antwoord geeft. Voor de testcases die misgaan krijg je te zien wat de foutmelding was (bv. Een fout antwoord, een error bij het runnen, maximale runtime overschreden, etc.). Met deze info kun je je scrpit eventueel verbeteren en weer een nieuwe versie indienen. Je kunt elke opgave zo vaak proberen als je wilt, de hoogste score blijft staan. Zelfs als je niet aan de officiële olympiade wilt meedoen kun je hier dankbaar gebruik van maken om je PO opgaven te testen. Het werkt als volgt: Ga naar en maak een account aan. Als je bent ingelogd zie je links alle A, B en C opgaven staan (en 00 is een testopgave voor als je wilt checken of het inleveren werkt). Klik op de opgave je je wilt inleveren en klik Voeg inzending toe. Je kunt nu een script uploaden. Vergeet niet de juiste programmeertaal te selecteren (Python 2): 4

5 Als je op opslaan klikt wordt je script geupload en uitgevoerd. Je ziet dan je inzending in de lijst staan met de status uitvoeren. Dit betekent dat je script op dit moment uitgeveord wordt. Als je na een paar seconden de pagina ververst (F5), dan zie je als het goed is de status op klaar staan en is er een score gegeven (max 40 voor elke A opgave): Je kunt nu op de inzending klikken voor meer info en eventuele foutmeldingen als je niet alle 40 punten hebt gehaald: 5

6 Als er foutmeldingen staan in de rechtertabel kunnen die je helpen de fouten in je script op te sporen. De rest van dit document bevat tips, hints en uitleg om je te helpen de A opgaven te tackelen (deels work in progress ) 6

7 Tips en tricks bij de A opgaven Opdracht 1: Vierkant (1,5 pnt) In deze opdracht wordt om een getal N gevraagd met 0 < N < 41. Op basis van dit getal maak je een vierkant van sterretjes en streepjes. De truuk bij deze opgave is om te bepalen wat de relatie is tussen een aantal onderdelen (getallen) van het vierkant en de grootte van N: Hoeveel regels is de output ten opzichte van N? (Dat is makkelijk, het zijn gewoon N regels) Wat is de relatie tussen het aantal sterretje op de eerste en laatste regel en N (ook makkelijk) Hoeveel tussenregels (regels die uit sterretjes en streepjes bestaan) zijn er ten opzichte van N? Hoeveel sterretjes staan er vooraan en achteraan op een tussenregel? Hoeveel streepjes staan er op een tussenregel ten opzichte van N? Als je deze info scherp hebt, kun je een programma met een (for) loop schrijven dat deze getallen omzet in de juiste hoeveelheid sterretjes en streepjes. N = 1 is een speciaal geval die het beste met een if zelf kunt checken om er meteen de juiste uitvoer bij te geven (hiervoor hoef je niet te rekenen/loopen natuurlijk Hint: Vergeet niet dat je in Python strings kunt vermenigvuldigen. Dus "x" * 6 geeft "xxxxxx". Dat komt hier bijzonder goed van pas Opdracht 2: Klnkrwg (0,5 pnt) Deze opgave hebben we al eerder gedaan. (*kuch* Wt opgave 9b *kuch*). Om je te motiveren om deze opgave toch nog te maken (en zo aan te passen dat hij wordt geaccepteerd door de olympiadesoftware), krijg je toch 0,5 punt voor deze vraag. Opdracht 3: Collatz (1,5 pnt) De olympiade heeft niet veel fantasie dit jaar... Deze opgave hebben we ook al eerder gemaakt in een net iets andere vorm. (*kuch* Wt opgave 12 *kuch*). Gelukkig moet je nog iets extra s doen in deze opdracht; namelijk het maximum bepalen van alle getallen die in de reeks voorbij zijn gekomen De truuk is grofweg als volgt: Voordat je de reeks gaat genereren, maak je een variabele aan om de hoogste waarde in op te slaan. Deze geef je een hele lage waarde (je hebt immers nog geen hoge waarde gezien, je moet de lijst nog maken..) Bij het genereren van de lijst check je steeds of het nieuwe getal misschien hoger is dan het hoogste dat je tot nu toe hebt gezien. Zo ja wordt dit het nieuwe hoogste getal, anders niet. Als je klaar bent met de lijst, heb je zo de hoogste gevonden en kun je die afdrukken. 7

8 Opdracht 4: Vullen (1,5 pnt): Lees heel goed de opgave, het is belangrijk dat je goed snapt hoe het spelletje werkt voordat je aan de code begint. Belangrijk om te onthouden: - Vakjes worden alleen horizontaal en verticaal als aangrenzend gezien - Het basisgebied start met de kleur van het vakje linksboven (en alle aangrenzende vakjes van dezelfde kleur) - Er wordt steeds gezocht naar de volgende vrije kleur. Dat is de kleur met het eerste vakje dat een andere kleur dan het basisgebied heeft (gezocht vanaf linksboven rij voor rij naar rechtsonder) - Deze vrije kleur wordt de nieuwe kleur van het basisgebied. Alle vakjes die deze kleur hebben en grenzen aan het basisgebied, worden nu ook onderdeel van het basisgebied. - Dit wordt herhaald totdat alle vakjes tot het basisgebied horen - Het antwoord waarom gevraagd wordt, is het aantal stappen dat hiervoor nodig was. Er zijn grofweg 2 strategiën om deze opgave op te lossen: Brute force (zeer inefficiënt, maar iets makkelijker te begrijpen) Recursief (slimme algoritmische truuk om het veel efficiënter te doen, is wat laster te begrijpen, maar interessant om te leren) Om te snappen hoe inefficiënt de brute-force methode hier is, bekijken we even hoeveel stappen er nodig zijn om het op te lossen: 1. Merk op dat er 100 vakjes zijn (10 * 10). 2. Om het basisgebied aan de start te bepalen moeten we het volgende doen: o Om te beginnen is het vakje linksboven basisgebied, de overige vakjes niet. o Nu vragen we een voor een aan alle vakjes of ze een buurman hebben die ook basisgebied is en of ze hetzelfde nummer hebben als het basisgebied. Zo ja wordt dat vakje ook basisgebied. o Omdat door de vorige stap het basisgebied misschien groter is geworden, moeten we dezelfde vraag nog een keer aan alle vakjes stellen. Immers, misschien hebben er nu wel een aantal een nieuwe basisgebied buurman. Dit zal (afhankelijk van het bord) maximaal 100(!) keer moeten gebeuren. o We hebben dus potentiëel 100 * 100 = stappen nodig om het eerste basisgebied te bepalen 3. Om het basisgebied uit te breiden, moeten we nu op zoek naar het volgende vrije getal (dus het eerste vakje met een andere kleur dan het basisgebied. Dat is niet lastig en kost maximaal 100 stappen (alle vakjes doorlopen vanaf linksboven tot we het volgende vrije vakje gevonden hebben) 4. Om het basisgebied uit te breiden moeten we nu ongeveer hetzelfde doen als in stap 2 en dat kost ons weer 100 * 100 = stappen. 8

9 5. Stap 3 en 4 moeten misschien wel 99 keer herhaald worden voor elke volgende uitbreiding van het gebien met een nieuw nummer Om al deze fasen te doorlopen en het hele bord te vullen zijn er dus grofweg 100 * 100 * 100 = stappen nodig. In de informatica noemen we dit een complexiteit van N^3 (het aantal stappen is ongeveer het aantal vakjes tot de 3 e macht. (stel je hetzelfde spel voor met bijvoorbeeld 1000 vakjes *oef* 1 miljard stappen ) Wt heeft beide versies gebouwd. Zoals je aan de uit slag kunt zien, is de recursieve (afhankelijk van de testcase) vaak 10x zo snel! (Maar gelukkig is ook de brute-force versie nog ruim binnen de marge van 2 seconden uitvoertijd) Opdracht 4: Brute force strategie De brute force is niet efficiënt, maar wat makkelijker te begrijpen (zie stappen hierboven). Ik zal eerst hints geven om het zo aan te pakken. Hints voor de betere, recursieve aanpak staan verderop. 1. Het bord inladen. Voordat we een oplossing kunnen zoeken voor het probleem, zullen we eerst de invoer goed moeten verwerken en opslaan in variabelen in ons programma, zodat we weten hoe het bord eruit ziet en we bij kunnen houden wat het basisgebied is. De invoer bestaat uit 10 regels van elk 10 tekens. We geen deze invoer in een 2D list zetten : - Begin met een lege list met de naam bord - Maak een (for) loop die precies 10x wordt uitgevoerd. Elke stap van deze loop: o lees een regel uit de invoer (raw_input) en sla deze op in een tijdelijke variabele invoer. Dit zijn steeds 10 cijfers, maar we interpreteren ze als één lange string. o We kunnen de gelezen string converteren naar een list (die maakt er dus een lijst met 10 losse strings van elk 1 teken van) met het commando list(invoer) 9

10 o Met bord.append(invoer) plak je nu deze lijst van 10 tekens als sublijst aan de bord list Je hebt nu dus een list bord met daarin 10 keer een sublist van elke 10 strings van 1 teken lang. Test dit door je bord variabele te printen. Je zou zoiets als uitvoer moeten krijgen (met het voorbeeld bord als invoer: [['1', '3', '4', '6', '2', '4', '2', '3', '3', '1'], ['1', '2', '4', '3', '2', '2', '2', '4', '4', '5'], ['1', '4', '4', '2', '3', '2', '3', '4', '5', '5'], ['4', '4', '6', '5', '5', '5', '5', '5', '5', '4'], ['4', '3', '5', '1', '5', '2', '5', '1', '5', '3'], ['2', '1', '5', '5', '5', '1', '5', '5', '3', '3'], ['5', '5', '5', '5', '5', '5', '5', '5', '5', '5'], ['5', '2', '5', '6', '5', '4', '5', '3', '5', '4'], ['1', '6', '2', '3', '2', '3', '3', '2', '6', '6'], ['6', '6', '1', '3', '4', '1', '2', '4', '5', '5']] Omdat het heel veel gedoe is om elke keer dat je het programma wilt testen steeds die 10 regels in te voeren, kun je natuurlijk tijdelijk de hierboven gedrukte dubbele lijst rechtstreeks in je code zetten en het lezen van de invoer tijdelijk uitzetten. Als je daarnaa met andere borden wilt testen, moet je dit dus weer terugzetten. 2. Het basisgebied bijhouden. We moeten niet alleen weten welke nummers er in elk vakje van het bord staan, maar we moeten ook bijhouden welke vakjes al bij het basisgebied horen en welke niet. Gedurende ons programma moeten we deze administratie steeds bijwerken en zodra alle vakjes basisgebied zijn geworden, zijn we klaar. Om het basisgebied bij te houden, maken we een tweede lijst basisgebied met 10 sublijsten met elk 10 getallen (zodat we voor elk van de 100 vakjes precies een plekje hebben). Alle vakjes die bij het basisgebied horen, krijgen het getal 1 als inhoud, alle vakjes buiten het basisgebied geven we waarde 0. Aan het begin van ons programma weten we nog niet precies waar precies het basisgebied is, we weten alleen dat het vakje linksboven in ieder geval basisgebied is. Om te beginnen willen we dus een lijst die er zo uit ziet: [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 10

11 Hier is dus het vakje linksboven (het eerste getal uit de eerste sublijst) gelijk aan 1 (=basisgebied), de rest is 0. Probeer deze basisgebied lijst in je code te zetten. Print vervolgens de lijst om te checken of hij klopt. 3. Het (start)nummer van het basisgebied bepalen. We moeten steeds bijhouden wat het nummer van het huidige basisgebied is. Dit nummer hebben we nodig om steeds de nieuw toe te voegen vakjes voor het basisgebied te selecteren. We houden dit bij in een variabele huidig_nummer. De startwaarde hiervan is eenvoudig. Deze is immers gelijk aan het nummer van het vakje linksboven. We gaan nu 3 functies schrijven die elk een deel van ons probleem oplossen. Vervolgens gebruiken we de functies in een slimme loop om het hele probleem te tackelen. Een probleem opdelen in deelproblemen is altijd een goede strategie bij dit soort grotere programmeeropgaven. 4. Grenzen checken Een deel van ons probleem vraagt om de mogelijkheid om van een vakje dat nog niet in het basisgebied hoort, te kunnen checken of het grenst aan het basisgebied. Omdat we deze vraag voor heel veel verschillende vakjes zullen gaan stellen, is het het handigst om een functie hiervoor te schrijven. Deze functie (laten we hem checkgrenzen() noemen) vraagt om een x en een y coordinaat (om het te checken vakje aan te geven. We checken nu of (minstens) 1 van de 4 buren van het vakje een basisgebied-vakje is. Zo ja returnt de functie True, zo nee, returnt de functie False Je krijgt dus zoiets als: def checkgrenzen(x,y): #is vakje x-1, y basisgebied? Zo ja return True #is vakje x, y-1 basisgebied? Zo ja return True #is vakje x+1, y basisgebied? Zo ja return True #is vakje x, y+1 basisgebied? Zo ja return True #anders: return False Let op! Niet elk vakje heeft 4 buren! Vakjes aan de rand hebben er maar 3 en vakjes in de hoeken zelfs maar 12 11

12 2. Als we hier geen rekening mee houden, gaan we foutmeldingen krijgen (een IndexError voor de error-handling-liefhebbers onder jullie ;) ). Je kunt immers niet de waarde opvragen van basisgebied[2][-1], of van basisgebied[10][5] (de vakjesnummers lopen maar van 0 tot en met 9). Bij het checken van de buren zul je dus met slimme if-else constructies alleen die buren moeten checken die ook echt bestaan (als een vakje bijvoorbeeld x-index 0 heeft, sla je dus het checken van de linkerbuur (x-1) over, want die bestaat immers niet) Vergeet niet je functie goed te testen voor je verder gaat. Als je zeker weet dat de functie goed werkt, hoef je later niet meer hier naar fouten op zoek: Check goed of je nergens buiten de list kijkt Controleer of je de goede antwoorden terug krijgt (check verschillende vakjes) 5. Functie 2: Vrije vakjes zoeken Een ander deelprobleem dat we moeten tackelen is het zoeken naar het volgende vrije vakje. Dat wil zeggen: nadat we het basisgebied hebben vergroot (zie stap 6), moeten we op zoek naar het kleurnummer van het eerstvolgende vakje dat nog niet bij het basisgebied hoort. Dit is niet heel lastig. We gaan vanaf linksboven alle vakjes langs (van links naar rechts en dan weer vanaf links op de volgende regel) tot we een vakje tegenkomen dat nog niet tot het basisgebied hoort. (We zoeken dus het eerste vakje dat op 0 staat in de basisgebied list). We gaan er meteen voor zorgen (je zult straks zien waarom dat handig is) dat onze functie ook meldt als er geen vrije vakjes meer zijn. Dat betekent namelijk dat we dan kennelijk alle vakjes in het basisgebied hebben en dan zijn we dus klaar! De functie heeft geen argumenten nodig en wordt dus ongeveer als volgt: def zoekvrijvakje(): # Maak een dubbele for-loop die de 100 vakjes in de juiste volgorde # doorloopt. Check van elk vakje of de waarde in de basisgebied-list # op 0 staat. Zodra je die een gevonden hebt, return je het nummer # dat in dat vakje staat (in de bord list). # Als je alle vakjes gehad hebt, maar niets gevonden hebt, dan # return je de waarde 0 (dat is een niet-bestaand kleurnummer) Als we straks de functie gebruiken weten we dus dat als we kleurwaarde 0 terug krijgen, we klaar zijn. Als we een ander kleurnummer terugkrijgen, kunnen we daarmee weer een stap zetten en het basisgebied verder uitbreiden. Test je functie weer goed voordat je verder gaat. Pas eens handmatig de basisgebied list aan om te testen of je functie werkt voor verschillende waardes/vormen van het basisgebied. 12

13 6. Functie 3: Het basisgebied uitbreiden op basis van het nieuwe vrije nummer Bij stap 5 heb je een functie gemaakt om het volgende vrije nummer te zoeken. Op basis van dit nummer willen we het basisgebied uitbreiden met alle vakjes die dit nummer hebben en grenzen aan het huidige basisgebied. Omdat we dit ook een aantal keer moeten doen, schrijven we ook hier een functie voor. Deze functie heeft als argument het nummer van de nieuwe vrije kleur: def breiduit(kleurnummer): # doorloop alle vakjes en doe achtereenvolgens het volgende: # - check of het vakje buiten het basisgebied zit # - Zo ja: check of het vakje grenst aan het basisgebied door de # checkgrenzen() functie te gebruiken uit stap 4 # - Zo ja: check of het vakje een kleur heeft die gelijk is aan het # gezochte kleurnummer. # - Zo ja: voeg het huidige vakje toe aan het basisgebied # Herhaal het bovenstaande 100 keer (dit is het brute-force # gedeelte). Elke wijziging van het basisgebied kan een nieuwe # wijziging tot gevolg hebben. 100 keer herhaling zorgt ervoor dat # je zeker weet dat je alle wijzigingen (er zijn immers 100 vakjes) # hebt doorgevoerd. 7. Alles laten samenwerken Je hebt nu de bouwstenen om de hele opgave te tackelen. We gaan nu de 3 functies uit de vorige stappen gebruiken om de puzzel op te lossen. Grofweg doe je dat als volgt: Zoek steeds het volgende vrije vakje (met je functie uit stap 5). Zolang er nog zo n vakje is: o Gebruik de breiduit() functie om het basisgebied uit te breiden op basis van dit vakje o Houdt steeds het aantal stappen bij Als je klaar bent, druk het aantal getelde stappen af. Opdracht 4: Recursieve strategie Deze strategie is voor de betere puzzelaars en je hebt hiervoor dus recursie nodig. Opgave A5 is zelfs niet te doen zonder recursie. Bij de tips van opgave 5 hieronder staat een korte introductie tot recursie. Bestudeer die eerst en kom dan hier terug. We gaan zorgen voor een soort olievlek -effect. Dat wil zeggen: bij het uitbreiden van het basisgebied gaan we niet heel lomp een-voor-een alle vakjes 100x vragen of ze hun toetsand moeten veranderen. We gaan nu aan alle vakjes van het basisgebied vragen om hun eventuele buren te vragen hun status in basigebied te veranderen als ze het juiste nummer hebben. Deze vragen op hun beurt weer aan hun buren hetzelfde. Zo vraag je vakjes maar 1x in plaats van 100x en loop je toch niets mis. 13

14 Tips en trucs om je op weg te helpen met een recursieve A4 oplossing: - Het begin is identiek aan stap 1, 2 en 3 van de brute-force methode - De functie zoekvrijvakje() uit stap 5 van de brute-force heb je ook nodig - De truuk zit hem in een efficiëntere (recursieve) versie van de breiduit() functie - We vragen elke stap aan alle vakjes van het basisgebied om deze recursieve functie uit te voeren. Zij zullen dan het olievlek effect in gang zetten voor deze stap - De recursieve functie werkt ongeveer als volgt: def breiduit(kleur, x, y): # argumenten: kleur is de gezochte nieuwe basiskleur, x en y # zijn de coordinaten van het vakje dat we op dit moment # aanspreken # Stap 1: check of je zelf (dus het vakje met coördinaten x en # y) bij het basisgebied hoort # Zo ja: vraag aan al je 4 buren (let op de randen: zie brute- # force stap 4) die geen basisgebied zijn om dit ook te doen. # Dat wil zeggen: voer deze breiduit() functie nu ook # (recursief) uit op de 4 vakjes om je heen (dus met andere x # of y coördinaten) # Stap 2: als je niet bij het basisgebied hoort, check dan of # je zelf het gewenste kleurnummer hebt (dan is je deze vraag # gesteld door een buurman die wel basisgebied was of is # geworden.) # Zo ja: Maak jezelf tot onderdeel van het basisgebied. En # vraag aan al je 4 buren die geen basisgebied zijn om weer # deze functie uit te voeren (geef de vraag door aan je buren # als het ware) Opdracht 5: Boomcentrum (1 pnt) Introductie recursie Voor het oplossen van deze opgave heb je een programmeerprincipe nodig dat recursie heet (bij opgave 4 was het een optie, hier niet..). Recursie is programmeren met een functie (def) die zichzelf aanroept (en daarbij dus zichzelf weer aanroept, die daarbij zichzelf weer aanroept, etc.) Voor een introductie op recursie, kijk eens hier: Een bekend voorbeeld van recursie is het berekenen van de Fibonacci reeks (wat we vorig jaar al zonder recursie hebben gedaan in Wt Python opgave 9). Hier is een recursieve oplossing voor het Fibonacci probleem: def fib(n): if n==1 or n==2: 14

15 return 1 else: return fib(n-1) + fib(n-2) Bekijk (en test) het voorbeeld eens om goed te snappen wat er gebeurt. Vergelijk de recursieve oplossing met de gewone (iteratieve) oplossing die je vorig jaar hebt gemaakt (hier zijn Wt s uitwerkingen overigens), vraag Wt eventueel om extra uitleg om de recursieve versie goed te snappen. De opgave Nu je weet wat recursie is, terug naar opgave A5. Grofweg komt de oplossing van deze opgave op het volgende neer: - We maken een lijst met voor elk punt een sublijst met daarin de afstand tot alle andere punten. (Die afstand is bij de start nog niet bekend, maar die gaan we opbouwen) - De direct verbonden punten (zoals opgegeven bij de inpiut) kunnen we met een afstand 1 in de afstandlijsten opnemen - We gaan nu recursief vanuit elk punt een bericht naar alle buren sturen met de afstand van deze buur tot de originele afzender. Alle buren geven dit bericht weer door aan hun buren (met een afstand +1) en die geven het weeer aan hun buren, etc. - Op deze manier vertelt elk punt zijn afstand aan alle andere punten. - Als alle punten alle afstanden naar andere punten kennen, dan kunnen we op zoek naar het punt of de punten met de kleinste afstand tot alle andere punten. Dit is het antwoord dat we moeten geven. Stap 1: invoer opslaan We moeten weer een slimme (ja alweer een slimme ) manier verzinnen om onze adminstratie bij te houden. Wt doet het als volgt. We moeten van elke punt opslaan met welke andere punten deze verbonden is (in hoeveel stappen). Het handigst is om een connectie matrix te maken. Dat is een sjiek woord voor lijst met daarin een sublijst voor elk punt van de boom. Elke sublijst houdt bij wat de afstand van een punt is (in stappen) tot elk ander. Voor het voorbeeld zou je connectiematrix er na het lezen van de invoer zo uit zien: [-1, 0, 0, 1, 0, 0] [0, -1, 0, 1, 0, 0] [0, 0, -1, 1, 0, 0] [1, 1, 1, -1, 1, 0] [0, 0, 0, 1, -1, 1] [0, 0, 0, 0, 1, -1] - De eerste lijst is het eerste punt, de tweede het tweede punt, etc. 15

16 - Een 0 betekent niet direct verbonden met het punt op die positie (dus die afstand is nu nog onbekend) - Een 1 betekent direct verbonden met het punt op die positie (zoals ingelezen uit de invoer) - Een -1 staat op de plek van het punt zelf ( je kunt niet verbonden zijn met jezelf) Wat betreft het verwerken de input. De eerste regel input geeft aan hoeveel punten er zijn. De regels er na (het aantal punten -1) geven de connecties aan. Maak een loop die precies het juiste aantal regels inleest. Let op dat je voor elke regel input op 2 plekken in de matrix een 1 zet. (Als het ene punt met het andere verbonden is, geldt dat natuurlijk ook andersom!) Tip: gebruik het python split commando: connectie = raw_input().split(" ") Dit leest de input en splitst de string in een lijst (met de spatie als splitspunt) Zo kun je makkelijk de 2 punten van elke connectieregel inlezen: connectie[0] en connectie[1]. Stap 2: Een recursieve functie die de afstand van een punt doorstuurt naar alle andere punten Zoals gezegd is de kern van deze opgave het maken van een recursieve functie die alle punten op de hoogte stelt van hun afstand van een specifiek punt. Je functie ziet er ongeveer als volgt uit: def vertel_afstand(start_punt, huidig_punt, vorig_punt, afstand): # Deze functie heeft 4 argumenten: # start_punt: dit is het punt waarvan we de afstand willen doorgeven # deze blijft constant gedurende de recursie # huidig punt: dit is de plek waar het bericht nu is. Dit punt kan # nu de afstand tot het startpunt opslaan en recursief het bericht # aan zijn buren sturen # vorig_punt: van welk punt kwam dit bericht? Dit moeten we weten om # te voorkomen dat het bericht ook weer terug gaat naar de # afzender # afstand: hoe ver is het start_punt van het huisig_punt verwijderd? # Bij elke recursiestap wordt dit 1 hoger # check of bij huidig_punt al bekend is wat de afstand is tot # start_punt. # zo nee: sla de huidige afstand op in de matrix # # vraag recursief aan al je buren (behalve vorig_punt!) om deze # vertel_afstand functie uit te voeren. Hierbij wordt afstand 1 # hoger gezet dan hij nu is (we gaan immers 1 punt verderop in de # boom en daarmee wordt de afstand tot het bronpunt 1 groter) 16

17 Stap 3: Laat de recursie los op elk punt We gaan nu een voor een een recursieve olievlek starten in elk van de punten, zodat elk punt zijn afstand doorgeeft aan alle endere punten in de boom. Probeer zelf te bedenken wat de startwaarden voor de 4 argumenten van de vertel_afstand() functie moeten zijn. Stap 4: Zoek het boomcentrum We hebben nu onze hele afstandmatrix gevuld, dus kunnen we het boomcentrum bepalen. We moeten dus op zoek naar het/de punt(en) met het laagste afstandmaximum. Dat wil zeggen: we kijken van elk punt wat de grootste afstand tot de andere punten is. De punt(en) die hier de laagste waarde hebben, zijn het boomcentrum. - Doorloop de afstandslijst voor elk punt op zoek naar het maximum - Sla steeds dit maximum op in een lijst - Zoek in deze lijst wat de laagste waarde is. - Zoek op welke punten deze laagste waarde hebben. Dat is je antwoord op deze opgave Succes met C1 t/m C4! 17

PO: Informatica Olympiade

PO: Informatica Olympiade PO: Informatica Olympiade 2018-2019 Handreiking Wt Stedelijk Gymnasum s-hertogenbosch Wat is de Informatica Olympiade? De Nederlandse Informatica Olympiade (NIO) is een programmeerwedstrijd voor de bovenbouw

Nadere informatie

PO: Informatica Olympiade

PO: Informatica Olympiade PO: Informatica Olympiade 2017-2018 Handreiking Wt Stedelijk Gymnasum s-hertogenbosch Wat is de Informatica Olympiade? De Nederlandse Informatica Olympiade (NIO) is een programmeerwedstrijd voor de bovenbouw

Nadere informatie

De eerste ronde Nederlandse Informatica Olympiade 2014-2015

De eerste ronde Nederlandse Informatica Olympiade 2014-2015 De eerste ronde Nederlandse Informatica Olympiade 2014-2015 De informatica olympiade is een wedstrijd voor leerlingen uit het voortgezet onderwijs in Nederland. Het is een wedstrijd die bestaat uit drie

Nadere informatie

PO: Informatica Olympiade 2013-2014

PO: Informatica Olympiade 2013-2014 PO: Informatica Olympiade 2013-2014 Wat is de Informatica Olympiade? De Nederlandse Informatica Olympiade (NIO) is een programmeerwedstrijd voor de bovenbouw van het Voortgezet onderwijs. Het is een onderdeel

Nadere informatie

De eerste ronde Nederlandse Informatica Olympiade

De eerste ronde Nederlandse Informatica Olympiade De eerste ronde Nederlandse Informatica Olympiade 2016-2017 De informatica olympiade is een wedstrijd voor leerlingen uit het voortgezet onderwijs in Nederland. Het is een wedstrijd die bestaat uit drie

Nadere informatie

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

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. 1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat

Nadere informatie

DomJudge-Practicum. Open Dag UU

DomJudge-Practicum. Open Dag UU 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

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Algemeen. Rorschachtest. Algemene info

Algemeen. Rorschachtest. Algemene info Algemeen Als Python de volgende regel moet lezen uit een tekstbestand, dan wordt er gelezen tot en met de eerstvolgende newline ('\n') of tot het einde van het bestand. Het laatste karakter van de regel

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere informatie

De eerste ronde Nederlandse Informatica Olympiade

De eerste ronde Nederlandse Informatica Olympiade De eerste ronde Nederlandse Informatica Olympiade 2017-2018 De informatica olympiade is een wedstrijd voor leerlingen uit het voortgezet onderwijs in Nederland. Het is een wedstrijd die bestaat uit drie

Nadere informatie

Simon de schildpad. 2015 J van Weert 1

Simon de schildpad. 2015 J van Weert 1 Programmeren met Simon Simon de schildpad 2015 J van Weert 1 Inleiding: Wat is programmeren eigenlijk? Een computer doet niets zonder een programma. Die programma s worden geschreven door mensen: programmeurs.

Nadere informatie

Simon de schildpad. 2012 J van Weert 1

Simon de schildpad. 2012 J van Weert 1 Programmeren met Simon Simon de schildpad 2012 J van Weert 1 Inleiding: Wat is programmeren eigenlijk? Een computer doet niets zonder een programma. Die programma s worden geschreven door mensen: programmeurs.

Nadere informatie

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester. In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen

Nadere informatie

Een spoedcursus python

Een spoedcursus python Een spoedcursus python Zoals je in de titel misschien al gezien hebt, geven wij een spoedcursus Python. Door deze cursus leer je alle basics, zoals het rekenen met Python en het gebruik van strings. Het

Nadere informatie

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

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? 1 Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? Voordat je begint met programmeren, moet je Ruby installeren.

Nadere informatie

Stroomschema s maken op papier

Stroomschema s maken op papier 1 Stroomschema s maken op papier Een programma direct maken in Python, gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando

Nadere informatie

Small Basic Programmeren Text Console 2

Small Basic Programmeren Text Console 2 Oefening 1: Hoogste getal Je leest een reeks positieve gehele getallen in totdat je het getal 0 (nul) invoert. Daarna stopt de invoer en druk je een regel af met het hoogste getal uit de reeks. Voorbeeld:

Nadere informatie

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO DE ASTRO PI PROGRAMMEREN DOCENTENHANDLEIDING 1 Deze handleiding is bedoeld om leerlingen te ondersteunen bij de Astro Pi Challenge, waarbij leerlingen een programma voor de Astro Pi-computer in het ISS

Nadere informatie

Stroomschema s maken in Word

Stroomschema s maken in Word 1 Stroomschema s maken in Word Een programma direct maken in Scratch gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando

Nadere informatie

OEFENINGEN PYTHON REEKS 6

OEFENINGEN PYTHON REEKS 6 OEFENINGEN PYTHON REEKS 6 1. A) Schrijf een functie die een getal x en een getal y meekrijgt. De functie geeft de uitkomst van volgende bewerking als returnwaarde terug: x y x als x y x y y als x < y B)

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

BEGINNER JAVA Inhoudsopgave

BEGINNER JAVA Inhoudsopgave Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire

Nadere informatie

Opgave 2. Binaire informatie

Opgave 2. Binaire informatie Opgave 2. Binaire informatie In deze opgave krijgt je programma telkens als invoer een vierkant rooster dat eigenlijk is gevuld met uitsluitend nullen en enen. Van een deel van de cellen is (nog) niet

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Uitwerking tentamen Algoritmiek 10 juni :00 13:00 Uitwerking tentamen Algoritmiek 10 juni 2014 10:00 13:00 1. Dominono s a. Toestanden: n x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal X gelijk aan het aantal O of hooguit één hoger.

Nadere informatie

Kennismaking met programmeren

Kennismaking met programmeren Kennismaking met programmeren werkblad voorwaarden Project van de Pedagogische Academie, Hanzehogeschool Groningen en Groningen Programmeert in samenwerking met: Je gaat straks een kaartspelletje spelen.

Nadere informatie

Meer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2.

Meer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2. Meer Blokken Voorkennis: SuperDojo, Snake Leerdoelen: Meer Blokken Introductie Meer Blokken zijn Scratch s manier van functies. Functies zijn een heel belangrijk concept in alle programmeertalen. Het staat

Nadere informatie

[13] Rondjes draaien (loops)

[13] Rondjes draaien (loops) [13] Rondjes draaien (loops) Met de if else uit de leerfiche [11] hebben we leren werken met één van de belangrijkste programmeerstructuren in Python. Bijna even belangrijk zijn de verschillende mogelijkheden

Nadere informatie

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

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders. Spirograaf in Python Een kunstwerk maken Met programmeren kun je alles maken! Ook een kunstwerk! In deze les maken we zelf een kunstwerk met Python. Hiervoor zal je werken met herhalingen en variabelen.

Nadere informatie

extra oefening algoritmiek - antwoorden

extra oefening algoritmiek - antwoorden extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.

Nadere informatie

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

Inhoudsopgave Voorwoord 5 Voordat je begint 6 Wat heb je nodig? 7 De website bij het boek 7 Voor ouders, verzorgers en leraren Inhoudsopgave Voorwoord... 5 Voordat je begint... 6 Wat heb je nodig?... 7 De website bij het boek... 7 Voor ouders, verzorgers en leraren... 8 Vervolgboeken over programmeren... 8 1. Aan de slag met Python

Nadere informatie

Toetsvoorbereiding Informatica HAVO/VWO 5 (T51) Programmeren met Python II. Duur: 70 minuten Datum: sept 2018

Toetsvoorbereiding Informatica HAVO/VWO 5 (T51) Programmeren met Python II. Duur: 70 minuten Datum: sept 2018 Toetsvoorbereiding Informatica HAVO/VWO 5 (T51) Programmeren met Python II Duur: 70 minuten Datum: sept 2018 Stof: Basiskennis van vorig jaar, (Eigen) Functies & parameters, Loops (for en while), Turtle

Nadere informatie

Programmeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019

Programmeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019 Programmeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019 Inleiding Al meer dan twintig jaar organiseert Karlijn aan het eind van het jaar een toernooi bij de volleybalclub, het zogenaamde oliebollentoernooi.

Nadere informatie

Minder bekende functies in Excel

Minder bekende functies in Excel Minder bekende functies in Excel Handleiding van Auteur: CorVerm Maart 2011 Datum/tijd plaatsen in een cel Om de datum van vandaag in een cel weer te geven gebruik je de functie =VANDAAG(), weergeven van

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder

Nadere informatie

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

P O P Y T H O N P R O G R AMMER EN: G A N Z E N B O R D

P O P Y T H O N P R O G R AMMER EN: G A N Z E N B O R D P O P Y T H O N P R O G R AMMER EN: G A N Z E N B O R D BOUW JE EIGEN BORDSPEL MET PYGAME J. van Weert Wt (at) sgdb.nl Stedelijk Gymnasium s-hertogenbosch 2015 1 INHOUD 1 Inleiding... 3 2 Opzet, beoordeling

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 19, 2018 Overzicht Grafische programma s en tekstgebaseerde programma s Stijladviezen (Jeff Knupp, Writing Idiomatic Python) File Processing (Zelle 5.9.2)

Nadere informatie

PYTHON REEKS 1: BASICS. Mathias Polfliet

PYTHON REEKS 1: BASICS. Mathias Polfliet PYTHON REEKS 1: BASICS Mathias Polfliet [email protected] EENVOUDIGE REKENMACHINE 2 soorten getallen Getallen Z -> integers (gehele getallen) Getallen R -> floating points (reële getallen) Door beperkte

Nadere informatie

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

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 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 dat er zowel typografische als inhoudelijke onvolkomenheden

Nadere informatie

Scratch. Gemaakt door: Déjan van Noordt en Leroy van den Driesche Leerlingen HAVO 5 SG Spieringshoek Als onderdeel voor het vak Informatica

Scratch. Gemaakt door: Déjan van Noordt en Leroy van den Driesche Leerlingen HAVO 5 SG Spieringshoek Als onderdeel voor het vak Informatica Scratch sdas Gemaakt door: Déjan van Noordt en Leroy van den Driesche Leerlingen HAVO 5 SG Spieringshoek Als onderdeel voor het vak Informatica Inhoud Wat is scratch?... 2 Deel 1: Account aanmaken... 2

Nadere informatie

Informatica: C# WPO 10

Informatica: C# WPO 10 Informatica: C# WPO 10 1. Inhoud 2D arrays, lijsten van arrays, NULL-values 2. Oefeningen Demo 1: Fill and print 2D array Demo 2: Fill and print list of array A: Matrix optelling A: Matrix * constante

Nadere informatie

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 Voorkennis 7 Hoe werkt u met dit boek?

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 Voorkennis 7 Hoe werkt u met dit boek? Inhoudsopgave Voorwoord... 5 Nieuwsbrief... 5 Introductie Visual Steps... 6 Wat heeft u nodig?... 6 Voorkennis... 7 Hoe werkt u met dit boek?... 7 De website bij het boek... 8 Toets uw kennis... 8 Voor

Nadere informatie

De eerste ronde Nederlandse Informatica Olympiade

De eerste ronde Nederlandse Informatica Olympiade De eerste ronde Nederlandse Informatica Olympiade 2018-2019 De informatica olympiade is een wedstrijd voor leerlingen uit het voortgezet onderwijs in Nederland. Het is een wedstrijd die bestaat uit drie

Nadere informatie

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 6: Lijsten Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal

Nadere informatie

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search Algoritmiek 2018/Toestand-actie-ruimte Vierde college algoritmiek 2 maart 2018 Toestand-actie-ruimte Exhaustive Search 1 Algoritmiek 2018/Toestand-actie-ruimte Kannen Voorbeeld 4: Kannenprobleem We hebben

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Seven segments of Pi

Seven segments of Pi Seven segments of Pi Seven segments of pi Aan de slag met seven segments of Pi! Seven segments is een klein add-on boardje voor de raspberry pi. Deze add-on bestaat uit een display en een knopje. Meer

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Handleiding bij de Booktest Generator

Handleiding bij de Booktest Generator Handleiding bij de Booktest Generator Het programma voor het maken van toetsen bij boeken. (c) 2005/2009 Visiria Uitgeversmaatschappij Twisk Inleiding Onze dank voor het aanvragen van de Booktest Generator.

Nadere informatie

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek Divide & Conquer: Verdeel en Heers vervolg Algoritmiek Algoritmische technieken Vorige keer: Divide and conquer techniek Aantal toepassingen van de techniek Analyse met Master theorem en substitutie Vandaag:

Nadere informatie

7. Je bericht in Nieuws & acties aanpassen

7. Je bericht in Nieuws & acties aanpassen 7. Je bericht in Nieuws & acties aanpassen Deze instructie is geschreven om een bericht aan te passen in de categorie Nieuws & acties. Het plaatsen en wijzigen van berichten op deze pagina gaat op een

Nadere informatie

GO spelregels. Wim Berkelmans

GO spelregels. Wim Berkelmans GO spelregels www.go.org Wim erkelmans Inhoud Voorwoord Go Voorwoord ord, stenen en zetten Keten en vrijheid 5 Slaan en atari 6 Puzzels 7 Ontsnappen 8 Verbinden en knippen 9 Zelfslag 0 Oog Ko Twee ogen

Nadere informatie

Combinatoriek groep 1 & 2: Recursie

Combinatoriek groep 1 & 2: Recursie Combinatoriek groep 1 & : Recursie Trainingsweek juni 008 Inleiding Bij een recursieve definitie van een rij wordt elke volgende term berekend uit de vorige. Een voorbeeld van zo n recursieve definitie

Nadere informatie

5e inlever opdracht Excel: ICT cijferlijst. Stap 1: De eerste inhoud. Stap 2: Een beetje opmaak

5e inlever opdracht Excel: ICT cijferlijst. Stap 1: De eerste inhoud. Stap 2: Een beetje opmaak 5e inlever opdracht Excel: ICT cijferlijst Het leven van een ICT leraar is zwaar. Hij moet niet alleen hard werken om leuke en nuttige Excelopdrachten te verzinnen voor zijn leerlingen. Hij moet ook nog

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Klonen. Het doel is om de appel op te eten. Iedere keer dat de slang de appel eet, groeit hij één vakje langer.

Klonen. Het doel is om de appel op te eten. Iedere keer dat de slang de appel eet, groeit hij één vakje langer. Snake [v2] Voorkennis: Zend Signaal, Variabelen Leerdoelen: Klonen Introductie Snake is een spel waarbij een slang kronkelt. Hij is bestuurbaar met de pijltoetsen en kan alleen op een grid bewegen. Oftewel

Nadere informatie

Programmeermethoden NA. Week 3: Controlestructuren

Programmeermethoden NA. Week 3: Controlestructuren Programmeermethoden NA Week 3: Controlestructuren Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Inleveren opdracht 1 Lever digitaal sxxxxxxx-syyyyyyy-opdr1.py

Nadere informatie

Dit instructieboek is een kopie van het echte NK. Alleen de puzzels zijn verwijderd.

Dit instructieboek is een kopie van het echte NK. Alleen de puzzels zijn verwijderd. WCPN Nederlands Kampioenschap 04 World Class Puzzles from The Netherlands Dinsdag 7 juni 0.00-.00 uur Instructies Je hebt twee uur de tijd om zo veel mogelijk punten te halen. Dit kampioenschap bestaat

Nadere informatie

De jury beslist of een inzending geldig is. Over de uitslag kan niet worden gecorrespondeerd. WCPN Nederlands Kampioenschap 2014

De jury beslist of een inzending geldig is. Over de uitslag kan niet worden gecorrespondeerd. WCPN Nederlands Kampioenschap 2014 WCPN Nederlands Kampioenschap 0 Dinsdag 7 juni 0.00-.00 uur World Class Puzzles from The Netherlands Je hebt twee uur de tijd om zo veel mogelijk punten te halen. Dit kampioenschap bestaat uit zestien

Nadere informatie

Je kent natuurlijk Mondriaan wel. Teken eerst eens een mooie Mondriaan.

Je kent natuurlijk Mondriaan wel. Teken eerst eens een mooie Mondriaan. Met programmeren kun je alles maken, ook. een schilderij! Je kent natuurlijk Mondriaan wel. Teken eerst eens een mooie Mondriaan. Als je klaar bent, vergelijk de tekening dan maar eens met die van je buurman

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

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

Programmeren in C++ Efficiënte zoekfunctie in een boek Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!

Nadere informatie

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste

Nadere informatie

Wooncomplexinformatie op woonzorg.nl

Wooncomplexinformatie op woonzorg.nl Datum: 15-12-2015 Van: John Winckel Wooncomplexinformatie op woonzorg.nl Voor het bijhouden van wooncomplexgegevens waaronder direct beschikbare huurwoningen. LET OP: wanneer je contactgegevens van toeleveranciers

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 1 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

Labo 2 Programmeren II

Labo 2 Programmeren II Labo 2 Programmeren II L. Schoofs K. van Assche Gebruik Visual Studio 2005 om een programma te ontwikkelen dat eenvoudige grafieken tekent. Deze opgave heb je vorig academiejaar reeds in Java geïmplementeerd.

Nadere informatie

Excel opdracht: ICT cijferlijst. Stap 1: De eerste inhoud. Stap 2: Een beetje opmaak

Excel opdracht: ICT cijferlijst. Stap 1: De eerste inhoud. Stap 2: Een beetje opmaak Excel opdracht: ICT cijferlijst Het leven van een ICT leraar is zwaar. Hij moet niet alleen hard werken om leuke en nuttige Excelopdrachten te verzinnen voor zijn leerlingen. Hij moet ook nog een cijferadministratie

Nadere informatie

Scratch Rekenen & programmeren

Scratch Rekenen & programmeren Scratch Rekenen & programmeren Welkom bij deze Scratch workshop! Vandaag ga jij kennismaken met Scratch. Scratch is een online programmeertaal speciaal gemaakt voor kinderen vanaf 8 jaar. Ben je er klaar

Nadere informatie

De Sense HAT programmeren Je eerste computerprogramma

De Sense HAT programmeren Je eerste computerprogramma De Sense HAT programmeren Je eerste computerprogramma De Sense HAT is een uitbreiding voor de Raspberry Pi die speciaal voor de Astro Pi-wedstrijd is gemaakt. Met dit bord is het mogelijk om allerlei informatie

Nadere informatie

Gebruikersinstructie Spam- & Virusfilter QNS Quality Network Services

Gebruikersinstructie Spam- & Virusfilter QNS Quality Network Services Gebruikersinstructie Spam- & Virusfilter QNS Quality Network Services Door : QNS - Quality Network Services Datum: Donderdag 01 november 2018 Plaats: Breda Versie: 1.2 Inhoudsopgave Spamfilter Algemene

Nadere informatie

Programmeerstructuren met App Inventor

Programmeerstructuren met App Inventor Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement

Nadere informatie

Functioneel programmeren

Functioneel programmeren Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein

Nadere informatie

Rekentijger - Groep 7 Tips bij werkboekje A

Rekentijger - Groep 7 Tips bij werkboekje A Rekentijger - Groep 7 Tips bij werkboekje A Omtrek en oppervlakte (1) Werkblad 1 Van een rechthoek die mooi in het rooster past zijn lengte en breedte hele getallen. Lengte en breedte zijn samen gelijk

Nadere informatie

Stroomschema s maken op papier

Stroomschema s maken op papier 1 Stroomschema s maken op papier Een programma direct maken in Scratch, gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk

Nadere informatie

[15] Variabelen in functies (of: een woordje over scope)

[15] Variabelen in functies (of: een woordje over scope) [15] Variabelen in functies (of: een woordje over scope) In de vorige leerfiche hebben we geleerd over functies. We leerden dat functies parameters hebben en dat ze return-waarden kunnen teruggeven aan

Nadere informatie

5. Geavanceerde formules

5. Geavanceerde formules 151 5. Geavanceerde formules Excel is in eerste instantie een programma om berekeningen in te maken. Het doet dat uiterst efficiënt met, afhankelijk van de geheugencapaciteit van de computer, een enorm

Nadere informatie

leerlingbrochure nld Door: Jolanthe Jansen

leerlingbrochure nld Door: Jolanthe Jansen leerlingbrochure nld Door: Jolanthe Jansen Dit is een brochure, gemaakt voor leerlingen met NLD. Naast deze brochure is er ook: - een brochure met informatie voor ouders van kinderen met NLD en - een brochure

Nadere informatie

http://www.kidzlab.nl/index2.php?option=com_content&task=vi...

http://www.kidzlab.nl/index2.php?option=com_content&task=vi... Veelvlakken De perfecte vorm Plato was een grote denker in de tijd van de Oude Grieken. Hij was een van de eerste die de regelmatige veelvlakken heel bijzonder vond. Hij hield ervan omdat ze zulke mooie,

Nadere informatie

Scratch les 1 Rekenen

Scratch les 1 Rekenen Scratch les 1 Rekenen Welkom bij deze Scratch workshop! Vandaag ga jij kennismaken met Scratch. Scratch is een programmeertaal speciaal gemaakt voor kinderen vanaf 8 jaar, dus dat moet ons als leerkrachten

Nadere informatie

Grafieken. 10-13 jaar. Rekenles over het maken van grafieken. Rekenen. 60 minuten. Weerstation, data, grafieken

Grafieken. 10-13 jaar. Rekenles over het maken van grafieken. Rekenen. 60 minuten. Weerstation, data, grafieken Grafieken Rekenles over het maken van grafieken 10-13 jaar Rekenen Weerstation, data, grafieken 60 minuten Op het digitale schoolbord bekijkt de leerkracht met de klas verschillende grafieken over het

Nadere informatie

Dinsdag 10 juni uur

Dinsdag 10 juni uur WCPN Nederlands Kampioenschap Sudoku 201 Dinsdag juni 20.00-22.00 uur World Class Puzzles from The Netherlands Je hebt twee uur de tijd om zo veel mogelijk punten te halen. Dit kampioenschap bestaat uit

Nadere informatie

Wat is itslearning..?

Wat is itslearning..? Wat is itslearning..? Met itslearning heb je via internet altijd toegang tot bijvoorbeeld je huiswerk, interessante informatie en studiewijzers. Ook kun je via itslearning communiceren, samenwerken met

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Scratch in drie uur. Hallo, mijn naam is Minti Mint! Ik ga je uitleggen hoe je je eigen computerspel kunt maken. We gaan een racespel maken!

Scratch in drie uur. Hallo, mijn naam is Minti Mint! Ik ga je uitleggen hoe je je eigen computerspel kunt maken. We gaan een racespel maken! Scratch in drie uur Hallo, mijn naam is Minti Mint! Ik ga je uitleggen hoe je je eigen computerspel kunt maken. We gaan een racespel maken! Bernd Gärtner Nederlandse vertaling en bewerking: Martine Segers

Nadere informatie

Hoofdstuk 20: Wiskundige functies

Hoofdstuk 20: Wiskundige functies Hoofdstuk 20: Wiskundige functies 20.0 Introductie Er is een uitgebreid aanbod aan wiskundige functies in Excel, variërend van het simpele + teken tot de esoterische statistiek functies voor een correlatie

Nadere informatie

Informatica: C# WPO 11

Informatica: C# WPO 11 Informatica: C# WPO 11 1. Inhoud Pass by reference (ref, out), recursie, code opdelen in verschillende codebestanden 2. Oefeningen Demo 1: Swapfunctie Demo 2: TryParse(int) Demo 3: Recursion Tree Demo

Nadere informatie

Zevende college algoritmiek. 24 maart Verdeel en Heers

Zevende college algoritmiek. 24 maart Verdeel en Heers Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

Excel reader. Beginner Gemiddeld. [email protected]

Excel reader. Beginner Gemiddeld. bas@excel-programmeur.nl Excel reader Beginner Gemiddeld Auteur Bas Meijerink E-mail [email protected] Versie 01D00 Datum 01-03-2014 Inhoudsopgave Introductie... - 3 - Hoofdstuk 1 - Databewerking - 4-1. Inleiding... - 5-2.

Nadere informatie