示例#1
0
        private void ProcessCells(IReadOnlyCollection <Cell> cells, IReadOnlyCollection <LineNumber> numbers)
        {
            var filledCellsCount = cells.Count(x => x.Status == CellStatus.Filled);
            var sumOfNumbers     = numbers.Sum(x => x.Number);

            if (sumOfNumbers != filledCellsCount)
            {
                return;
            }

            CellsService.CrossCells(cells.Where(x => x.Status == CellStatus.Empty));
            CellsService.ResolveNumbers(numbers);
        }
        private void CheckAndResolveNumbers(List <Cell> cells, List <LineNumber> numbers, bool fromTheEnd,
                                            bool withResolve = true)
        {
            if (fromTheEnd)
            {
                cells.Reverse();
                numbers.Reverse();
            }

            var numberIndex = 0;

            for (var i = 0; i < cells.Count - 1; i++)
            {
                if (cells[i].Status == CellStatus.Empty)
                {
                    break;
                }

                if (cells[i].Status == CellStatus.Crossed)
                {
                    continue;
                }

                if (cells[i].Status == CellStatus.Filled)
                {
                    var length = GetLength(cells, i);
                    var number = numbers.Skip(numberIndex).FirstOrDefault();

                    if (number?.Number == length)
                    {
                        CellsService.FillNumber(cells, number, i, withResolve);
                        numberIndex++;
                    }
                    else
                    {
                        break;
                    }

                    i += length - 1;
                }
            }

            if (!fromTheEnd)
            {
                return;
            }

            cells.Reverse();
            numbers.Reverse();
        }