Go-Zählen

Go-Zählen

Mittel

Anleitung

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.

Eingabeformat

Der Parameter board, der das Spielbrett darstellt, hat das Format eines Arrays aus Strings.

['  B  ', ' B B ', 'B W B', ' W W ', '  W  '];

Jedes Zeichen eines Strings steht für eine Zelle. Die gültigen Werte für eine Zelle sind:

  • ein Leerzeichen für eine leere Zelle
  • B eine Zelle, die dem schwarzen Spieler gehört
  • W eine Zelle, die dem weißen Spieler gehört

Ausgabeformate

Die Funktion getTerritory soll ein Objekt mit 2 Eigenschaften zurückgeben:

  • owner Der Besitzer des Gebiets (NONE, BLACK oder WHITE)
  • territory Ein Array von Koordinaten, die jede Zelle im Gebiet repräsentieren.
{
    owner: 'BLACK',
    territory: [
        [0, 0],
        [0, 1],
        [1, 0],
    ],
}

Die Funktion getTerritories soll ein Objekt mit 3 Eigenschaften zurückgeben:

  • territoryBlack Ein Array von Koordinaten, die die Gebiete repräsentieren, die dem Spieler BLACK gehören
  • territoryWhite Ein Array von Koordinaten, die die Gebiete repräsentieren, die dem Spieler WHITE gehören
  • territoryNone Ein Array von Koordinaten, die die Gebiete repräsentieren, die keinem der beiden Spieler gehören
{
    territoryBlack: [
        [0, 0],
        [0, 1],
    ],
    territoryWhite: [
        [3, 0],
        [3, 1],
    ],
    territoryNone: [],
}
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Go-Zählen zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.