123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using System;
- using uqac_ia_sudoku_csp.Interfaces;
- using uqac_ia_sudoku_csp.Solver;
- using uqac_ia_sudoku_csp.Solver.Generators;
- using uqac_ia_sudoku_csp.Solver.NextValueChoosers;
-
- namespace uqac_ia_sudoku_csp
- {
- internal class Program
- {
- public static void Main(string[] args)
- {
- var generatorType = "-";
- if (args.Length > 0)
- {
- generatorType = args[0];
- }
- var valueChooser = "mrv";
- if (args.Length > 1)
- {
- valueChooser = args[1];
- }
- var emptyCharacters = "0 .";
- if (args.Length > 2)
- {
- emptyCharacters = args[2];
- }
-
- object data;
- IGenerator generator;
- var board = new Board("123456789");
-
- if (generatorType == "-")
- {
- generator = new StdInGenerator();
- data = emptyCharacters;
- }
- else if (generatorType == "0")
- {
- generator = new EmptyGenerator();
- data = null;
- }
- else
- {
- generator = new FileGenerator();
- data = new FileGeneratorDbo
- {
- EmptyCharacters = emptyCharacters,
- FilePath = generatorType
- };
- }
- generator.Generate(board, data);
- board.Print(Console.Out);
-
- INextValueChooser nextValueChooser = null;
- if (valueChooser == "mrv")
- {
- nextValueChooser = new MRVNextValueChooser();
- }
- else if (valueChooser == "basic")
- {
- nextValueChooser = new BasicNextValueChooser();
- }
- else
- {
- Console.Error.WriteLine("Invalid next value chooser");
- Environment.Exit(64);
- }
-
- var solver = new BacktrackSearch(nextValueChooser);
- var resolved = solver.Resolve(board);
-
- if (resolved.Success)
- {
- Console.WriteLine("Resolved:");
- board.Print(Console.Out);
- }
- else
- {
- Console.WriteLine("Not resolved");
- }
- Console.WriteLine($"{resolved.TryCount} tries");
- Console.WriteLine($"{resolved.ConsistentTryCount} consistent tries");
- Console.WriteLine($"{resolved.Elapsed.TotalMilliseconds} ms");
- }
- }
- }
|