using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
public class Node : IEquatable<Node>
public override int GetHashCode()
return column.GetHashCode() + row.GetHashCode();
public override bool Equals(object obj)
return Equals(obj as Node);
public bool Equals(Node obj)
return obj.column == column && obj.row == row;
public void AddNeighbors(IList<Node> island, bool[, ] arr)
throw new ArgumentNullException(nameof(arr));
throw new ArgumentNullException(nameof(arr));
var r = row == 0 ? 0 : row - 1;
var c = column == 0 ? 0 : column - 1;
var rows = arr.GetLength(0);
var columns = arr.GetLength(1);
if (r < rows && c < columns && (r != row || c != column))
var neighbor = new Node()
if (!island.Contains(neighbor))
neighbor.AddNeighbors(island, arr);
c = column == 0 ? 0 : column - 1;
public int Count(bool[, ] arr)
throw new ArgumentNullException(nameof(arr));
var islands = new List<List<Node>>();
var rows = arr.GetLength(0);
var columns = arr.GetLength(1);
for (var i = 0; i < rows; i++)
for (var j = 0; j < columns; j++)
if (!islands.Any(isl => isl.Contains(node)))
var island = new List<Node>();
node.AddNeighbors(island, arr);
public class CounterTests
protected Counter Counter
public void Count_ThreeIslands_ReturnsExpected()
var arr = new bool[, ]{{false, false, true, true, false, false, true, false}, {true, false, true, false, false, false, false, false}, {true, false, true, false, false, false, false, false}, {false, true, false, false, true, false, true, false}, {false, false, false, true, true, true, false, false}, {false, false, false, false, false, false, false, false}};
Assert.AreEqual(3, Counter.Count(arr));
public void Count_SmallIslands_ReturnsExpected()
var arr = new bool[, ]{{false, false, true, false, false, true, false, false}, {true, false, false, false, false, false, false, true}, {false, false, true, false, true, false, false, false}, {true, false, false, false, false, false, true, false}, {false, false, true, false, false, false, false, false}, {false, false, false, false, true, false, false, false}};
Assert.AreEqual(10, Counter.Count(arr));
public void Count_NoIslands_ReturnsExpected()
var arr = new bool[, ]{{false, false}, {false, false}};
Assert.AreEqual(0, Counter.Count(arr));