Ejemplo n.º 1
0
        /// <summary>
        /// Creates a Puzzle from the constraints.
        /// Internally, the puzzle is automatically solved.
        /// If the constraints are ambiguous or contradictory,
        /// an exception is thrown.
        /// </summary>
        /// <param name="columnConstraints">Column constraints.</param>
        /// <param name="rowConstraints">Row constraints.</param>
        /// <returns>A Puzzle with the given constraints.</returns>
        /// <exception cref="InvalidConstraintsException">Thrown when the constraints
        /// don't lead to a single solution.</exception>
        public static Puzzle FromConstraints(ISequence <Constraints> columnConstraints, ISequence <Constraints> rowConstraints)
        {
            var solverGrid = new SolverGrid(columnConstraints, rowConstraints);

            solverGrid.Refine();

            if (!solverGrid.IsSolved)
            {
                throw new InvalidConstraintsException();
            }
            else
            {
                var grid = ConvertSquareGridToBoolGrid(solverGrid.Squares);

                return(new Puzzle(columnConstraints: columnConstraints, rowConstraints: rowConstraints, grid: grid));
            }
        }
Ejemplo n.º 2
0
        public IStepwisePuzzleSolver CreateStepwisePuzzleSolver(ISequence <Constraints> rowConstraints, ISequence <Constraints> columnConstraints)
        {
            var solverGrid = new SolverGrid(columnConstraints: columnConstraints, rowConstraints: rowConstraints);

            return(new StepwiseSolver(solverGrid));
        }
 public AmbiguityChecker(ISequence <Constraints> columnConstraints, ISequence <Constraints> rowConstraints)
 {
     this.solver      = new SolverGrid(columnConstraints: columnConstraints, rowConstraints: rowConstraints);
     stepwiseFunction = CreateStepwiseFunction().GetEnumerator();
     Ambiguities      = this.solver.Squares.Map(DeriveAmbiguity);
 }
Ejemplo n.º 4
0
 public StepwiseSolver(SolverGrid solverGrid)
 {
     this.solverGrid = solverGrid;
     this.step       = new SolveStep(() => RefineColumn(0));
 }