private void VerticalCheck(IBoard board, HashSet <BoardChange> changes) { for (int x = 0; x < board.Width; x++) { var ruleLine = board.TopRules[x]; var sum = ruleLine.Sum(); var numberOfRules = ruleLine.Count; var sizeNeeded = sum + numberOfRules - 1; if (sizeNeeded == board.Height) { int y = 0; foreach (var rule in ruleLine) { for (int i = 0; i < rule; i++) { if (board[x, y] == CellState.None) { changes.Add(BoardChange.Filled(x, y)); } y += 1; } if (y < board.Height) { if (board[x, y] == CellState.None) { changes.Add(BoardChange.Blocked(x, y)); } y += 1; } } } } }
private void Vertical(IBoard board, HashSet <BoardChange> changes) { for (int x = 0; x < board.Width; x++) { IRuleLine?ruleLine = board.TopRules[x]; if (ruleLine.Count != 1) { continue; } int f = (ruleLine[0] * 2) - board.Height; if (f > 0) { int e = ruleLine[0] - f; for (int filledCells = e; filledCells < e + f; filledCells++) { if (board[x, filledCells] == CellState.None) { changes.Add(BoardChange.Filled(x, filledCells)); } } } } }