You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Program.cs 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using uqac_ia_sudoku_csp.Interfaces;
  3. using uqac_ia_sudoku_csp.Solver;
  4. using uqac_ia_sudoku_csp.Solver.Generators;
  5. using uqac_ia_sudoku_csp.Solver.NextValueChoosers;
  6. namespace uqac_ia_sudoku_csp
  7. {
  8. internal class Program
  9. {
  10. public static void Main(string[] args)
  11. {
  12. var generatorType = "-";
  13. if (args.Length > 0)
  14. {
  15. generatorType = args[0];
  16. }
  17. var valueChooser = "mrv";
  18. if (args.Length > 1)
  19. {
  20. valueChooser = args[1];
  21. }
  22. var emptyCharacters = "0 .";
  23. if (args.Length > 2)
  24. {
  25. emptyCharacters = args[2];
  26. }
  27. object data;
  28. IGenerator generator;
  29. var board = new Board("123456789");
  30. if (generatorType == "-")
  31. {
  32. generator = new StdInGenerator();
  33. data = emptyCharacters;
  34. }
  35. else if (generatorType == "0")
  36. {
  37. generator = new EmptyGenerator();
  38. data = null;
  39. }
  40. else
  41. {
  42. generator = new FileGenerator();
  43. data = new FileGeneratorDbo
  44. {
  45. EmptyCharacters = emptyCharacters,
  46. FilePath = generatorType
  47. };
  48. }
  49. generator.Generate(board, data);
  50. board.Print(Console.Out);
  51. INextValueChooser nextValueChooser = null;
  52. if (valueChooser == "mrv")
  53. {
  54. nextValueChooser = new MRVNextValueChooser();
  55. }
  56. else if (valueChooser == "basic")
  57. {
  58. nextValueChooser = new BasicNextValueChooser();
  59. }
  60. else
  61. {
  62. Console.Error.WriteLine("Invalid next value chooser");
  63. Environment.Exit(64);
  64. }
  65. var solver = new BacktrackSearch(nextValueChooser);
  66. var resolved = solver.Resolve(board);
  67. if (resolved.Success)
  68. {
  69. Console.WriteLine("Resolved:");
  70. board.Print(Console.Out);
  71. }
  72. else
  73. {
  74. Console.WriteLine("Not resolved");
  75. }
  76. Console.WriteLine($"{resolved.TryCount} tries");
  77. Console.WriteLine($"{resolved.ConsistentTryCount} consistent tries");
  78. Console.WriteLine($"{resolved.Elapsed.TotalMilliseconds} ms");
  79. }
  80. }
  81. }