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 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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.NextNumberChoosers;
  6. using uqac_ia_sudoku_csp.Solver.NextValueChoosers;
  7. namespace uqac_ia_sudoku_csp
  8. {
  9. internal class Program
  10. {
  11. public static void Main(string[] args)
  12. {
  13. var generatorType = "-";
  14. if (args.Length > 0)
  15. {
  16. generatorType = args[0];
  17. }
  18. var valueChooser = "mrv";
  19. if (args.Length > 1)
  20. {
  21. valueChooser = args[1];
  22. }
  23. var numberChooser = "lcv";
  24. if (args.Length > 2)
  25. {
  26. numberChooser = args[2];
  27. }
  28. var emptyCharacters = "0 .";
  29. if (args.Length > 3)
  30. {
  31. emptyCharacters = args[3];
  32. }
  33. object data;
  34. IGenerator generator;
  35. var board = new Board("123456789");
  36. if (generatorType == "-")
  37. {
  38. generator = new StdInGenerator();
  39. data = emptyCharacters;
  40. }
  41. else if (generatorType == "0")
  42. {
  43. generator = new EmptyGenerator();
  44. data = null;
  45. }
  46. else
  47. {
  48. generator = new FileGenerator();
  49. data = new FileGeneratorDbo
  50. {
  51. EmptyCharacters = emptyCharacters,
  52. FilePath = generatorType
  53. };
  54. }
  55. generator.Generate(board, data);
  56. board.Print(Console.Out);
  57. INextCellChooser nextCellChooser = null;
  58. if (valueChooser == "mrv")
  59. {
  60. nextCellChooser = new MrvNextCellChooser();
  61. }
  62. else if (valueChooser == "dh")
  63. {
  64. nextCellChooser = new DhNextCellChooser();
  65. }
  66. else if (valueChooser == "basic")
  67. {
  68. nextCellChooser = new BasicNextCellChooser();
  69. }
  70. else
  71. {
  72. Console.Error.WriteLine("Invalid next value chooser");
  73. Environment.Exit(64);
  74. }
  75. INextNumberChooser nextNumberChooser = null;
  76. if (numberChooser == "basic")
  77. {
  78. nextNumberChooser = new BasicNextNumberChooser();
  79. }
  80. else if (numberChooser == "lcv")
  81. {
  82. nextNumberChooser = new LcvNextNumberChooser();
  83. }
  84. else
  85. {
  86. Console.Error.WriteLine("Invalid next number chooser");
  87. Environment.Exit(64);
  88. }
  89. var solver = new BacktrackSearch(nextCellChooser, nextNumberChooser);
  90. var resolved = solver.Resolve(board);
  91. if (resolved.Success)
  92. {
  93. Console.WriteLine("Resolved:");
  94. board.Print(Console.Out);
  95. }
  96. else
  97. {
  98. Console.WriteLine("Not resolved");
  99. }
  100. Console.WriteLine($"{resolved.TryCount} tries");
  101. Console.WriteLine($"{resolved.ConsistentTryCount} consistent tries");
  102. Console.WriteLine($"{resolved.Elapsed.TotalMilliseconds} ms");
  103. }
  104. }
  105. }