<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [GoAnalysis](./bitburner.goanalysis.md) &gt; [getControlledEmptyNodes](./bitburner.goanalysis.getcontrolledemptynodes.md)

## GoAnalysis.getControlledEmptyNodes() method

Returns 'X' for black, 'O' for white, or '?' for each empty point to indicate which player controls that empty point. If no single player fully encircles the empty space, it is shown as contested with '?'. "\#" are dead nodes that are not part of the subnet.

Takes an optional boardState argument; by default uses the current board state.

Filled points of any color are indicated with '.'

In this example, white encircles some space in the top-left, black encircles some in the top-right, and between their routers is contested space in the center:

```
[
  "OO..?",
  "OO.?.",
  "O.?.X",
  ".?.XX",
  "?..X#",
]
```

**Signature:**

```typescript
getControlledEmptyNodes(boardState?: string[]): string[];
```

## Parameters

<table><thead><tr><th>

Parameter


</th><th>

Type


</th><th>

Description


</th></tr></thead>
<tbody><tr><td>

boardState


</td><td>

string\[\]


</td><td>

_(Optional)_ Optional. The current board state, as an array of strings. Defaults to the current board state.


</td></tr>
</tbody></table>

**Returns:**

string\[\]

A 2D array of characters indicating the player who controls each empty point.

## Remarks

RAM cost: 16 GB

(This is intentionally expensive; you can derive this info from just getBoardState() )

