Dit is de gearchiveerde website van de CodeCup NIO 2012.
Klik hier om naar de huidige website te gaan.
CodeCup NIO 2012 - Een online programmeerwedstrijd.  

CodeCup NIO 2012 - Een online programmeerwedstrijd.

Bao

Bao behoort tot spellenfamilie die Mancala wordt genoemd. Kenmerkend voor deze familie zijn de kuiltjes en de zaadjes/steentjes. Er bestaan honderden verschillende Mancalaspelen, die over een groot deel van Afrika en Azië gespeeld worden.

Hoe gaat het spel

Bao wordt gespeeld op een bord bestaande uit twee rijen van zes kuiltjes, genummerd A tot en met L. De witte speller bezit de kuiltjes A tot en met F. De zwarte speler bezit de kuiltjes G tot en met L. In ieder kuiltje liggen vier steentjes.

De witte speler begint en kiest vanaf zijn kant een kuiltje waarin steentjes liggen. Deze gaat hij uitzaaien over de kuiltjes van het bord en doet dat tegen de wijzers van de klok in. Dus als hij met kuiltje C begint, wordt het eerste steentje in kuiltje D gedaan. Als zijn laatste steentje in een kuiltje terecht komt waarin een oneven aantal steentjes ligt, moet hij de hele inhoud er weer uit nemen en moet hij doorgaan met zaaien. Als zijn laatste steentje terecht komt in een kuiltje waarin een even aantal steentjes liggen stopt zijn beurt. Zijn beurt stopt ook als het kuiltje leeg is omdat het getal 0 een even getal is.

Als de witte speler eindigt aan zijn eigen kant, mag hij alle steentje van het tegenoverliggende kuiltje eruit nemen en optellen bij zijn puntenaantal, behalve als dat er drie zijn want dat betekent “moeder met twee kinderen” en die moet je met rust laten.

Vervolgens is zwart aan de beurt. Zwart speelt met van de wijzers van de klok mee!

Het spel is afgelopen als aan één van de twee kanten geen steentjes meer liggen. Het spel is ook afgelopen als beide spelers samen 100 zetten hebben gedaan. De overgebleven steentjes worden dan het bezit van de speler van wie de kuiltjes zijn.

Na afloop moet de witte speler altijd één steentje aan de zwarte speler geven omdat hij beginvoordeel had. De speler met de meeste steentjes wint.

Hoe moet jouw programma het spel spelen?

Jij moet een programma schrijven dat een zet van je tegenstander ontvangt via de jurysoftware en dat vervolgens een zet teruggeeft aan de jurysoftware. Het is aan jou de taak om aan de hand van de laatste informatie een zo goed mogelijke zet te vinden!

De zetten van de jurysoftware moet je lezen vanaf stdin (standaard input) en je eigen zetten moet je afdrukken naar stdout (standaard uitvoer). Om het simpel te zeggen komt het er op neer dat je een zet inleest alsof je een string opvraagt vanaf het toetsenbord en je zet speelt door het af te drukken als een string naar het scherm.

Als eerste actie moet je programma er achter komen of je met wit of met zwart speelt. Als je programma “Start” inleest dan speel je met wit en dan wordt jouw eerste zet als reactie verwacht. In het andere geval speel je dus met zwart en is de string die je gekregen hebt de eerste zet van de witte speler. Je mag er vanuit gaan dat die zet altijd correct is. Dan wordt van jou de eerste tegenzet verwacht. Zo gaat dat een tijdje door.

Als je programma een foute zet doet, of als je programma crasht of er te lang over doet, dan verliest je programma. In dat geval neemt de jurysoftware jouw taak over zodat het andere programma het spelletje kan uitspelen. De jurysoftware zal "zomaar wat doen" om je tegenstander de gelegenheid te geven om een goede score te kunnen halen. Als je programma "Quit" inleest in plaats van een gewone zet, dan betekent het dat er iemand heeft gewonnen en dat je jouw programma op de normale manier moet beëindigen.

Als je een zet doorgeeft aan de jurysoftware moet je de string verplicht afsluiten met een newline. Ook ben je verplicht om de zet daarna te flushen zodat de jurysoftware niet gaat zitten wachten totdat de computer de zet heeft doorgegeven aan de jurysoftware.

De puntentelling

Als de witte speler eindigt met 28 steentjes, wordt de eindstand 27 – 21 omdat hij nog één steentje aan zwart moet geven. De som van de punten is altijd 48 omdat er in totaal 48 steentjes zijn.

Als een speler wordt gediskwalificeerd, krijgt hij echter 0 punten. De andere speler krijgt het aantal punten zoals dat in de regels hierboven is uitgelegd. Dat is het meest eerlijk omdat het spel speciaal voor hem is uitgespeeld met de jurysoftware als slecht spelende tegenstander.

Voorbeeld van de communicatie met de jurysoftware

SpelerInvoerUitvoer
WitStartB
ZwartBH
WitHB
ZwartBI
WitI...