Programming Contest Nieuwe Stijl: Contest 4Inhoudsopgave
Eerdere contestsInleidingNa de vorige contest is het angstvallig stil gebleven rondom dit hele idee. Een combinatie van gebrek aan inspiratie en drukke persoonlijke levens waren hier debet aan, en dat hebben we geweten ook. Letterlijk tientallen vragen hebben we gehad om informatie in te winnen over de volgende contest of om hulp aan te bieden bij het verzinnen ervan. We zijn natuurlijk érg blij dat deze contests zo in de smaak vallen, en daarom blijven we ook niet achter en is er bij deze een nieuw contesttopic! Ook dit keer hebben we weer een leuke opdracht die elke programmeur, beginner of ervaren diehard, een uitdaging moet kunnen bieden.De opdrachtWe gaan deze keer back to the basics en hebben besloten jullie weer een oplosser te laten schrijven voor een spelletje, zoals we dat ook vroegen voor Tetris in de eerste contest. Deze keer is onze keuze gevallen op het spelletje dat velen van jullie wel zullen kennen: Bejeweled. We hebben hier een beetje onze eigen draai aan gegeven om het jullie niet al te gemakkelijk te maken.In Bejeweled is het de bedoeling om door het omwisselen van twee juwelen telkens drie, vier of vijf van dezelfde juwelen op één horizontale of verticale lijn te krijgen. Die juwelen verdwijnen dan uit het speelveld en de rij of rijen daarboven zakken naar beneden om ruimte te maken voor nieuwe juwelen die in het speelveld vallen. Het is alleen mogelijk om twee juwelen om te wisselen als je daarmee een setje van drie of meer juwelen kan maken. Het spel is in principe oneindig, tenzij je foute keuzes maakt en je puzzel onoplosbaar wordt. Mocht een en ander je nog niet duidelijk zijn aan het spel, dan kun je het hier online spelen of een trialversie downloaden. Je inzending krijgt van ons een aantal bestanden aangereikt. Om te beginnen is er een bestand genaamd speelveld.txt. In dit bestand tref je de vorm van het speelveld in binaire code aan, waarbij een 1 staat voor een "muur" en een 0 voor open ruimte waar je edelstenen in kunnen vallen. Een voorbeeld: 0000000000000000000000000 0000000000000000000000000 1000000000000000000000001 1000000000000000000000111 1000000000000000000000111 1100000000000000000000111 1100000000000000010001111 1100000000000000111111111 1100000000000001111111111 1100000000011011111111111 1110000000111111111111111 1111111001111111111111111 1111111111111111111111111 1111111111111111111111111 Dit speelveld zit er grafisch dus als volgt uit: Fig. 1: ![]() Meer informatie over het speelveld vind je hieronder in het onderdeel Details. Daarnaast krijg je nog een bestand genaamd kolommen.txt. In dit bestand staat per regel een opeenvolging van cijfers die voor die respectievelijke kolom de binnenvallende juwelen representeert. De eerste regel van het bestand bevat de sequentie voor de meest linkse kolom, de tweede regel voor de kolom rechts daarnaast, enzovoorts. Een voorbeeldbestand hiervoor zou iets kunnen zijn als dit: 15436521463266542136541661545163246513264541231665125521322461 41655651352566 116554465512356465113544432616654653666 13566521435533121546512 22135465664121456654623546535643156545645615656 241324656213543256565165132443321656461 356521356233 165465515231356456456123 65656456521356465432313564535346461 45654564616512356465432424346456564534343434534564151651641543523453 54642345353456156415434434334661541565165664653 2342341565322432151 2443566333442333445651645442165164541 4235445656161535434635456415615165561565624343356 43441651654323456564231564114655613434244566 3546356415615615161655434234561556446556156534244565656 3621461461245434321626421645416214355321645246545264 412452146546546545624645236 6421645352445624562452456452 6465645214654562456245626245625434215566541561546433154546 2462466464265645262456242226245624345355554343416646521 465645625662334566454154545 5665665465455551643433316441556416454255556214624 4564655641651342655556421461265624343 66126424664665265664555423423155424356112121345 Zoals je ziet hoeft de sequentie niet voor elke kolom even lang te zijn! Je begint met een leeg speelveld. Vervolgens vallen de blokjes binnen in de volgorde zoals ze in kolommen.txt staan. Let hierbij op dat het mogelijk is dat er meteen al drie of meer van dezelfde blokjes naast elkaar staan en je dus mogelijk meteen al nieuwe blokjes moet introduceren. Voor het wegspelen van drie blokjes tegelijk krijg je 50 punten. Voor het wegspelen van vier blokjes loopt die score op tot 100 punten en voor het wegspelen van vijf of meer blokjes tegelijk krijg je 250 punten toegekend. Dit geldt ook als je door het verschuiven van één blokje zowel horizontaal als verticaal een set van drie blokken tegelijk wegspeelt; het gaat dus puur om het aantal weggespeelde blokjes. Hoe geef je nou je zetten door aan ons? Dat is vrij simpel: we verwachten dat je programma een uitvoer schrijft naar een bestand genaamd uitvoer.txt waarin op elke regel één zet staat. Deze "zet" is in de vorm <x-coördinaat> <y-coördinaat> <windrichting>. De x- en y-coördinaten geven aan welk blokje je wil verplaatsen, de windrichting (N, Z, O, W) geeft aan waarheen je dat blokje verplaatst. Een voorbeelduitvoer kan iets zijn als dit: 3 5 N 12 4 Z 3 10 W 20 2 O De linkerkolom en de bovenste rij hebben beiden het nummer 0, dus bovenstaand speelveld heeft coördinaten van 0 tot 24 op de x-as en van 0 tot 14 op de y-as. De windrichting verwachten we in uppercase, en de witruimtes worden opgemaakt uit één spatie per ruimte. De score zal bijgehouden worden door een parser die we zelf schrijven, maar je kan natuurlijk zelf ook de score bijhouden in je eigen programma. Let wel; de score die jouw programma aangeeft zal door ons niet bekeken en/of vertrouwd worden. Details en spelregelsOm alles even zo duidelijk mogelijk te maken zal ik even wat constraints opsommen:
De regels en andere afsprakenUiteraard zijn er aan deze contest wat regeltjes verbonden. Om alles eerlijk te laten verlopen hebben we de volgende spelregels in gedachten:
Wat kan ik eigenlijk winnen?Nou, dat is vrij simpel: niks.We weten dat we bij de tweede contest ook zeiden dat er niets te winnen viel en dat dit uiteindelijk toch wél het geval was. We verzekeren je echter dat de prijzen bij de tweede contest éénmalig waren en er in elk geval voorlopig geen prijs meer uitgereikt wordt aan de winnaar van een PRG-contest. Om je op weg te helpenOm te zorgen dat jullie alvast van start kunnen gaan bieden we jullie graag een testset aan van invoerbestanden. Bedenk wel dat de uiteindelijke bestanden anders zullen zijn!Je kunt natuurlijk ook voor testdoeleinden (aanbevolen zelfs!) je eigen invoerbestanden maken. Helemaal leuk wordt het als jullie onderling testsets gaan delen en kijken wie het best scoort totdat de deadline gekomen is. Zo zijn je tests niet al te eentonig met altijd dezelfde data. phsmit heeft verderop in dit topic een validator beschikbaar gesteld, evenals .oisyn. Deze zijn niet eerst gecontroleerd door de organisatie. Alternatieve testsets kun je onder andere hier en hier vinden. Tot slot......willen we jullie natuurlijk weer heel veel succes wensen. We hopen dat je er plezier in gaat hebben om aan deze contest mee te doen, en natuurlijk hopen we dat je niet de enige bent. Hoe meer competitie, hoe beter!Als jullie nog vragen hebben, stel ze dan maar gewoon in dit topic. |
[ Voor 118% gewijzigd door NMe op 03-01-2009 17:14 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.