Example #1
0
 /**
  * 13 rows keyboard input (4 supporting) - 0 or '.' as empty cell.
  * Any other character is being filtered out.
  *
  * @see SudokuStore#loadBoardFromStrings(String...)
  * @see SudokuStore#loadBoard(String[])
  */
 private void inputPuzzleFromKeyboard13rows()
 {
     JanetConsole.println("You will be asked for inputting 13 rows (4 supporting).");
     JanetConsole.print("Row  1/13: "); String r1  = JanetConsole.readLine();
     JanetConsole.print("Row  2/13: "); String r2  = JanetConsole.readLine();
     JanetConsole.print("Row  3/13: "); String r3  = JanetConsole.readLine();
     JanetConsole.print("Row  4/13: "); String r4  = JanetConsole.readLine();
     JanetConsole.print("Row  5/13: "); String r5  = JanetConsole.readLine();
     JanetConsole.print("Row  6/13: "); String r6  = JanetConsole.readLine();
     JanetConsole.print("Row  7/13: "); String r7  = JanetConsole.readLine();
     JanetConsole.print("Row  8/13: "); String r8  = JanetConsole.readLine();
     JanetConsole.print("Row  9/13: "); String r9  = JanetConsole.readLine();
     JanetConsole.print("Row 10/13: "); String r10 = JanetConsole.readLine();
     JanetConsole.print("Row 11/13: "); String r11 = JanetConsole.readLine();
     JanetConsole.print("Row 12/13: "); String r12 = JanetConsole.readLine();
     JanetConsole.print("Row 13/13: "); String r13 = JanetConsole.readLine();
     int[,] parsedPuzzle = SudokuStore.loadBoardFromStrings(r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13);
     if (parsedPuzzle != null)
     {
         trackPuzzleUndo();
         puzzle = parsedPuzzle;
     }
     else
     {
         JanetConsole.println(">>> !!! Error - incorrect puzzle definition !!! <<<");
     }
 }
Example #2
0
        /**
         * Load puzzle from file.
         * @see SudokuStore#loadBoard(String)
         */
        private void loadFromFile()
        {
            JanetConsole.print("File path: ");
            String   filePath = JanetConsole.readLine();
            FileInfo file     = new FileInfo(filePath);

            if (file.Exists == false)
            {
                JanetConsole.println(">>> !!! Error - file does not exist !!! <<<");
                return;
            }
            DirectoryInfo dir = new DirectoryInfo(filePath);

            if (dir.Exists == true)
            {
                JanetConsole.println(">>> !!! Error - not a file !!! <<<");
                return;
            }
            int[,] puzzleLoaded = SudokuStore.loadBoard(filePath);
            if (puzzleLoaded == null)
            {
                JanetConsole.println(">>> !!! Error - incorrect file content !!! <<<");
                return;
            }
            trackPuzzleUndo();
            puzzle = puzzleLoaded;
        }
Example #3
0
        /**
         * Solves current puzzle.
         *
         * @see SudokuSolver#findAllSolutions()
         */
        private void solveFindAll()
        {
            solver = new SudokuSolver(puzzle);
            setSolverOptions();
            int solutionsNumber = solver.findAllSolutions();

            JanetConsole.println(">>>>>>>> Solutions found: " + solutionsNumber);
            if (solutionsNumber > 0)
            {
                List <SudokuBoard> solutions = solver.getAllSolutionsList();
                for (int i = 0; i < solutionsNumber; i++)
                {
                    SudokuBoard solution = solutions[i];
                    JanetConsole.println(">>>>>    Solution nr: " + i + "/" + solutionsNumber);
                    JanetConsole.println(">>>>>        Path nr: " + solution.pathNumber);
                    JanetConsole.println(">>>>> Computing time: " + solver.getComputingTime() + " s.");
                    SudokuStore.consolePrintBoard(solution.board);
                    JanetConsole.println(">>>>>");
                    JanetConsole.println(">>>>> Hit enter o to continue (non empty line will cancel).");
                    String line = JanetConsole.readLine();
                    if (line.Length > 0)
                    {
                        break;
                    }
                }
            }
            else
            {
                JanetConsole.println(solver.getMessages());
            }
        }
Example #4
0
 /**
  * Prints puzzle examples identifiers along with difficulty rating.
  */
 private void listPuzzleExamples()
 {
     JanetConsole.println("");
     for (int i = 0; i < SudokuPuzzles.NUMBER_OF_PUZZLE_EXAMPLES; i++)
     {
         JanetConsole.println(">>> Example nr: " + i + ", rating = " + (int)SudokuPuzzles.getPuzzleExampleRating(i));
     }
     JanetConsole.println("");
 }
Example #5
0
 /*
  * ========================================
  *               Quit from app
  * ========================================
  */
 /**
  * Displays info on app quit.
  */
 private void quitFromApp()
 {
     JanetConsole.println(">>>");
     JanetConsole.println(">>>                        Thank you for using Janet-Sudoku!");
     JanetConsole.println(">>>");
     JanetConsole.println(">>>                                            Please visit:");
     JanetConsole.println(">>>                    http://janetsudoku.mariuszgromada.org");
     JanetConsole.println(">>>                                    http://mathparser.org");
     JanetConsole.println(">>>                                      http://mathspace.pl");
     JanetConsole.println(">>>");
     JanetConsole.println(">>>                                          Mariusz Gromada");
     JanetConsole.println(">>>                             [email protected]");
 }
Example #6
0
 /*
  * ========================================
  *              About info
  * ========================================
  */
 /**
  * Displays info about this app.
  */
 private void displayAboutInto()
 {
     JanetConsole.println(">>>");
     JanetConsole.println(">>> Janet-Sudoku Demo App based on the Janet-Sudoku Library.");
     JanetConsole.println(">>>");
     JanetConsole.println(">>>                                  Author: Mariusz Gromada");
     JanetConsole.println(">>>                             [email protected]");
     JanetConsole.println(">>>                    http://janetsudoku.mariuszgromada.org");
     JanetConsole.println(">>>");
     JanetConsole.println(">>>                                Demo App version: v." + VERSION);
     JanetConsole.println(">>>                            Janet-Sudoku version: v." + SudokuStore.JANET_SUDOKU_VERSION);
     JanetConsole.println(">>>");
 }
Example #7
0
 /**
  * Prints menu to the console.
  */
 internal void consolePrintMenue()
 {
     janetSudoku.consolePrintPuzzle();
     JanetConsole.println();
     JanetConsole.println("----- " + title + " -----");
     for (int i = 3; i <= itemsNum; i++)
     {
         JanetConsole.println(content[i]);
     }
     JanetConsole.println("----- " + "General" + " -----");
     JanetConsole.println(content[1]);
     JanetConsole.println(content[2]);
     JanetConsole.println(content[0]);
 }
Example #8
0
 /**
  * Generates puzzle based on current puzzle
  * (different puzzle, same solution).
  *
  * @see SudokuGenerator
  * @see SudokuGenerator#PARAM_DO_NOT_TRANSFORM
  * @see SudokuGenerator#generate()
  */
 private void generateFromCurrentPuzzle()
 {
     generator = new SudokuGenerator(puzzle, SudokuGenerator.PARAM_DO_NOT_TRANSFORM);
     setGeneratorOptions();
     int[,] generated = generator.generate();
     if (generator.getGeneratorState() == SudokuGenerator.GENERATOR_GEN_FINISHED)
     {
         trackPuzzleUndo();
         puzzle = generated;
     }
     else
     {
         JanetConsole.println(">>> !!! Error while generating puzzle !!! <<<");
         JanetConsole.println(generator.getMessages());
     }
 }
Example #9
0
        /**
         * Rate puzzle difficulty meaning as number of closed routes (number of
         * wrong guesses).
         *
         * @see SudokuStore#calculatePuzzleRating(int[,])
         */
        private void ratePuzzleDifficulty()
        {
            int rating = SudokuStore.calculatePuzzleRating(puzzle);

            if (rating >= 0)
            {
                JanetConsole.println(">>>");
                JanetConsole.println(">>> Puzzle rating: " + rating);
                JanetConsole.println(">>>");
            }
            else
            {
                JanetConsole.println(">>> !!! Error code: " + rating + " !!! <<<");
                JanetConsole.println(">>> " + ErrorCodes.getErrorDescription(rating));
            }
        }
Example #10
0
        /**
         * One line keyboard input (81 characters)
         * 0 or '.' as empty cell.
         *
         * @see SudokuStore#loadBoardFromStringLine(String)
         */
        private void inputPuzzleFromKeyboard1Line()
        {
            JanetConsole.print("One line definition: ");
            String line = JanetConsole.readLine();

            int[,] parsedPuzzle = SudokuStore.loadBoardFromStringLine(line);
            if (parsedPuzzle != null)
            {
                trackPuzzleUndo();
                puzzle = parsedPuzzle;
            }
            else
            {
                JanetConsole.println(">>> !!! Error - incorrect puzzle definition !!! <<<");
            }
        }
Example #11
0
 /**
  * Generates random puzzle with unique solution.
  *
  * @see SudokuGenerator
  * @see SudokuGenerator#PARAM_GEN_RND_BOARD
  * @see SudokuGenerator#generate()
  */
 private void generateRandomPuzzle()
 {
     generator = new SudokuGenerator(SudokuGenerator.PARAM_GEN_RND_BOARD);
     setGeneratorOptions();
     int[,] generated = generator.generate();
     if (generator.getGeneratorState() == SudokuGenerator.GENERATOR_GEN_FINISHED)
     {
         trackPuzzleUndo();
         puzzle = generated;
     }
     else
     {
         JanetConsole.println(">>> !!! Error while generating random puzzle !!! <<<");
         JanetConsole.println(generator.getMessages());
     }
 }
Example #12
0
        /**
         * Load puzzle from provided puzzle examples.
         * @see SudokuPuzzles
         * @see SudokuStore#getPuzzleExample(int)
         */
        private void loadFromExample()
        {
            JanetConsole.println();
            JanetConsole.print("Please provide example number (between 0 and " + (SudokuPuzzles.NUMBER_OF_PUZZLE_EXAMPLES - 1) + "): ");
            int example = JanetConsole.readInt();

            if ((example >= 0) && (example < SudokuPuzzles.NUMBER_OF_PUZZLE_EXAMPLES))
            {
                JanetConsole.println("Loading example: " + example);
                trackPuzzleUndo();
                puzzle = SudokuStore.boardCopy(SudokuStore.getPuzzleExample(example));
            }
            else
            {
                JanetConsole.println(">>> !!! Incorrect example number !!! <<<");
            }
        }
Example #13
0
        /*
         * ========================================
         *              Save Menu
         * ========================================
         */
        /**
         * Saves current puzzle in the txt file.
         *
         * @see SudokuStore#saveBoard(int[,], String)
         */
        private void savePuzzle()
        {
            JanetConsole.print("File path: ");
            String        filePath = JanetConsole.readLine();
            FileInfo      file     = new FileInfo(filePath);
            DirectoryInfo dir      = new DirectoryInfo(filePath);

            if ((file.Exists == true) || (dir.Exists == true))
            {
                JanetConsole.println(">>> !!! Error - file already exists !!! <<<");
                return;
            }
            bool puzzleSaved = SudokuStore.saveBoard(puzzle, filePath);

            if (puzzleSaved == false)
            {
                JanetConsole.println(">>> !!! Error while saving !!! <<<");
            }
        }
Example #14
0
 /**
  * Solves current puzzle.
  *
  * @see SudokuSolver#solve()
  * @see SudokuSolver#getSolvedBoard()
  * @see SudokuSolver#getSolvingState()
  */
 private void solveFindFirst()
 {
     solver = new SudokuSolver(puzzle);
     setSolverOptions();
     solver.solve();
     if (solver.getSolvingState() == SudokuSolver.SOLVING_STATE_SOLVED)
     {
         trackPuzzleUndo();
         puzzle = solver.getSolvedBoard();
         JanetConsole.println("Path leading to the solution:");
         JanetConsole.println(solver.solutionPathToString());
         JanetConsole.println(">>>>> Computing time: " + solver.getComputingTime() + " s.");
         JanetConsole.println(">>>>>  Closed routes: " + solver.getClosedRoutesNumber() + " s.");
     }
     else
     {
         JanetConsole.println(solver.getMessages());
     }
 }
Example #15
0
        /**
         * Ask user for menu item selection.
         * @return  Select item id {@link MenuData}.
         *
         * @see MenuData
         */
        internal int getItem()
        {
            int  selItem = 0;
            bool loop    = true;

            do
            {
                consolePrintMenue();
                JanetConsole.println();
                JanetConsole.print("Your selection: ");
                selItem = JanetConsole.readInt();
                if ((selItem >= 0) && (selItem <= itemsNum))
                {
                    loop = false;
                }
                else
                {
                    JanetConsole.println(">>> !!! Please select correct menu item. !!! <<<");
                }
            } while (loop == true);
            return(selItem);
        }
Example #16
0
 /**
  * Manually sets cell value.
  */
 private void setCell()
 {
     JanetConsole.print("   Row number (between 1 and 9): "); int row = JanetConsole.readInt();
     if ((row < 1) || (row > 9))
     {
         JanetConsole.println(">>> !!! Error - incorrect row number !!! <<<");
         return;
     }
     JanetConsole.print("Column number (between 1 and 9): "); int col = JanetConsole.readInt();
     if ((col < 1) || (col > 9))
     {
         JanetConsole.println(">>> !!! Error - incorrect column number !!! <<<");
         return;
     }
     JanetConsole.print("        Digit (between 0 and 9): "); int digit = JanetConsole.readInt();
     if ((digit < 0) || (digit > 9))
     {
         JanetConsole.println(">>> !!! Error - incorrect digit !!! <<<");
         return;
     }
     trackPuzzleUndo();
     puzzle[row - 1, col - 1] = digit;
 }
Example #17
0
 /**
  * 9 rows keyboard input - 0 or '.' as empty cell.
  * Any other character is being filtered out.
  *
  * @see SudokuStore#loadBoardFromStrings(String...)
  * @see SudokuStore#loadBoard(String[])
  */
 private void inputPuzzleFromKeyboard9rows()
 {
     JanetConsole.println("You will be asked for inputting 9 rows.");
     JanetConsole.print("Row 1/9: "); String r1 = JanetConsole.readLine();
     JanetConsole.print("Row 2/9: "); String r2 = JanetConsole.readLine();
     JanetConsole.print("Row 3/9: "); String r3 = JanetConsole.readLine();
     JanetConsole.print("Row 4/9: "); String r4 = JanetConsole.readLine();
     JanetConsole.print("Row 5/9: "); String r5 = JanetConsole.readLine();
     JanetConsole.print("Row 6/9: "); String r6 = JanetConsole.readLine();
     JanetConsole.print("Row 7/9: "); String r7 = JanetConsole.readLine();
     JanetConsole.print("Row 8/9: "); String r8 = JanetConsole.readLine();
     JanetConsole.print("Row 9/9: "); String r9 = JanetConsole.readLine();
     int[,] parsedPuzzle = SudokuStore.loadBoardFromStrings(r1, r2, r3, r4, r5, r6, r7, r8, r9);
     if (parsedPuzzle != null)
     {
         trackPuzzleUndo();
         puzzle = parsedPuzzle;
     }
     else
     {
         JanetConsole.println(">>> !!! Error - incorrect puzzle definition !!! <<<");
     }
 }
Example #18
0
        /**
         * Verifies solution existence
         *
         * @see SudokuSolver#checkIfUniqueSolution()
         */
        private void evaluateSolutions()
        {
            solver = new SudokuSolver(puzzle);
            int solutionsInfo = solver.checkIfUniqueSolution();

            JanetConsole.println(">>>");
            if (solutionsInfo == SudokuSolver.SOLUTION_UNIQUE)
            {
                JanetConsole.println(">>> Solution exists and is unique!");
            }
            else if (solutionsInfo == SudokuSolver.SOLUTION_NON_UNIQUE)
            {
                JanetConsole.println(">>> Solution exists but is non-unique!");
            }
            else if (solutionsInfo == SudokuSolver.SOLUTION_NOT_EXISTS)
            {
                JanetConsole.println(">>> Solution does not exists.");
            }
            else
            {
                JanetConsole.println(solver.getMessages());
            }
            JanetConsole.println(">>> Computing time: " + solver.getComputingTime() + " s.");
        }
Example #19
0
 /**
  * Error - when incorrect selection.
  */
 private void incorrectSelection()
 {
     JanetConsole.println("Error - unrecognized menu item.");
 }
Example #20
0
 /**
  * Print current puzzle to the console
  */
 internal void consolePrintPuzzle()
 {
     JanetConsole.println();
     JanetConsole.print(">>> Random seed option - empty cells = " + rndSeedOnCells + ", free digits = " + rndSeedOnDigits);
     SudokuStore.consolePrintBoard(puzzle);
 }