123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- 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.NextNumberChoosers;
- 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 numberChooser = "lcv";
- if (args.Length > 2)
- {
- numberChooser = args[2];
- }
- var emptyCharacters = "0 .";
- if (args.Length > 3)
- {
- emptyCharacters = args[3];
- }
-
- 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);
-
- INextCellChooser nextCellChooser = null;
- if (valueChooser == "mrv")
- {
- nextCellChooser = new MrvNextCellChooser();
- }
- else if (valueChooser == "dh")
- {
- nextCellChooser = new DhNextCellChooser();
- }
- else if (valueChooser == "basic")
- {
- nextCellChooser = new BasicNextCellChooser();
- }
- else
- {
- Console.Error.WriteLine("Invalid next value chooser");
- Environment.Exit(64);
- }
-
- INextNumberChooser nextNumberChooser = null;
- if (numberChooser == "basic")
- {
- nextNumberChooser = new BasicNextNumberChooser();
- }
- else if (numberChooser == "lcv")
- {
- nextNumberChooser = new LcvNextNumberChooser();
- }
- else
- {
- Console.Error.WriteLine("Invalid next number chooser");
- Environment.Exit(64);
- }
-
- var solver = new BacktrackSearch(nextCellChooser, nextNumberChooser);
- 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");
- }
- }
- }
|