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(); }