Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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;
            }
        }