Juryrapport tweede ronde

Nederlandse Informatica Olympiade 2000.

Op 25 maart 2000 is op de universiteiten van Delft en Twente de tweede ronde van de Nederlandse Informatica Olympiade gehouden. In totaal 41 leerlingen hebben zich gebogen over twee opgaven, waarbij in totaal één tekstbestand en 12 programma’s geschreven dienden te worden. Deze 41 leerlingen bestonden uit 2 leerlingen die zich in vorige jaren al geplaatst hadden voor de derde ronde, 3 meisjes en 36 jongens voor de tweede ronde. In dit juryrapport wordt een verslag gegeven van de prestaties van al deze 41 deelnemers; bij de uitslag worden alleen de tweede ronde deelnemers genoemd, omdat de eerste tien daarvan zich plaatsen voor de scholing ter voorbereiding op de derde ronde.

Ten opzichte van de versie die je thuis hebt ontvangen zijn de scores van Roland Veen en Jelmer Vernooij aangepast; deze veranderingen zijn niet in de grafieken en gemiddeldes verwerkt.

 

Compensatie.

Na afloop van de wedstrijd bleken twee verschillende draaiboeken te zijn gebruikt, met als gevolg dat leerlingen in Delft vier uur de tijd hebben gehad en leerlingen in Twente vijf uur. De jury heeft besloten aan leerlingen uit Delft 20 % van hun score extra toe te kennen om dit verschil te compenseren. Deze compensatiepunten zijn verrekend in de einduitslag, niet in de score per onderdeel.

 

Minpunten.

Leerlingen die verkeerde bestandsnamen hebben gebruikt of hun programma’s niet of verkeerd hadden gecompileerd hebben per onderdeel waarbij de jury moest ingrijpen één punt in mindering gekregen; ook deze minpunten zijn niet in de score per onderdeel verrekend.

 

Uitslag tweede ronde.

Plaats

Naam

Punten

1

Bram Kuyvenhoven

136

2

Johan de Ruiter

125

3

Jaap Taal

121

4

Lourens Veen

115

5

Berteun Damman

113

6

Tijmen Tieleman

106

7

Wilmer van der Gaast

102

8

Maarten Löffler

101

9

Roland Veen

100

10

Nick Matthijssen

95

11

Jelmer Vernooij

85

12

Jappie Hoekstra

79

13

Bob Eldering

75

14

Joost Verhoog

72

15

Gerard Hoeberigs

71

16

Robert van Harten

68

17

Sander Agricola

67

18

René Mulder

64

19

Jan van der Vegt

63

20

Joan ter Weele

62

Gemiddelde score van alle deelnemers: 64,28 punten (maximaal 200)

Beste meisje uit de tweede ronde is Danny Oude Bos met 48 punten.

Enkele algemene opmerkingen.

Het ging om twee omvangrijke opgaven, met veel onderdelen. Het is nooit de bedoeling geweest dat iemand alle onderdelen binnen de tijd af zou kunnen hebben; het inschatten van je eigen mogelijkheden binnen de wedstrijdtijd is nadrukkelijk onderdeel van die wedstrijd.

 

Opgave 1. Eenendertigen.

Bij deze opgave werden een aantal uiteenlopende zaken gevraagd bij een invoerbestand met kaarten voor een spelletje eenendertigen. De eerste twee onderdelen gingen over het lezen van de invoer, de volgende twee over het gebruik van de puntentelling en de laatste twee over het werkelijk spelen van het spel. Dat laatste bleek erg lastig.

Onderdeel 1A.

Uit de invoer moest het aantal deelnemers worden bepaald. Dat kon je doen door het aantal kaarten te delen door drie, en dat resultaat één te verkleinen (de pot kreeg ook drie kaarten). Ook kon je het aantal symbolen uit de invoer delen door zes en dat resultaat één verkleinen.

Gemiddelde score: 8,83 punten (maximaal 10)

Aantal punten

Aantal deelnemers

Cumulatief

10

35

35

8

1

36

4

1

37

0

4

41

Onderdeel 1B.

Om te bepalen welke kaarten niet meedoen tijdens een spelletje heb je een lijstje met alle kaarten nodig, waarin je de kaarten uit de invoer wegstreept.

Gemiddelde score: 7,71 punten (maximaal 10)

Aantal punten

Aantal deelnemers

Cumulatief

10

29

29

8

3

32

2

1

33

0

8

41

 

Onderdeel 1C.

Hier moesten de punten van alle deelnemers worden geteld. Niet die van de pot geven dus! Een speler met drie kaarten van verschillende soorten krijgt toch al punten, bijvoorbeeld met schoppen 9, harten 8 en ruiten 7 kom je op 9 punten. Ook het geval van drie kaarten van gelijke hoogte (30.5) moest apart worden onderzocht!

Gemiddelde score: 9,96 punten (maximaal 15)

Aantal punten

Aantal deelnemers

Cumulatief

15

21

21

12

4

25

9

4

29

6

1

30

3

1

31

0

10

41

 

Onderdeel 1D.

Ook bij het zoeken naar een combinatie van drie kaarten die de hoogst mogelijke score opleveren moest je er aan denken de mogelijkheid van 30.5 apart te onderzoeken.

Gemiddelde score: 10,93 punten (maximaal 20)

Deelnemers met 20 punten voor deze opgave:

Maks Verver (derde ronde), Johan de Ruiter, Joost Verhoog, Jappie Hoekstra, Bob Eldering, Jaap Taal, René Mulder, Berteun Damman, Maarten Löffler, Roland Veen, Jelmer Vernooij en Sander Agricola.

Aantal punten

Aantal deelnemers

Cumulatief

20

12

12

16

8

20

12

5

25

8

3

28

4

1

29

0

12

41

 

 

Onderdeel 1E.

De reconstructie van een spel volgens de gegeven "gretige" speelwijze bleek zeer lastig. Vooral de voorwaarde dat het spel is afgelopen zodra één of meer spelers 31 punten hebben bleek vaak niet te zijn ingebouwd. Ook de deelnemers die alle spelers lieten passen konden bij deze opgave niet op punten rekenen.

Gemiddelde score: 0,15 punten (maximaal 24)

Alleen Jaap Taal behaalde 6 punten voor deze opgave.

 

Onderdeel 1F.

Er zijn voor dit onderdeel geen punten gehaald. Voor de hand ligt een "breedte-eerst" zoekalgoritme, waarbij je alle mogelijke zetten bekijkt, totdat de ideale score behaald is. Dat kan echter nogal lang gaan duren, omdat je per keer 10 mogelijke zetten moet onderzoeken (drie kaarten die je elk voor drie andere kaarten kunt omruilen of passen). Een alternatief is het zoeken van de kaarten die samen die ideale score opleveren; voor elk van de mogelijke verdelingen is het gemakkelijk een scenario te bedenken dat tot de snelste oplossing leidt. Als speler A, speler B en de pot elk een kaart van de ideale combinatie hebben is de snelste route naar de beste score dat A een andere kaart met de goede kaart uit de pot ruilt, vervolgens B zijn goede kaart met een andere uit de pot omruilt, alle eventuele anderen passen en tenslotte A de laatste goede kaart uit de pot haalt. Het meest ongunstige geval is dat de drie kaarten in de pot juist tot de hoogste score leiden; in dat geval zal speler A in het derde rondje de laatste goede kaart pakken, waarbij je er op moet letten dat niet alle andere spelers in de eerste ronde al passen. Omdat er vaak meer combinaties tot de hoogste score leiden kun je voor elk van die combinaties uitrekenen hoe lang het spel duurt voordat de kaarten bij één speler kunnen zijn, en zo de snelste manier uitzoeken.

Totaalscores opgave 1.

Beste scores opgave 1.

Jaap Taal 61

Maks Verver (derde ronde),

Maarten Löffler,

Berteun Damman,

Johan de Ruiter,

Jelmer Vernooij,

Bob Eldering 55

Roland Veen en

Jappie Hoekstra 52

Gerard Hoeberigs,

Wilmer van der Gaast,

Lourens Veen,

Bram Kuyvenhoven,

Sander Agricola 51

Gemiddelde score opgave 1: 37,58 punten (maximaal 100)

 

Opgave 2. Tekst voorspellen door letters tellen.

Gegeven was een tekst, opgebouwd uit maximaal 28 symbolen (letters, spaties en punten). Het tellen van letters in zo’n gegevens tekst bleek nog wel goed te doen. Het genereren van teksten op basis van het aangegeven voorschrift was heel lastig. Ook zorgden de grote invoerbestanden soms voor tijd- en geheugenproblemen. Het opdelen van de invoer in 3-grammen bracht ook veel problemen met zich mee, zeker ook omdat je de lijst met mogelijke 3-grammen netjes moet bijhouden.

Onderdeel 2A.

De bedoeling van dit onderdeel was het tellen van de symbolen in de tekst; regelovergangen e.d. en het getal dat aangaf hoeveel regels er zouden volgen tellen daarbij niet mee.

Gemiddelde score: 5,17 punten (maximaal 8)

Aantal punten

Aantal deelnemers

Cumulatief

8

25

25

4

3

28

0

13

41

 

Onderdeel 2B.

Dit onderdeel had een vergelijkbare moeilijkheidsgraad; ditmaal moesten de 28 symbolen worden geturfd en op volgorde dienden de frequenties te worden uitgevoerd.

Gemiddelde score: 7,68 punten (maximaal 12)

Aantal punten

Aantal deelnemers

Cumulatief

12

24

24

9

1

25

6

3

28

0

13

41

 

 

Onderdeel 2C.

Veel deelnemers vonden de tekst van de opgave en de tabel van het voorbeeld erg lastig te lezen. Ook dat je bij gelijke frequentie moest kiezen voor het eerst mogelijke symbool kwam er niet altijd uit.

Gemiddelde score: 3,54 punten (maximaal 20 punten)

Tijmen Tieleman,

Lourens Veen,

Jaap Taal,

Maarten Löffler en

Bram Kuyvenhoven 20

Wilmer van der Gaast,

Johan de Ruiter,

Berteun Damman en

Maks Verver (derde ronde) 10

Sander Agricola 5

 

Onderdeel 2D.

Allereerst was het een probleem alle 3-grammen in een tabel onder te brengen en te turven. Vervolgens moest voor ieder symbool worden bekeken in welk driegram dat symbool het vaakst voorkwam. Aan het voorbeeld was al te zien dat als een symbool niet voorkwam zoals de "y", dat je dan "aay 0" moest uitvoeren. Het kiezen van het eerste 3-gram uit de alfabetische ordening bleek nog een probleem op zich.

Gemiddelde score: 1,95 punten (maximaal 16 punten)

Wilmer van der Gaast,

Roland Veen,

Berteun Damman en

Lourens Veen 16

Bram Kuyvenhoven 12

Johan de Ruiter en

Maks Verver (derde ronde) 8

Vincent Groenhuis (derde ronde) 4

Onderdeel 2E

Eigenlijk had je dit onderdeel al nodig om 2D goed te kunnen doen. Van belang was het om goed te beginnen. Het woord "lef" als eerste woord van de tekst leidt tot de 3-grammen ". l", "le" en "lef".

Gemiddelde score: 2,78 punten (maximaal 12 punten)

Wilmer van der Gaast,

Roland Veen,

Lourens Veen,

Berteun Damman,

Nick Matthijssen en

Jappie Hoekstra 12

Bram Kuyvenhoven 9

Vincent Groenhuis (derde ronde),

Maks Verver (derde ronde),

Johan de Ruiter en

Maarten Löffler 6

Danny Oude Bos,

Robert van Harten en

Bouke van Meeteren 3

Onderdeel 2F

Ook dit onderdeel leverde niemand punten op. Het is van belang je te bedenken dat in iedere situatie er al een begin is van het volgende 3-gram, namelijk de laatste twee symbolen van de gemaakte tekst. Je kunt dus kiezen uit 28 mogelijke 3-grammen, en alleen over die 28 hoef je te kijken hoe het is met de verschillen tussen de relatieve frequenties ervan in het origineel en de nu gemaakte tekst. Bij gelijke verschillen kies je voor het eerste symbool. Deze observatie is ook de sleutel tot het antwoord op onderdeel 2G.

 

Onderdeel 2G

Enkele deelnemers hielden stellig vol dat hun programma het te verklaren verschijnsel niet vertoonde. Dat had wellicht te maken met de wijze van uitrekenen van de onderlinge verschillen; als je dat niet doet zoals in het voorbeeld, maar met afgeronde getallen, zou e.e.a. wel eens heel anders kunnen uitkomen.

In de uitleg van Vincent Groenhuis werd duidelijk wat de hele serie a’s in de gemaakte tekst verklaarde:

Het zit zo: na 60 tekens eindigt de 'zin' op: eaa

Het programma kan nu kiezen uit 'aaa', 'aab', 'aac' enzovoort.

De rel. freq. van alle 'aa_' in deze zin is hoger dan die rel. freq. in de

oorspronkelijke tekst, dus het programma gebruikt nu een 'aa_' die nog niet

in de oorspronkelijke tekst voorkwam. Het laagste is dan 'aaa'. Enzovoort.

 

De andere oplossing die alle punten van de jury kreeg is die van Lourens Veen:

 

Zodra de relatieve frequenties van de brontekst en de doeltekst gelijk zijn

levert elke nieuwe "zet" niets nieuws op; alles is dus even goed, het

programma kiest dus de eerste in het alfabet en dat is aaa.

Nog mooier zou een combinatie van beiden zijn: Zolang de relatieve frequenties in de nieuwe tekst groter zijn dan of gelijk zijn aan die in de originele tekst, levert iedere nieuwe letter een zelfde verslechtering op, en dus kies je voor de a.

Gemiddelde score: 1,02 punten (maximaal 8 punten)

Lourens Veen en

Vincent Groenhuis (derde ronde) 8

Tijmen Tieleman 7

Elianne Faber 6

Johan de Ruiter 5

Maks Verver (derde ronde) 3

Danny Oude Bos 2

Jappie Hoekstra en

Wilmer van der Gaast 1

Totaal opgave 2.

Beste scores opgave 2.

Lourens Veen 64

Bram Kuyvenhoven 62

Berteun Damman 58

Wilmer van der Gaast 51

Johan de Ruiter 49

Roland Veen 48

Tijmen Tieleman 47

Maarten Löffler 46

Jaap Taal 40

Vincent Groenhuis (derde ronde) 38

Maks Verver (derde ronde) 37

Gemiddelde score: 22,14 punten (maximaal 100)