Ejemplo n.º 1
0
 public Boolean Check(CellsInfo cellsInfo, NumbersInfo numbersInfo)
 {
     if (cellsInfo == null)
     {
         throw new ArgumentNullException(nameof(cellsInfo));
     }
     if (numbersInfo == null)
     {
         throw new ArgumentNullException(nameof(numbersInfo));
     }
     return(Check(cellsInfo) && Check(numbersInfo));
 }
Ejemplo n.º 2
0
 private void UseCell(CellsInfo cellsInfo, NumbersInfo numbersInfo, Tuple <GridPoint, Int32> data)
 {
     cellsInfo.Data.Remove(data.Item1);
     foreach (GridPoint cell in cellsInfo.Data.Keys.ToArray())
     {
         cellsInfo.Data[cell] = cellsInfo.Data[cell].UseNumber(data.Item2);
     }
     numbersInfo.Data.Remove(data.Item2);
     foreach (Int32 number in numbersInfo.Data.Keys.ToArray())
     {
         numbersInfo.Data[number].Remove(data.Item1);
     }
 }
Ejemplo n.º 3
0
        private Boolean Process(CellsInfo cellsInfo, CalculationContext context)
        {
            NumbersInfo numbersInfo       = _numbersInfoFactory.Create(cellsInfo);
            Tuple <GridPoint, Int32> data = ChooseCell(cellsInfo, numbersInfo);

            while (data != null)
            {
                context.Grid[data.Item1] = data.Item2;
                context.EmptyCount--;
                UseCell(cellsInfo, numbersInfo, data);
                if (!_checker.Check(cellsInfo, numbersInfo))
                {
                    return(false);
                }
                data = ChooseCell(cellsInfo, numbersInfo);
            }
            return(true);
        }
Ejemplo n.º 4
0
 private Boolean Check(NumbersInfo numbersInfo)
 {
     return(numbersInfo.Data.All(info => info.Value.Count > 0));
 }
Ejemplo n.º 5
0
 private Tuple <GridPoint, Int32> ChooseCell(CellsInfo cellsInfo, NumbersInfo numbersInfo)
 {
     return(ChooseCell(cellsInfo) ?? ChooseCell(numbersInfo));
 }
Ejemplo n.º 6
0
 private Tuple <GridPoint, Int32> ChooseCell(NumbersInfo numbersInfo)
 {
     return(numbersInfo.Data.Where(info => info.Value.Count == 1).Select(info => new Tuple <GridPoint, Int32>(info.Value[0], info.Key)).FirstOrDefault());
 }