Zähle die gewerteten Punkte auf einem Go-Brett.
Im Spiel Go (auch bekannt als Baduk, Igo, cờ vây und Wéiqí) gewinnst du Punkte, indem du leere Schnittpunkte vollständig mit deinen Steinen umschließt. Die umschlossenen Schnittpunkte eines Spielers werden als sein Territorium bezeichnet.
Berechne das Territorium jedes Spielers. Du kannst davon ausgehen, dass alle Steine, die im feindlichen Territorium gestrandet sind, bereits vom Brett genommen wurden.
Bestimme das Territorium, das eine angegebene Koordinate enthält.
Es können mehrere leere Schnittpunkte gleichzeitig umschlossen sein, und für das Umschließen zählen nur horizontale und vertikale Nachbarn. Im folgenden Diagramm sind die Steine, die zählen, mit „O“ markiert und die Steine, die nicht zählen, mit „I“ (ignoriert). Leere Stellen stehen für leere Schnittpunkte.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
Genauer gesagt gehört ein leerer Schnittpunkt zum Territorium eines Spielers, wenn alle seine Nachbarn entweder Steine dieses Spielers oder leere Schnittpunkte sind, die zum Territorium dieses Spielers gehören.
Weitere Informationen findest du bei Wikipedia oder in Sensei's Library.
Um diese Übung abzuschließen, musst du die folgenden Funktionen implementieren:
territories gibt die Koordinaten (1-basiert, oben links ist (1,1))
der Punkte in jedem Gebiet zurück, zusammen damit, wem das Gebiet „gehört“.
territoriesFor gibt das Gebiet zurück, das die Koordinate enthält,
zusammen mit dem Besitzer des Gebiets. Wenn die Koordinate nicht auf
eine leere Stelle zeigt, wird Nothing zurückgegeben.
Ein Gebiet gehört einem der Spieler, wenn die Steine dieses Spielers die einzigen Steine sind, die an das Gebiet angrenzen.
Die Typsignaturen findest du bereits vor, aber die Funktionen musst du selbst definieren.
Melde dich bei Exercism an, um Haskell mit 107 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.