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.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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-dh")
  59. {
  60. nextCellChooser = new MrvNextCellChooser(new DhNextCellChooser());
  61. }
  62. else if (valueChooser == "mrv")
  63. {
  64. nextCellChooser = new MrvNextCellChooser(null);
  65. }
  66. else if (valueChooser == "dh")
  67. {
  68. nextCellChooser = new DhNextCellChooser();
  69. }
  70. else if (valueChooser == "basic")
  71. {
  72. nextCellChooser = new BasicNextCellChooser();
  73. }
  74. else
  75. {
  76. Console.Error.WriteLine("Invalid next value chooser");
  77. Environment.Exit(64);
  78. }
  79. INextNumberChooser nextNumberChooser = null;
  80. if (numberChooser == "basic")
  81. {
  82. nextNumberChooser = new BasicNextNumberChooser();
  83. }
  84. else if (numberChooser == "lcv")
  85. {
  86. nextNumberChooser = new LcvNextNumberChooser();
  87. }
  88. else
  89. {
  90. Console.Error.WriteLine("Invalid next number chooser");
  91. Environment.Exit(64);
  92. }
  93. var solver = new BacktrackSearch(nextCellChooser, nextNumberChooser);
  94. var resolved = solver.Resolve(board);
  95. if (resolved.Success)
  96. {
  97. Console.WriteLine("Resolved:");
  98. board.Print(Console.Out);
  99. }
  100. else
  101. {
  102. Console.WriteLine("Not resolved");
  103. }
  104. Console.WriteLine($"{resolved.TryCount} tries");
  105. Console.WriteLine($"{resolved.ConsistentTryCount} consistent tries");
  106. Console.WriteLine($"{resolved.Elapsed.TotalMilliseconds} ms");
  107. }
  108. }
  109. }