private static void Encode() { sudokuFileNames = Directory.GetFiles(inDirectory).Select(f => Path.GetFileNameWithoutExtension(f)).ToArray(); sudokus = Sudoku.FromDirectory(inDirectory).Select(s => new SudokuCont(s)).ToArray(); Console.WriteLine($"Loaded {sudokus.Length} sudokus"); if (!Directory.Exists(cnfDirectory)) { Directory.CreateDirectory(cnfDirectory); } for (int i = 0; i < sudokus.Length; i++) { Console.WriteLine($"Writing ${sudokuFileNames[i]} as cnf..."); SudokuCont s = sudokus[i]; string cnf_pairwise = s.Pairwise.ToDIMACS(); string cnf_ladder = s.Ladder.ToDIMACS(); Console.WriteLine($" Pairwise size: ({s.Pairwise.VariableCount}, {s.Pairwise.Sentence.Count})"); Console.WriteLine($" Ladder size : ({s.Ladder.VariableCount}, {s.Ladder.Sentence.Count})"); string pairwiseFile = $"{cnfDirectory}\\{sudokuFileNames[i]}_pairwise.cnf"; string ladderFile = $"{cnfDirectory}\\{sudokuFileNames[i]}_ladder.cnf"; File.WriteAllText(pairwiseFile, cnf_pairwise); File.WriteAllText(ladderFile, cnf_ladder); } }
private static void Decode() { string[] resultFiles = Directory.GetFiles(solutionDirectory); Console.WriteLine($"Found {resultFiles.Length} results"); for (int i = 0; i < resultFiles.Length; i++) { Console.WriteLine("--------------------------------------------------------------"); if (resultFiles[i].Contains("ladder")) { continue; } int sudokuIndex = i / 2; SudokuCont sudoku = sudokus[sudokuIndex]; string[] lines = File.ReadAllLines(resultFiles[i]); int nanos = int.Parse(lines[0]); if (lines.Length == 2) { Console.WriteLine($"No solution found for {sudokuFileNames[sudokuIndex]} : {Path.GetFileNameWithoutExtension(resultFiles[i])}"); continue; } Console.WriteLine($"Solved sudoku: {Path.GetFileNameWithoutExtension(resultFiles[i])}"); Console.WriteLine($" Pairwise encoding size : ({sudoku.Pairwise.VariableCount}, {sudoku.Pairwise.Sentence.Count})"); Console.WriteLine($" Ladder encoding size : ({sudoku.Ladder.VariableCount}, {sudoku.Ladder.Sentence.Count})"); Console.WriteLine($" Sudoku solve time : {nanos / 1000000} milliseconds"); //Console.WriteLine("\nOriginal sudoku:"); //Console.WriteLine(sudoku.Sudoku); Sudoku solved = GetSudokuFromResult(sudoku.Sudoku, lines); //Console.WriteLine("\nSolved sudoku:"); //Console.WriteLine(solved); Console.WriteLine("\n"); Console.WriteLine("--------------------------------------------------------------"); // break; } }