示例#1
0
        private static void Main()
        {
            var pieces = Piece.RealPieces;
            var solver = new SolverUsingDlx(pieces);

            var solutions = solver.FindAllSolutions().ToList();
            solutions = RemoveDuplicateSolutions(solver, solutions);

            var consolePrintTarget = new ConsolePrintTarget();
            var boardPrinter = new BoardPrinter(consolePrintTarget);

            Console.WriteLine("Found {0} solutions", solutions.Count());

            foreach (var solution in solutions)
            {
                var solutionAsArray = solution.ToArray();
                var board = solver.PopulateBoardWithSolution(solutionAsArray);
                Console.WriteLine();
                boardPrinter.Print(board);
                Console.WriteLine();
                solver.WriteSolution(solutionAsArray);
            }

            solver.WritePropertyList("8x8_Pieces1.plist", pieces, solutions);
        }
示例#2
0
 private static List<IEnumerable<int>> RemoveDuplicateSolutions(SolverUsingDlx solver, IEnumerable<IEnumerable<int>> solutions)
 {
     var result = new List<IEnumerable<int>>();
     var uniqueSolutionStrings = new List<string>();
     foreach (var solution in solutions)
     {
         var solutionList = solution.ToList();
         var solutionString = MakeSolutionString(solver, solutionList);
         if (uniqueSolutionStrings.Any(s => s == solutionString)) continue;
         result.Add(solutionList);
         uniqueSolutionStrings.Add(solutionString);
     }
     return result;
 }
示例#3
0
 private static string MakeSolutionString(SolverUsingDlx solver, IEnumerable<int> solution)
 {
     var board = solver.PopulateBoardWithSolution(solution.ToArray());
     var pieceNames = new List<string>();
     for (var x = 0; x < board.BoardSize; x++)
     {
         for (var y = 0; y < board.BoardSize; y++)
         {
             var piece = board.PieceAt(x, y);
             var square = board.SquareAt(x, y);
             var pieceName = piece.Name + ((square.Colour == Colour.Black) ? "b" : "w");
             pieceNames.Add(pieceName);
         }
     }
     return string.Join("-", pieceNames);
 }