Exemplo n.º 1
0
        public PuzzleSolver(Puzzle puzzle)
        {
            this.puzzle = puzzle;

            lineSolvers = new List <LineSolver>();
            foreach (Line line in puzzle.Lines)
            {
                var lineSolver = new LineSolver(line);
                lineSolver.OwnerPuzzle = this;
                lineSolvers.Add(lineSolver);
            }
            cellSolvers = new List <CellSolver>();
            foreach (Cell cell in puzzle.Cells)
            {
                var cellSolver = new CellSolver(cell);
                cellSolver.OwnerPuzzle = this;
                cellSolvers.Add(cellSolver);
            }
            foreach (var row in lineSolvers.Where(l => l.line.IsRow))
            {
                foreach (var column in lineSolvers.Where(l => !l.line.IsRow))
                {
                    var cell = cellSolvers.Find(c => c.cell.Row == row.line && c.cell.Column == column.line);
                    row.cellSolvers.Add(cell);
                    foreach (var clue in row.clueSolvers)
                    {
                        clue.PossSections.First().Add(cell);
                    }
                    column.cellSolvers.Add(cell);
                }
            }
        }
Exemplo n.º 2
0
        public PuzzleSolver(Puzzle puzzle)
        {
            this.puzzle = puzzle;

            lineSolvers = new List<LineSolver>();
            foreach (Line line in puzzle.Lines)
            {
                var lineSolver = new LineSolver(line);
                lineSolver.OwnerPuzzle = this;
                lineSolvers.Add(lineSolver);
            }
            cellSolvers = new List<CellSolver>();
            foreach (Cell cell in puzzle.Cells)
            {
                var cellSolver = new CellSolver(cell);
                cellSolver.OwnerPuzzle = this;
                cellSolvers.Add(cellSolver);
            }
            foreach (var row in lineSolvers.Where(l => l.line.IsRow))
            {
                foreach (var column in lineSolvers.Where(l => !l.line.IsRow))
                {
                    var cell = cellSolvers.Find(c => c.cell.Row == row.line && c.cell.Column == column.line);
                    row.cellSolvers.Add(cell);
                    foreach (var clue in row.clueSolvers)
                    {
                        clue.PossSections.First().Add(cell);
                    }
                    column.cellSolvers.Add(cell);
                }
            }
        }
Exemplo n.º 3
0
 internal ClueSolver GetConfirmedClue(LineSolver line)
 {
     if (line.line == cell.Row)
     {
         return(ConfirmedClues.X);
     }
     if (line.line == cell.Column)
     {
         return(ConfirmedClues.Y);
     }
     throw new Exception("Not a valid owner line");
 }
Exemplo n.º 4
0
 internal ClueSolver GetConfirmedClue(LineSolver line)
 {
     if (line.line == cell.Row)
     {
         return ConfirmedClues.X;
     }
     if (line.line == cell.Column)
     {
         return ConfirmedClues.Y;
     }
     throw new Exception("Not a valid owner line");
 }
Exemplo n.º 5
0
 private List <ClueSolver> FindClues(LineSolver line)
 {
     return(line.OpenClues.Where(clue => clue.PossCells.Contains(this)).ToList());
 }
Exemplo n.º 6
0
 private List<ClueSolver> FindClues(LineSolver line)
 {
     return line.OpenClues.Where(clue => clue.PossCells.Contains(this)).ToList();
 }