CodeCup NIO 2017 - Een online programmeerwedstrijd.  

CodeCup NIO 2017 - Een online programmeerwedstrijd.

Spelregels More

Het spel More is afgeleid van het spel Less (http://www.less-game.com/") dat op Kickstarter gestaan heeft. Voor More hebben we de regels zo aangepast dat het makkelijker te programmeren is. Het spel heet More omdat je meer zetten moet doen.

Het bord

More is een spel voor twee spelers en wordt gespeeld op een bord van 6 bij 6 hokjes. Tussen deze hokjes kunnen zich enkele of dubbele muurtjes bevinden. Deze hebben invloed op de score. De positie van alle muurtjes worden in het begin naar je programma gestuurd. Je programma moet aan het begin van het spel dit bord inlezen. Het protocol hiervoor staat onder het kopje IO. Dit bord wordt door het jurysysteem bij elk potje gegenereerd en zal dus steeds anders zijn, ook al speel je twee keer tegen dezelfde tegenstander. Bij het testen van je programma thuis is het mogelijk om steeds met hetzelfde bord te spelen. Dit wordt uitgelegd in de documentatie bij het menu-item Caia.

Startpositie

Bij het begin van het spel heeft wit vier stenen rechts onderin het bord en heeft zwart vier stenen links bovenin het bord. Deze staan in een 2 bij 2 vierkantje.


Figuur 1: Een mogelijk bord bij het begin van het spel

Regels

Wit begint met het spelen van een zet. Hierna doet zwart een zet. Dit blijft zo doorgaan tot een van de spelers al zijn stenen in de hoek van de andere speler heeft staan. Als de wedstrijd klaar is zal de score berekend worden.

Zet

In een beurt moet een speler precies één zet doen. Hierbij kan gekozen worden uit drie opties:

  1. De speler kan een steen bewegen naar een aangrenzend hokje waar nog geen steen staat. Hierbij mag niet diagonaal bewogen worden.
  2. De speler kan een steen bewegen naar een aangrenzend hokje waar nog geen steen staat, maar in dit geval bevindt zich een enkele muur of een dubbele muur ertussen. Als deze optie wordt gespeeld, zal er voor elk enkel muurtje één strafpunt aan het eind worden gerekend voor de speler en voor elk dubbel muurtje twee strafpunten.
  3. De speler kan een steen verticaal of horizontaal over een andere steen bewegen naar een hokje dat 2 hokjes verder ligt. Voorwaarde is dat er geen muurtjes tussen zitten. Je kan niet diagonaal bewegen.


Figuur 2: Alle mogelijke sprongen over een andere steen voor wit.

IO

Jouw programma moet zich aan een protocol houden. De zetten van de jurysoftware moet je lezen vanaf stdin (standaard input) en je eigen zetten moet je afdrukken naar stdout (standaard uitvoer). Je bent wel vrij om tekst te sturen naar standard error (stderr).

Als eerste moet je het bord inlezen. Dit bord staat op de eerste regel van stdin. Het bord wordt beschreven door een string van 60 karakters. Elk karakter is een ‘0’, een ‘1’ of een ‘2’. Een ‘0’ geeft aan dat er geen muur is, ‘1’ wordt gebruikt voor een enkele muur en ‘2’ voor een dubbele muur.

De muurtjes worden doorgegeven van links naar rechts en dan zo langzaam naar beneden werkend: eerst worden de 5 verticale muren op de eerste rij doorgegeven, daarna alle 6 horizontale muren tussen de eerste en de tweede rij. Daarna komen de 5 verticale muren op de tweede rij, enzovoort. Als laatste zijn de 5 verticale muren van de 6 de rij. Neem bijvoorbeeld voor de eerste 5 cijfers 00102, dan staat er een enkele muur tussen hokje a3 en a4, en een dubbele muur tussen a5 en a6. Als de 6 cijfers daarna bijvoorbeeld 100102 zijn, dan staat er een enkele muur tussen a1 en b1, en tussen a4 en b4, en een dubbele muur tussen a6 en b6. Het bord wat hoort bij figuur 1 is: “010200100010010100110001000011000010000000000101010100100000”

Nadat het bord gestuurd is, krijgt je programma het woord “Start” (zonder de aanhalingstekens binnen) als je programma wit is. Als je programma zwart is, krijgt het de eerste zet door van de witte speler. De zet “a1a3” (zonder aanhalingstekens) houdt in dat de steen van plaats a1 naar a3 verplaatst wordt.

In beide gevallen moet je antwoorden met de zet die jij wilt doen (in het geval dat je programma wit is, is dit de eerste zet). Hierna krijg je de zet die de andere speler doet, en moet je weer een zet geven. Dit blijft doorgaan tot je programma “Quit” binnenkrijgt. Als je programma "Quit" inleest in plaats van een gewone zet, dan betekent het dat het spel is afgelopen en dat je jouw programma op de normale manier moet beëindigen.

Als één van de twee programma’s klaar is wordt de wedstrijd afgemaakt totdat ook het andere programma al zijn stenen in de hoek heeft staan. Het programma die nog steeds bezig is krijgt steeds “Nil” ingelezen om aan te geven dat het andere programma al klaar is. Dus als je programma “Nil” krijgt ingelezen moet je meteen beginnen met het berekenen van je volgende zet en deze teruggeven.

Als je een zet doorgeeft aan de jurysoftware moet je de string verplicht afsluiten met een newline. Ook ben je verplicht om je uitvoer daarna te flushen zodat de jurysoftware niet gaat zitten wachten totdat de computer de zet heeft doorgegeven aan de jurysoftware (zie de uitleg bij de technische regels).

Score

Aan het eind van het spel wordt de score berekend. Het puntenaantal is de som van het aantal zetten en het aantal strafpunten. Jouw score is het puntenaantal van je tegenstander min jouw puntenaantal. Hier komen altijd nog 10 punten bij. Als je score kleiner dan 0 is, krijg je als score 0. Als je score groter dan 20 is, krijg je als score 20. Bij een gelijkspel hebben beide spelers dus de score 10. De som van beide scores is zo ook altijd 20.

Voorbeeld: Jij bent aan de overkant in 55 zetten en je hebt 4 strafpunten gekregen. Je tegenstander heeft er 60 zetten voor nodig gehad en kreeg 2 strafpunten. Jouw puntenaantal is dan 55 + 4 = 59, en je tegenstander heeft 60 + 2 punten. Jouw score is dan 62 - 59 + 10 = 13. Je tegenstander krijgt de score 59 - 62 + 10 = 7.

Als je programma op enig moment van de wedstrijd crasht, een verkeerde zet teruggeeft of in totaal meer dan 30 seconden gebruikt voor één spel, dan krijgt je programma als score 0. De jury zal een vervangende speler inzetten die namens jou zetten doet, zodat de tegenstander nog verder kan spelen. Je tegenstander krijgt dan nog wel een score zoals het normaal zou gaan, maar jouw programma krijgt dan 0 punten.

Indien er in een spel meer dan 80 zetten zijn gespeeld, zal de jury software het spel afkappen. De jury zal voor beide spelers apart berekenen wat het kleinste aantal zetten is waarin een speler in de andere hoek kan komen zonder dat er stenen van de tegenstander op het bord staan.

Met alle ingezonden programma's die in staat zijn samen te werken met onze jurysoftware wordt een toernooi georganiseerd.

Communicatievoorbeeld

Invoer witUitvoer witInvoer zwartUitvoer zwart
010200100010010100110001000011000010000000000101010100100000010200100010010100110001000011000010000000000101010100100000
Startf6f4
f6f4a1c1
a1c1f5d5
f5d5b1d1
b1d1e5c5
e5c5c1e1
......
......
...b3b2
b3b2...
Nilf4f6
Nile4e5
Quit
Quit

Je programma heeft 30 seconden de tijd om een spel te spelen. De tijd die de tegenstander heeft wordt niet meegeteld.