1998-1999

Voorwaarden en aanwijzingen

De Nederlandse Informatica Olympiade is een wedstrijd voor leerlingen uit het voortgezet onderwijs. Aan de eerste en tweede ronde mag iedereen meedoen die dit schooljaar op een vbo, mavo, havo of vwo zit. Aan de extra scholing en de derde ronde kunnen leerlingen meedoen die op 1 juli 1999 niet ouder zijn dan 20 jaar.

Het inzenden van je oplossingen

Als extra stimulans is er een prijs ter waarde van 1000 gulden voor een van de inzenders van een correcte oplossing van opgave 1. De oplossing van opgave 1 moet uiterlijk op 1 december 1998 binnen zijn (datum poststempel). De uitslag volgt uiterlijk 10 januari 1999. De oplossingen van alle opgaven moeten op 10 januari 1999 binnen zijn (datum poststempel). De uitslag volgt ongeveer een maand later. Deelnemers met een werkende inzending voor opgave 4 dingen mee naar de CvO-Windesheimprijs: Een bedrag van 500 gulden, beschikbaar gesteld voor de student of docent die het toernooi bij deze opgave weet te winnen. Zend je oplossing in op een tweetal identieke diskettes. Daarop moeten de gemaakte programma's staan en de persoonlijke gegevens van de deelnemers. Over beide volgt hieronder nog meer. Op de diskettes moet de namen van alle deelnemers die er aan hebben meegewerkt staan vermeld. Op de envelop vermeld je eveneens namen, adressen en telefoonnummers van de deelnemers en de gebruikte programmeertaal of -talen. Ook inzenden via E-mail is mogelijk; zend alle gevraagde bestanden in een archieffile, bij voorkeur een self-extractor. Neem wanneer je niet binnen een week een ontvangstbevestiging hebt ontvangen altijd even contact op!

De programma's:

Waardering en vervolg

Voor iedere opgave kun je maximaal 100 punten verdienen. Na de opgaven staat een puntenverdeling aangegeven. Heb je minstens 200 van de 400 mogelijke punten gehaald, dan krijg je het Certificaat Nederlandse Informatica Olympiade uitgereikt en word je toegelaten tot de tweede ronde. De jury kan deze grens van 200 punten naar beneden bij stellen; daarom is het verstandig om, ook als je denkt niet aan de 200 punten te komen, toch in te zenden.

Tijdens de tweede ronde zijn alleen de volgende programmeertalen toegestaan: Turbo C++ versie 3.0, Turbo Pascal 7.0 en Quick BASIC 4.5.

Persoonlijke gegevens

Zet op de schijf een ASCII-file met de naam PERSGEG.1 (eventueel tot en met PERSGEG.999) met daarin de persoonlijke gegevens van de deelnemers. Houd je daarbij strikt aan de volgende beschrijving.

Voor elk groepslid dient in een aparte file oplopend vanaf PERSGEG.1, PERSGEG.2 enz. te worden vastgelegd:

Op regelkomt te staanvoorbeeld
1 je achternaamWaal
2 je voornaamAnne
3 de eventuele voorvoegsels bij je naamvan de
4 je adresLaan 2
5 je postcode1074 HD
6 je woonplaatsAmsterdam
7 je (eventuele) telefoonnummer020 6123457
8 je geboortedatum790321 (voor 21 maart 1979)
9 meisje of jongenmeisje
10 de naam van je schoolThorbecke Lyceum
11 de naam van je docent informatica of contactpersoon op je schoolWiel, drs. Henny van der
12 het adres van je schoolKerkstraat 15
13 de postcode van je school1007 AD
14 de woonplaats van je schoolAmsterdam
15 het telefoonnummer van je school020 4367842

Vragen en inlichtingen

Op het World Wide Web is een site met allerlei informatie over de Nederlandse Informatica Olympiade. Het adres daarvan is: http://olympiads.win.tue.nl/nio/
Hier staat ook een programma PAS.EXE; daarmee kun je het spel van opgave 4 spelen.

Je stuurt je oplossingen naar:

Opgave 1. Stenen leggen in een trapezium.

Op hoeveel manieren kun je een stapel stenen leggen in de vorm van een trapezium? Een trapezium is een manier van neerleggen waarbij je met een rij stenen begint; iedere volgende rij is een vast aantal stenen langer. In totaal moet je alle stenen hebben gebruikt. Met een totaal van 15 stenen, waarbij elke volgende rij 1 langer wordt, kan dat op vier manieren; zie figuur 1.

Figuur 1. Vier trapezia met vijftien stenen; elke volgende rij wordt 1 langer

Schrijf een programma dat vraagt om een aantal stenen (maximaal 1000000000) en om het verschil in lengte tussen opvolgende rijen (maximaal 1000). Het programma geeft als uitvoer eerst een regel met daarop het aantal manieren waarop zo'n trapezium kan worden gemaakt; vervolgens de aantallen stenen van de eerste rij van elk van die trapezia, in oplopende grootte.

Voorbeeld:

Invoer:

Aantal stenen: 15
Verschil per rij: 1

Uitvoer:

4
1
4
7
15

Opgave 2. Klopt dat woord?

Als wekelijkse puzzel van de schoolkrant krijgen leerlingen een woord op waarbij ze van de letters van dat woord zo veel mogelijk bestaande woorden moeten maken. Ze leveren hun oplossing in op diskette. Eerst wordt de woordencontroleploeg van de schoolkrant er op losgelaten; daarna moet er nog worden gecontroleerd of alle woorden werkelijk uit de letters van het oorspronkelijke woord te maken zijn.

Schrijf een programma dat een bestand inleest en een juryrapport maakt. Het (al op spelling en bestaande woorden gecontroleerde) bestand is een ASCII-tekstbestand met op de eerste regel het oorspronkelijke woord; vervolgens zijn er de regels met op iedere regel een woord; de laatste regel bevat het woord STOP in hoofdletters. Alle andere woorden in het bestand bestaan uitsluitend uit kleine letters; spaties en leestekens zijn niet toegestaan. Ieder woord bestaat uit maximaal 20 tekens; het bestand bevat maximaal 2500 regels. In het juryrapport geeft het gevraagde programma de volgende informatie:

Voorbeeld:

Invoer:

APPEL.INCommentaar
appelboom
appel
boom
pel
bom
mop
pels
mop
moppen
bel
oom
oma
opa
opoe
tante
pep
pap
mop
opoe
pop
STOP
het puzzelwoord
woord 1
woord 2
woord 3
woord 4
woord 5
niet te maken 1
niet uniek 1
niet te maken 2
woord 6
woord 7
woord 8
woord 9
woord 10
niet te maken 3
woord 11
woord 12
niet uniek 2
niet uniek 3
woord 13
einde bestand

Uitvoer op het scherm:

19
13
3
3

Opgave 3. Regio's indelen.

Voor een experiment met het nieuwe referendum wil de overheid groepen gemeenten indelen in regio's. Een regio bestaat uit 1 of meer gemeenten, die zo verbonden zijn dat het mogelijk is om uit elk van de gemeenten uit de regio elk van de andere gemeenten te bereiken zonder dat je de regio hoeft te verlaten. Een regio heeft minstens 100000 inwoners. Alle gemeenten worden in precies 1 regio ingedeeld. Men streeft verder naar het vormen van zo veel mogelijk regio's. Daartoe zoekt men een geschikt computerprogramma.

Schrijf een programma dat een ASCII-tekstbestand GEBIED.IN inleest. Dat bestand heeft de volgende structuur:

De invoer is zodanig dat het altijd mogelijk is om 1 regio te maken van alle gemeenten in het bestand.

Het programma geeft als uitvoer een bestand REGIO.UIT. Dat bestand heeft de volgende structuur:

Voorbeeld

Invoer

GEBIED.INCommentaar
6
126670
33443
80897
51758
25188
25272
8
1 3
1 6
2 3
2 4
2 6
3 4
3 6
4 5
er zijn 6 gemeenten in het bestand
aantal inwoners van gemeente 1
aantal inwoners van gemeente 2
aantal inwoners van gemeente 3
aantal inwoners van gemeente 4
aantal inwoners van gemeente 5
aantal inwoners van gemeente 6
er zijn 8 onderlinge gemeentegrenzen
gemeenten 1 en 3 grenzen aan elkaar
gemeenten 1 en 6 grenzen aan elkaar
gemeenten 2 en 3 grenzen aan elkaar
gemeenten 2 en 4 grenzen aan elkaar
gemeenten 2 en 6 grenzen aan elkaar
gemeenten 3 en 4 grenzen aan elkaar
gemeenten 3 en 6 grenzen aan elkaar
gemeenten 4 en 5 grenzen aan elkaar

Uitvoer

REGIO.UITcommentaar
3
1
2
3
2
2
3
er zijn maximaal 3 regio's te vormen
gemeente 1 ligt in de regio met gemeente 1
gemeente 2 ligt in de regio met gemeente 2
gemeente 3 ligt in de regio met gemeente 3
gemeente 4 ligt in de regio met gemeente 2
gemeente 5 ligt in de regio met gemeente 2
gemeente 6 ligt in de regio met gemeente 3

Figuur 2. Schets van het voorbeeldgebied

Opgave 4. PAS.

Inleiding.

Het spel PAS wordt gespeeld door twee spelers, BRUIN en WIT, op een rechthoekig speelveld van 6 bij 5 vakjes (zie figuur 3). Beide spelers hebben 15 verschillende vierkante stenen; de hoeken van die stenen zijn rood, groen of blauw (zie tabel 1).

De spelers leggen, zolang ze nog niet gepast hebben, om beurten een steen op het bord; BRUIN begint. De kleuren van de hoeken van de gespeelde steen moeten overeenkomen met die op de hoeken van stenen op aangrenzende vakjes. Hoe beter een steen past, hoe meer paspunten je krijgt (zie figuur 4). Als je niet kunt zetten moet je passen; daarna mag je niet ook meer zetten. Als beide spelers hebben gepast is het spel afgelopen. De aantallen geplaatste stenen en de behaalde paspunten worden omgezet in wedstrijdpunten (zie tabel 2). Alle deelnemende programma's spelen twee onderlinge wedstrijden; de winnaar(s) van de hele competitie ontvangen de CvO-Windesheimprijs 1999.

Figuur 3. Het speelveld van PAS

De stenen.

Iedere steen heeft gekleurde hoekpunten; alle combinaties van rood, groen en blauw op de hoekpunten komt voor, maar met de klok mee gerekend heeft BRUIN alleen de volgorde rood-groen-blauw en WIT alleen de volgorde rood-blauw-groen. De vijftien stenen van een speler worden aangeduid met de letters A tot en met O. Een steen kan worden gedraaid en afhankelijk van de eventuele symmetrie op 1 of 4 manieren op het speelveld worden gelegd; deze draaiingen worden aangeduid met een cijfer 0, 1, 2 of 3 na de letter. In tabel 1 staan alle mogelijkheden genoemd; de kleuren worden aangeduid met R, G en B voor rood, groen en blauw.

Paspunten.

Iedere gespeelde steen grenst aan maximaal 12 hoekpunten van andere stenen (zie figuur 4). Voor ieder van die hoekpunten waar al een steen ligt krijg je een paspunt; en omdat BRUIN telkens moet zetten in een situatie dat er nog minder stenen op het bord liggen, krijgt BRUIN aan het begin van het spel 10 extra paspunten.

Figuur 4. Mogelijke paspunten

Uitslag.

De uitslag van een spel wordt omgezet in wedstrijdpunten; in totaal worden er 20 wedstrijdpunten verdeeld over beide spelers. Acht ervan worden bepaald door het aantal stenen dat je hebt kunnen plaatsen voor je moest passen in vergelijking met dat aantal van je tegenstander, volgens tabel 2. De andere twee gaan naar de speler met de meeste paspunten; bij gelijk eindigen worden die punten gedeeld.

Een ongeldige zet wordt door het wedstrijdprogramma beschouwd als een PAS; alleen de andere speler kan nu nog stenen plaatsen!

Tabel 1. Alle stenen in PAS

Tabel 2. Wedstrijdpunten

Schrijf een programma dat een spelverloop van een spelletje PAS inleest en vervolgens binnen 15 seconden een geldige zet doet; als je nog een zet kunt doen, mag je niet passen! Voor de Olympiade kun je 80 punten krijgen voor een werkend programma; de laatste 20 punten kunnen worden verdiend in het toernooi om de CvO-Windesheimprijs.

Een zet wordt weergegeven met behulp van vier tekens:

B3C1 betekent dat steen B, positie 3, wordt geplaatst op vakje C1.

Invoer:

Je programma krijgt als invoer een ASCII-tekstbestand SPEL.IN met de volgende structuur:

Voorbeeld van een invoerbestand:

SPEL.INCommentaar
3
A0D3
A0D2
F1D4
drie zetten gedaan
BRUIN zet steen A, positie 0, op vakje D3
WIT zet steen A, positie 0, op vakje D2
BRUIN zet steen F, positie 1, op vakje D4

Uitvoer:

Je programma geeft als uitvoer een ASCII-tekstbestand ZET.UIT van 1 regel; deze regel bevat een geldige zet, of het woord 'PAS'.

Voorbeeld van uitvoer:

ZET.UITCommentaar
C2C2 WIT zet steen C, positie 2, op vakje C2

Punten per opgave:

Opgave 1.

Goede dialoog10 punten
Goede oplossing kleine gevallen60 punten
Snelle oplossing grote gevallen30 punten

Opgave 2.

Goede dialoog10 punten
Woorden in het bestand10 punten
Goedgekeurde woorden40 punten
Vaker voorkomen20 punten
Verkeerde woorden20 punten

Opgave 3.

Goede dialoog10 punten
Aantal regio's30 punten
Goede indeling50 punten
Bestand wegschrijven10 punten

Opgave 4.

Goede bestanden10 punten
Geldige zet50 punten
Passen als het niet anders kan20 punten
Plaats CvO-Windesheimtoernooi20 punten

Totaal 400 punten

Sponsors Informatica Olympiade

Ministerie van Onderwijs, Cultuur en Wetenschappen

Ministerie van Economische Zaken

KPN Telecom

Philips Electronics

Academic Service BV

Technische Universiteit Delft

Technische Universiteit Eindhoven

Rijks Universiteit Groningen

Universiteit Twente

Erasmus Universiteit Rotterdam

CITO, Arnhem

Instituut voor Leerplanontwikkeling (SLO)

CvO Christelijke Hogeschool Windesheim Zwolle