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"); } } }