private void Process(NumbersInfo numbersInfo, GridPoint cell, NumbersBinary freeNumbers)
 {
     for (Int32 number = Defs.MinNumber; number < Defs.MaxNumber; ++number)
     {
         if ((freeNumbers & NumbersBinaryHelper.CreateForNumber(number)) != 0)
         {
             AddCell(numbersInfo, number, cell);
         }
     }
 }
        private static CellsInfo ScanCells(Grid grid, GridPoint[] cells)
        {
            CellsInfo     cellsInfo  = new CellsInfo();
            NumbersBinary allNumbers = NumbersBinaryHelper.CreateForRange(Defs.MinNumber, Defs.MaxNumber);
            NumbersBinary result     = cells.Where(cell => grid[cell] != 0).Aggregate(allNumbers, (numbers, cell) => numbers.UseNumber(grid[cell]));

            foreach (GridPoint cell in cells.Where(cell => grid[cell] == 0))
            {
                cellsInfo.Data[cell] = result;
            }
            return(cellsInfo);
        }