/// <summary> /// Application entry point. /// </summary> /// <param name="args">Application arguments.</param> public static void Main(string[] args) { var size = Properties.Settings.Default.GridSize; var initialBlackSquares = GetInitialBlackSquares(); var rowClues = GetClues(Properties.Settings.Default.Rows); var colClues = GetClues(Properties.Settings.Default.Columns); var solver = new GridSolver(); solver.Initialize(size, initialBlackSquares, rowClues, colClues); solver.PrintGrid(); Console.WriteLine("Performing initial analysis"); foreach (var analysis in solver.InitialAnalysis()) { Console.WriteLine(analysis); } solver.PrintGrid(); var foundCells = 0; var lastFoundCells = 0; do { lastFoundCells = foundCells; foundCells = ReduceAndResolve(solver); } while (foundCells != lastFoundCells); var permutations = solver.EvaluateRemainingPermutations(); Console.WriteLine($"Permutations remaining: {permutations}"); var reductionSolved = solver.ReducePermutations(); var validateSolved = solver.ValidatePermutations(); var foundCommonCells = solver.EvaluateCommonCells(); Console.WriteLine($"Sequences solved by reduction: {reductionSolved}"); Console.WriteLine($"Sequences solved by validation: {validateSolved}"); Console.WriteLine($"Common cells found: {foundCommonCells}"); solver.PrintGrid(); Console.ReadLine(); }