1994.-1995. õppeaasta

Mänguprogrammide võistlus


Et anda vabariiklikuks informaatika olümpiaadiks valmistujatele igasuguse keerukusega programmeerimist võimaldav harjutusülesanne, korraldatakse olümpiaadi ajal Tartus mänguprogrammide võistlus. Muidugi ei ole eeldatud, et osavõtjad jõuavad kolme nädalaga valmis kirjutada maleprogrammi. Mäng, mida peavad mängima programmid sellel võistlusel, on hoopis lihtsam ja võimaldab nii otsese algoritmina kirjeldatud strateegiaid kui ka üsna suure käikude arvuga variantide läbivaatamist.

Programmid tuleb esitada kettal olümpiaadi avapäeval informaatika olümpiaadile registreerimisel. Nad peavad olema vormistatud keeles Turbo Pascal 7.0 alamprogrammidena vastavalt alltoodud spetsifikatsioonidele. Võistlus korraldatakse turniirina olümpiaadi eelviimase päeva õhtul, turniirisüsteem sõltub osavõtjate arvust. Korraldajad jätavad endale õiguse programme enne turniiri testida ja diskvalifitseerida need, mis teevad mängureeglite vastaseid käike.


1. MÄNGUREEGLID

Mäng toimub 6x6 malelaual, mille välju tähistatakse tavalisel viisil: vasak alumine väli on a1, parem ülemine f6. Kummalgi mängijal on mängu alguses

  • üks nupp väärtusega 4,
  • üks nupp väärtusega 3,
  • üks nupp väärtusega 2 ja
  • kolm nuppu väärtusega 1.

Alustades paigutab valge oma nupud suvaliselt reale 1 ja must oma nupud suvaliselt reale 6, omamata sellel ajal informatsiooni vastase nuppude kohta. Seejärel seis "avalikustatakse" ja alustatakse kordamööda käikude tegemist.

Nupp väärtusega n>1 saab käia või lüüa nagu malevanker 1 kuni n sammu ettepoole. Nupp väärtusega 1 saab käia 1 sammu ettepoole ja lüüa 1 sammu diagonaalis ettepoole (vasakule või paremale).

Löömine pole kohustuslik.

Mäng lõpeb, kui käigul olev mängija ei saa enam käia (pole enam nuppe, nupud on viimasel real või käigud blokeeritud oma või vastase nuppudega).

Võitja määramiseks liidetakse kummagi mängija laual olevate nuppude väärtused, korrutades viimasele reale jõudnute omad 3-ga (ka viik on võimalik).


2. PROGRAMMIDE VÕISTLUS

Võistlusest osavõtja kirjutab keeles Turbo Pascal 7.0 oma nuppude paigutamiseks ja käikude tegemiseks kaks protseduuri

NUPUPAIGUTUS(pool:integer; var algseis:algseisutyyp; 
                           var usrid:string); 

ja

KAIK(pool:integer; seis:lauatyyp; 
     var teen:kaigutyyp; var usrid:string); 

kus sisendmuutuja POOL väärtuseks on 1 valge ja -1 musta korral, väljundmuutujale USRID peavad alamprogrammid omistama autori nime, algseisu, seisu ja käigu edasiandmiseks kasutatavate muutujate tüüpe vt. juhtprogrammi näite tekstist.

Alamprogrammid ei tohi kasutada ühtegi globaalset muutujat, pöörduda otse mälu poole ega teha muud, mis võib segada juhtprogrammi või teiste alamprogrammide tööd. Neil pole õigust salvestada informatsiooni järgmistel käikudel kasutamiseks.

Partii mängimiseks lingitakse mõlema mängija alamprogrammid korraldajate koostatud põhiprogrammiga, mis juhib mängu ja kontrollib sealjuures alamprogrammide poolt valitud algseisude ja käikude vastavust mängureeglitele ning peab arvet kummagi kulutatud aja kohta. Reegleid (esimesena) rikkuv programm loetakse partiis kaotajaks, samuti ajapiiri ületav programm. Kummalegi poolele antakse partii mängimiseks 5 minutit.


3. NÄIDISPROGRAMM

Lisaks käesolevale juhendile postitatakse Matemaatikateaduskonna tudengite kirjutatud PASCAL-programm, mis sisaldab lihtsat varianti turniiri juhtivast põhiprogrammist ja mängivate alamprogrammide näidiseid. Üks nendest "võistlejatest" ei mõtle käike ise välja, vaid võimaldab neid sisestada inimesel. Näidisprogrammi abil saate testida oma "mängijat".

Muidugi võite oma tarbeks juhtprogrammi muuta, lisades näiteks peatuse iga käigu eel, muutes osavõtjate arvu, tekitades võimalusi "käsitsi" seisu muuta vms.

Tegelik võistlus viiakse läbi keerulisema juhtprogrammiga.

Näidisprogrammi tekst.