public static void SearchColumnForSingleCandidates(this Grid grid)
        {
            for (int col = 0; col < grid.GridSize; col++)
            {
                for (int value = 1; value <= grid.GridSize; value++)
                {
                    // that value already exists in the col
                    if (Array.Exists(grid.GetColumn(col), element => element == value))
                    {
                        continue;
                    }

                    int result = grid.CheckColForValueInOptions(col, value);
                    if (result != -1)
                    {
                        grid.SolveCell(result, col, value);
                        grid.UpdateNeighbours(result, col);
                    }
                }
            }
        }