Kodune ülesanne

Üldinfo

Lahenduste esitamise tähtaeg on 18. detsember 2005. Lahendused saata meiliga oma praktikumijuhendajale, kirja teemaks peab olema FPKodu2.

Seekord on ainult üks ülesanne, mille eest on võimalik saada kuni 30 punkti. Hilinenud lahenduste korral väheneb punktisumma eelmise kodutöö esimese ülesande juures toodud valemi põhjal.

Vormistamisest

Lahendus tuleb vormistada ühe Haskelli failina. Faili nimi peab olema FPKodu2.hs ning seal defineeritava mooduli nimi FPKodu2. Faili algusse tuleb lisada kommentaaridena kõigi rühmaliikmete nimed (rühmas võib olla maksimaalselt 4 liiget) ja meiliaadressid. Lahendused peavad olema loetavad ja piisavalt kommenteeritud (sh abifunktsioonide mõte peab olema selgelt välja toodud).

Näiteks (FPKodu2.hs):

module FPKodu2 (
         fpkodu2
       ) where

---------------------------------------------------------------------
-- FPKodu2.hs
-- Funktsionaalprogrammeerimise meetod, 2. kodutöö
--
-- Autorid:
--          Jaan    Tatikas   (tatikas@ut.ee)
--          Salomon Vesipruul (salomon@ut.ee)
---------------------------------------------------------------------

Ülesanne

Kirjutada Haskellis programm, mis mängiks “Laevade pommitamist”. Abiks on täpsed reeglid. Teie mänguprogrammi tegevust hakkab juhtima meie serverprogramm, mis järgib kindlat suhtlusprotokolli.

Saamaks 30 punkti, peab mänguprogramm mängima korrektselt, järgides seda protokolli, ja tema valikud peavad olema mingil määral mõistlikud. Mängu mõistlikkust mõõdetakse sellega, kui paljudel juhtudel teie programm võidab meie poolt ette antud erineval tasemel mängivaid programme. Lisaks korraldatakse tähtaegselt esitatud programmide vahel turniir, mille parimad teenivad kuni 10 punkti ulatuses boonust. Mõistlikkuse üle otsustamisel ja turniiril mängitab server teie programmi vastastega 10-partiiliste matšide kaupa, mille kestel programmi ei katkestata ja mänguparameetrite väärtusi ei muudeta.

Mänguprogrammi ja serveri suhtlus käib läbi ümbersuunatud standardsisendi ja -väljundi. See tähendab, et serverilt mänguprogrammile saadetud teated ilmuvad mänguprogrammi standardsisendisse ning mänguprogramm peab teate serverile saatmiseks kirjutama teate oma standardväljundisse. Ümbersuunamise eest hoolitseb server.

Lahendamisel võib kasutada meie poolt juba valmis kirjutatud mooduleid: Utils, Init.Constants, Init.Size, Init.SizeDistr, Init.Square, Init.BoardPart, Init, Main. Nendes moodulites on defineeritud asju, mis võivad Teie ülesande lahendamisel abiks olla. Täpsemalt on seletatud juba neis hs-failides (nende selgituste lugemiseks on soovitav läbida faile just eeltoodud järjekorras). Töö esitamisel ärge neid mooduleid meile saatke. Kõik etteantud hs-failid on kokkupakitult ühes failis FPKodu2.zip.

Täpsemad tingimused

Teil on võimalus oma lahendusi veebi kaudu testida ja jooksutada meie poolt ettevalmistatud mängijaid katseks omavahel. Normikohased 30 punkti lahenduse eest jagunevad järgmiselt.

Nende osade eest võib saada ka osalisi punkte, nt mida rohkem programm eksib reeglite või protokolli vastu, seda rohkem esimeses osas punkte maha läheb, ülejäänud osades mida tihedamini tuleb ette nõutud piiri alla jäämist, seda rohkem punkte vastavas osas maha läheb.

Meie mängijad ei mängi ükski nii hästi, kui mängiks inimene. Me ei ole neid arendades endast maksimumi andnud, ei ole püüdnud sisse programmeerida kõiki kavalusi, mida inimene loomuldasa oskaks kasutada. Nii et teil on täiesti reaalne võimalus ka kõige kavalamat meie väljapakutud mängijatest stabiilselt võita.


Varmo Vene