Számold meg a megszerzett pontokat egy Go-táblán.
A Go játékában (amely baduk, igo, cờ vây és wéiqí néven is ismert) pontokat úgy szerezhetsz, hogy a köveiddel teljesen körbeveszel üres metszéspontokat. Egy játékos körbevett metszéspontjait a területének nevezzük.
Számítsd ki minden játékos területét. Felteheted, hogy az ellenséges területen rekedt kövek már lekerültek a tábláról.
Határozd meg azt a területet, amely tartalmaz egy megadott koordinátát.
Egyszerre több üres metszéspont is körbevehető, és a körbevételnél csak a vízszintes és függőleges szomszédok számítanak. A következő ábrán a számító kövek „O” jelölést kaptak, a nem számítók pedig „I” jelölést (figyelmen kívül hagyott). Az üres helyek az üres metszéspontokat jelentik.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
Pontosabban: egy üres metszéspont akkor része egy játékos területének, ha az összes szomszédja vagy az adott játékos köve, vagy olyan üres metszéspont, amely az adott játékos területének része.
További információért nézd meg a Wikipédiát vagy a Sensei's Library oldalt.
A feladat megoldásához az alábbi függvényeket kell megvalósítanod:
A territories visszaadja az egyes területek pontjainak koordinátáit (1-től indulva, a bal felső pont a (1,1)), valamint azt, hogy ki „birtokolja” a területet.
A territoriesFor visszaadja a koordinátát tartalmazó területet és a terület tulajdonosát. Ha a koordináta nem üres helyre mutat, Nothing értéket ad vissza.
Egy terület akkor tartozik egy játékoshoz, ha a területtel szomszédos kövek között csak az ő kövei találhatók.
A típus-szignatúrák már a helyükön vannak, a függvények megvalósítása viszont rád vár.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Haskell nyelvet 107 feladat segítségével, valódi emberi mentorálással, mindez ingyen.