
(klik voor opgave 1 of opgave 2 of Opgave 3.pdf

Bij deze opgave gaat het om het schrijven van een programma dat in staat is het spel Alquerque te spelen. Je programma moet voldoen aan de specificaties die hieronder beschreven staan. In tegenstelling tot opgave 1 en opgave 2, mag je de naam van je programma zelf kiezen.
Alquerque wordt gespeeld door twee spelers op een bord van 7x7. De ene speler heeft de witte stenen, de ander de zwarte. Het gaat erom de stenen van de tegenstander te slaan.
Er zijn twee soorten zetten, gewone zetten en slaan.
In een gewone zet verplaatst een speler één van zijn stenen in een rechte lijn (zie de lijnen op het spelbord) naar een aangrenzend vrij veld. Het is verboden deze steen de volgende beurt naar het oorspronkelijke veld terug te schuiven. (Bij slaan geldt deze beperking niet.)
Bij slaan wordt een steen van de tegenstander veroverd. Een steen kan over een naastgelegen steen van de tegenstander naar het volgende vakje springen, als dat vrij is. Als de steen zo uitkomt dat nog een vijandelijke steen kan worden geslagen, moet dat ook gebeuren. Dit is onderdeel van dezelfde zet. Voor iedere slag in één beurt kan de richting veranderen.
Een voorbeeld van een gewone zet: c3-d4.
Een voorbeeld van een slagzet: e5*c3. In dit voorbeeld wordt de steen op d4 geslagen.
Als meerdere stenen worden geslagen in één zet, wordt de volgende notatie gebruikt: a1*c1*c3 (of iets vergelijkbaars; je geeft alle plaatsen op waarlangs jouw steen beweegt, met een * voor iedere steen die wordt geslagen).
Je programma moet met de software van de jury communiceren via standard-input (stdin) en standard-output (stdout). Je leest informatie van stdin en je schrijft je zetten naar stdout. Je speler begint met het lezen van een regel invoer van stdin. De witspeler krijgt het woord Start te lezen en de zwartspeler de eerste zet van wit. Als jij aan de beurt bent om te zetten, bedenk dan een zet en schrijf die naar stdout. Nadat je een zet hebt gedaan lees je de zet van je tegenstander van stdin. Iedere zet die je van de jurysoftware doorkrijgt is gegarandeerd een geldige zet.
Als één van beide programma’s een ongeldige zet doet of gewonnen heft, lees je het woord Quit van stdin. Dit betekent dat je je programma normaal moet afsluiten.
Het spel eindigt op één van de volgende twee manieren: Met een winnaar of onbeslist. Een speler wint als zijn tegenstander geen stenen meer heeft of geen geldige zetten meer kan doen wanneer hij aan de beurt is. De winnaar moet zijn eigen programma netjes laten afsluiten. De speler die verloren heeft krijgt van het juryprogramma altijd een Quit. Het spel blijft onbeslist als geen van beide spelers heeft gewonnen en beide spelers 100 zetten hebben gespeeld. Als een spel onbeslist is geëindigd moet je programma normaal worden beëindigd en niet blijven wachten op een Quit.
Let op: als de zwarte speler de witte vast zet met zijn 100-ste zet, de laatste die gespeeld wordt, eindigt het spel toch onbeslist..
Als een speler wint is de uitslag van het spel 12-0 in zijn voordeel.
Eindigt het spel onbeslist, dan krijgt een speler zeven punten min het aantal stenen dat de tegenstander nog op het bord heeft staan. Als de score hierdoor negatief zou zijn dan krijgt hij nul punten. Voorbeeld: Als wit nog drie stenen over heeft en zwart nog maar één, dan wordt de uitslag 6-4 in het voordeel van wit.
Als een speler een ongeldige zet doet, het programma crasht of teveel tijd gebruikt, wint de tegenstander met 12-0.
Je programma heeft in totaal 30 seconden voor een spel. De jury gebruikt een Pentium IV, 2.8GHz met voor jouw programma 64Mb intern geheugen beschikbaar.
Jij moet bekijken hoe je die 30 seconden over de verschillende zetten verdeelt.
Alleen de tijd tussen het lezen van stdin en het schrijven naar stdout wordt geteld.
De volgende tabel toont het begin van een spel.
Speler |
input |
output |
Wit |
Start |
|
Wit |
|
c3-d4 |
Zwart |
c3-d4 |
|
Zwart |
|
e5*c3 |
Wit |
e5*c3 |
|
Wit |
|
... |
De CodeCup is een wedstrijd bij opgave 3 van de eerste ronde van de Nederlandse Informatica Olympiade. De wedstrijd wordt online gespeeld en is live te volgen op het Internet.
Programmeurs vanuit de hele wereld mogen meedoen aan de CodeCup. Zie ook de website http://www.codecup.nl. De organisatoren van de NIO doen buiten mededinging mee met hun programma’s.
Windesheim Digitalis prijs
De beste leerling of docent uit het voortgezet onderwijs wint de Windesheim Digitalis prijs ter waarde van 250 euro. Deze prijs is beschikbaar gesteld door de afdeling Contractactiviteiten van de Marktgroep Voortgezet Onderwijs van de Christelijke Hogeschool Windesheim.
Punten voor deze opgave
Als je een werkend programma inzendt dat wordt toegelaten tot het toernooi om de CodeCup heb je al 20 punten voor de olympiade verdiend. Als je programma tijdens het toernooi om de CodeCup niet crasht, geen ongeldige zetten doet en de tijd niet overschrijdt komen daar nog eens zestig punten bij. Op basis van de volgorde in het eindklassement van de CodeCup worden nog maximaal 20 extra punten per inzending gegeven; hoe hoger je programma eindigt, des te meer punten krijg je. Iedereen van wie het programma niet volledig onderaan eindigt krijgt tenminste 1 punt.