private void doTest() { // 3+5+9=17 assertTrue(solver.solve(new int[] {3, 5, 7, 9, 11}, 17)); // Lukt niet assertFalse(solver.solve(new int[] {2, 4}, 5)); // E�n te weinig assertFalse(solver.solve(new int[] {1, 1, 2, 2, 3, 3, 4, 4, 5, 5}, 31)); // Precies goed assertTrue(solver.solve(new int[] {1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5}, 31)); }
public static void main(String[] args) throws Exception { Solver problem = new Solver(GameState.INITIAL_BOARD); File outFile = new File("output.txt"); PrintWriter output = new PrintWriter(outFile); problem.solve(output); output.close(); }
/** The main class */ public static void main(String[] args) { try { solve(args); } catch (IOException e) { e.printStackTrace(); } }
public TestSolver(String fileName) { File file = new File(fileName); String row; Scanner s; Map map; int cols, rows, rowLength = 0; try { s = new Scanner(file).useDelimiter("\n"); rows = Integer.parseInt(s.next()); cols = Integer.parseInt(s.next()); map = new Map(rows, cols); for (int i = 0; i < rows; i++) { row = s.next(); System.out.println(row); rowLength = row.length(); if (rowLength < cols) { for (int j = 0; j < (cols - rowLength); j++) { row += " "; } } map.insertRow(row, i); } solver = new Solver(map); System.out.println(solver.solve()); } catch (FileNotFoundException e) { System.out.println("File not found."); } }
public static void main(String[] args) { InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); Solver solver = new Solver(); solver.solve(1, in, out); out.close(); }
public static void main(String[] args) { InputReader in = new InputReader(System.in); OutputWriter out = new OutputWriter(System.out); Solver solver = new Solver(in, out); solver.solve(); in.close(); out.flush(); out.close(); }
public static void main(String[] args) { try { Solver solver = new Solver(); solver.setup(args); solver.solve(); solver.writeOutput(); } catch (Exception e) { e.printStackTrace(); } }
@Test public void solve3x4() { final Puzzle puzzle = new Puzzle(3, 4).set(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0); final Solver solver = new AStarSolver(); final Solution solution = solver.solve(puzzle); assertNotNull(solution); assertEquals(27, solution.steps()); System.out.printf( " A*, 3x4, %2s steps, %9s expansions\n", solution.steps(), solver.expansions()); }
@Test public void solve3x3Hardest() { final Puzzle puzzle = new Puzzle(3).set(8, 7, 6, 0, 4, 1, 2, 5, 3); final Solver solver = new AStarSolver(); solver.setHeuristic(WalkingDistanceHeuristic.instance()); final Solution solution = solver.solve(puzzle); assertNotNull(solution); assertEquals(31, solution.steps()); System.out.printf( " A*, 3x3, %2s steps, %9s expansions\n", solution.steps(), solver.expansions()); }
@Test public void solve4x4() { final Puzzle puzzle = new Puzzle(4, 4).shuffle(500, 0); final Solver solver = new AStarSolver(); solver.setHeuristic(WalkingDistanceHeuristic.instance()); final Solution solution = solver.solve(puzzle); assertNotNull(solution); assertEquals(46, solution.steps()); System.out.printf( " A*, 4x4, %2s steps, %9s expansions\n", solution.steps(), solver.expansions()); }
@Test public void solve5x3() { final Puzzle puzzle = new Puzzle(5, 3).set(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0); final Solver solver = new AStarSolver(); solver.setHeuristic(WalkingDistanceHeuristic.instance()); final Solution solution = solver.solve(puzzle); assertNotNull(solution); assertEquals(42, solution.steps()); System.out.printf( " A*, 5x3, %2s steps, %9s expansions\n", solution.steps(), solver.expansions()); }
public static int solveLab(String fileName, boolean showInfo) { try { int ans; if (showInfo) { Reader reader = new Reader(fileName); Lab labIn = reader.readLab(); System.out.println("------------------"); System.out.println("Input Labyrinth:"); System.out.println("------------------"); labIn.showLab(); Solver solver = new Solver(labIn); ans = solver.solve(); if (ans < 0) { System.out.println("Finish point is not reachable from start point"); } else { System.out.println("-----------------------------"); System.out.print("The shortest path length: "); System.out.println(ans); System.out.println("The shortest path:"); System.out.println("-----------------------------"); labIn.setAnswer(solver.findPath()); labIn.showLabWithAnswer(); } } else { Reader reader = new Reader(fileName); Lab labIn = reader.readLab(); Solver solver = new Solver(labIn); ans = solver.solve(); } return ans; } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("Problem solving failed\n"); return 0; } }
@Test public void solve2x2() { final Puzzle puzzle = new Puzzle(2, 2) .set( 2, 0, 3, 1); final Solver solver = new AStarSolver(); final Solution solution = solver.solve(puzzle); assertNotNull(solution); assertEquals(3, solution.steps()); System.out.printf( " A*, 2x2, %2s steps, %9s expansions\n", solution.steps(), solver.expansions()); }
public static void main(String[] args) { try { // Parse input and set up ProjectParams pp = ProjectParams.fromStdIn(); // System.out.println(pp.getTeams()); // System.out.println(pp); Solver solver = new Solver(pp); // System.out.println(solver + "\n"); // Solve and print solver.solve(); solver.printSolution(); } catch (IOException e) { System.err.println("Error reading data from stdin\n"); e.printStackTrace(); } }
@Override public BasicSudokoDTO createSudokoBoard(BasicSudokoDTO sudoko) { Board sudokoBoard = sudokoBoardRepository.getBoard(sequencer.next()); sudokoBoard.create(sudoko.getSudokoBoardAsString()); boolean isValidBoard = solver.isValid(sudokoBoard.getSolutionArray()); if (isValidBoard) { Boolean solutionExist = solver.solve(sudokoBoard.getSolutionArray()); if (solutionExist) { sudokoBoard.setHavingSolution(solutionExist); sudoko.setIsValidBoard(isValidBoard); sudokoBoard.setChached(Boolean.TRUE); sudoko.setId(sudokoBoard.getId()); } } if (!sudoko.getIsValidBoard()) { throw new NotValidBoardException(sudoko.getSudokoBoardAsString()); } return sudoko; }
/** * The main method. Sets stdin to a file if local testing flag is set * * @param args */ public static void main(String[] args) { /* Populate initial world state */ // String filename = "test.txt"; // String filename = "bigTest"; // String filename = "real-students.txt"; String filename = "remove_students"; // String filename = "add_times"; if (localTesting) { try { System.setIn(new FileInputStream(filename)); } catch (FileNotFoundException e) { } } Solver s = null; if (args.length != 0) { s = new Solver(Integer.parseInt(args[0]) * 1000); } else { s = new Solver(); } s.solve(); }
/** * @param args * @throws AWTException */ public static void main(String[] args) { Robot robot; // the size of a square on the board int cubeSize = 40; // the size of the sample to determine a gem's colour int sampleSize = 4; // the position of the top left of the board (in screen coordinates) int gameLeft = 507; int gameTop = 345; // game length (in milliseconds) long gameLength = 63 * 1000; // the maximum number of times (in a row) there can be no moves to make long noMoveCutoff = 5; // the maximum number of gems to move at the same time int maxMovesPerRound = 10; // save screenshots to disk boolean saveScreenshots = false; // the extent of the game board Rectangle gameRectangle = new Rectangle(gameLeft, gameTop, cubeSize * 8, cubeSize * 8); // the robot will move the mouse and perform clicks try { robot = new Robot(); } catch (AWTException e) { e.printStackTrace(); return; } final GameKeyListener frame = new GameKeyListener("Bejeweled AI Player"); JOptionPane.showConfirmDialog(frame, "Press yes to start..."); try { Thread.sleep(3500); } catch (Exception e) { } BufferedImage gameScreenshot; Board board = new Board(cubeSize, sampleSize); Move nextMove; // the gem colours are stored in a 2D array int[][] boardGems; // counts the number of times (in a row) no move has been available int noMoveCount = 0; // the number of screenshots saved to disk int screenshotCount = 0; long startTime = System.currentTimeMillis(); long endTime = startTime + gameLength; while (System.currentTimeMillis() < endTime) { if (noMoveCount > (noMoveCutoff - 1)) { System.out.println(noMoveCutoff + " no-move rounds in a row...exiting!"); System.exit(0); return; } // take a screenshot of the screen gameScreenshot = robot.createScreenCapture(gameRectangle); if (saveScreenshots) { File outputfile = new File("screenshot" + screenshotCount + ".jpg"); try { ImageIO.write(gameScreenshot, "jpg", outputfile); screenshotCount++; } catch (IOException e) { e.printStackTrace(); } } // figure out the positions of the gems on the board boardGems = board.getBoardGemColors(gameScreenshot); try { // calculate the best moves to make LinkedList<Move> moves = Solver.solve(boardGems); if (moves.size() > 0) { // Reset no-move counter noMoveCount = 0; int movesToMake = Math.min(moves.size(), maxMovesPerRound); for (int i = 0; i < movesToMake; i++) { nextMove = moves.get(i); robot.mouseMove( gameLeft + cubeSize / 2 + cubeSize * nextMove.x1, gameTop + cubeSize / 2 + cubeSize * nextMove.y1); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.mouseMove( gameLeft + cubeSize / 2 + cubeSize * nextMove.x2, gameTop + cubeSize / 2 + cubeSize * nextMove.y2); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); } } } catch (NoMoveException e) { System.out.println("ERROR: No move."); noMoveCount++; try { Thread.sleep(600); } catch (Exception e2) { } } java.awt.EventQueue.invokeLater( new Runnable() { @Override public void run() { frame.toFront(); frame.repaint(); } }); try { // Pause a bit to let the game catch up! Thread.sleep(300); } catch (Exception e) { } } System.exit(0); }
public static void main(String[] args) throws Exception { Relation x0 = Relation.unary("Int/min"); Relation x1 = Relation.unary("Int/zero"); Relation x2 = Relation.unary("Int/max"); Relation x3 = Relation.nary("Int/next", 2); Relation x4 = Relation.unary("seq/Int"); Relation x5 = Relation.unary("String"); Relation x6 = Relation.unary("this/A"); Relation x7 = Relation.unary("this/Relation"); Relation x8 = Relation.nary("this/Relation.r", 4); List<String> atomlist = Arrays.asList( "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "0", "1", "2", "3", "4", "5", "6", "7", "A$0", "A$1", "A$2", "Relation$0", "unused0", "unused1"); Universe universe = new Universe(atomlist); TupleFactory factory = universe.factory(); Bounds bounds = new Bounds(universe); TupleSet x0_upper = factory.noneOf(1); x0_upper.add(factory.tuple("-8")); bounds.boundExactly(x0, x0_upper); TupleSet x1_upper = factory.noneOf(1); x1_upper.add(factory.tuple("0")); bounds.boundExactly(x1, x1_upper); TupleSet x2_upper = factory.noneOf(1); x2_upper.add(factory.tuple("7")); bounds.boundExactly(x2, x2_upper); TupleSet x3_upper = factory.noneOf(2); x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); bounds.boundExactly(x3, x3_upper); TupleSet x4_upper = factory.noneOf(1); x4_upper.add(factory.tuple("0")); x4_upper.add(factory.tuple("1")); x4_upper.add(factory.tuple("2")); bounds.boundExactly(x4, x4_upper); TupleSet x5_upper = factory.noneOf(1); bounds.boundExactly(x5, x5_upper); TupleSet x6_upper = factory.noneOf(1); x6_upper.add(factory.tuple("A$0")); x6_upper.add(factory.tuple("A$1")); x6_upper.add(factory.tuple("A$2")); bounds.boundExactly(x6, x6_upper); TupleSet x7_upper = factory.noneOf(1); x7_upper.add(factory.tuple("unused0")); x7_upper.add(factory.tuple("unused1")); x7_upper.add(factory.tuple("Relation$0")); bounds.bound(x7, x7_upper); TupleSet x8_upper = factory.noneOf(4); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("unused1") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$0")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$1")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$0")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$1")) .product(factory.tuple("A$2"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$0"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$1"))); x8_upper.add( factory .tuple("Relation$0") .product(factory.tuple("A$2")) .product(factory.tuple("A$2")) .product(factory.tuple("A$2"))); bounds.bound(x8, x8_upper); bounds.boundExactly(-8, factory.range(factory.tuple("-8"), factory.tuple("-8"))); bounds.boundExactly(-7, factory.range(factory.tuple("-7"), factory.tuple("-7"))); bounds.boundExactly(-6, factory.range(factory.tuple("-6"), factory.tuple("-6"))); bounds.boundExactly(-5, factory.range(factory.tuple("-5"), factory.tuple("-5"))); bounds.boundExactly(-4, factory.range(factory.tuple("-4"), factory.tuple("-4"))); bounds.boundExactly(-3, factory.range(factory.tuple("-3"), factory.tuple("-3"))); bounds.boundExactly(-2, factory.range(factory.tuple("-2"), factory.tuple("-2"))); bounds.boundExactly(-1, factory.range(factory.tuple("-1"), factory.tuple("-1"))); bounds.boundExactly(0, factory.range(factory.tuple("0"), factory.tuple("0"))); bounds.boundExactly(1, factory.range(factory.tuple("1"), factory.tuple("1"))); bounds.boundExactly(2, factory.range(factory.tuple("2"), factory.tuple("2"))); bounds.boundExactly(3, factory.range(factory.tuple("3"), factory.tuple("3"))); bounds.boundExactly(4, factory.range(factory.tuple("4"), factory.tuple("4"))); bounds.boundExactly(5, factory.range(factory.tuple("5"), factory.tuple("5"))); bounds.boundExactly(6, factory.range(factory.tuple("6"), factory.tuple("6"))); bounds.boundExactly(7, factory.range(factory.tuple("7"), factory.tuple("7"))); Variable x12 = Variable.unary("this"); Decls x11 = x12.oneOf(x7); Expression x16 = x12.join(x8); Expression x18 = x6.product(x6); Expression x17 = x6.product(x18); Formula x15 = x16.in(x17); Variable x21 = Variable.unary("x21"); Decls x20 = x21.oneOf(x6); Expression x25 = x21.join(x16); Expression x26 = x6.product(x6); Formula x24 = x25.in(x26); Variable x29 = Variable.unary("x29"); Decls x28 = x29.oneOf(x6); Expression x32 = x29.join(x25); Formula x31 = x32.one(); Formula x33 = x32.in(x6); Formula x30 = x31.and(x33); Formula x27 = x30.forAll(x28); Formula x23 = x24.and(x27); Variable x36 = Variable.unary("x36"); Decls x35 = x36.oneOf(x6); Expression x38 = x25.join(x36); Formula x37 = x38.in(x6); Formula x34 = x37.forAll(x35); Formula x22 = x23.and(x34); Formula x19 = x22.forAll(x20); Formula x14 = x15.and(x19); Variable x42 = Variable.unary("x42"); Decls x41 = x42.oneOf(Expression.UNIV); Variable x45 = Variable.unary("x45"); Decls x44 = x45.oneOf(Expression.UNIV); Decls x40 = x41.and(x44); Expression x50 = x42.product(x45); Expression x51 = x6.product(x6); Formula x49 = x50.in(x51); Variable x54 = Variable.unary("x54"); Decls x53 = x54.oneOf(x6); Expression x57 = x54.join(x50); Formula x56 = x57.one(); Formula x58 = x57.in(x6); Formula x55 = x56.and(x58); Formula x52 = x55.forAll(x53); Formula x48 = x49.and(x52); Variable x61 = Variable.unary("x61"); Decls x60 = x61.oneOf(x6); Expression x63 = x50.join(x61); Formula x62 = x63.in(x6); Formula x59 = x62.forAll(x60); Formula x47 = x48.and(x59); Expression x66 = x16.join(x45); Expression x65 = x66.join(x42); Formula x64 = x65.in(x6); Formula x46 = x47.implies(x64); Formula x39 = x46.forAll(x40); Formula x13 = x14.and(x39); Formula x10 = x13.forAll(x11); Expression x70 = x8.join(Expression.UNIV); Expression x69 = x70.join(Expression.UNIV); Expression x68 = x69.join(Expression.UNIV); Formula x67 = x68.in(x7); Formula x71 = x0.eq(x0); Formula x72 = x1.eq(x1); Formula x73 = x2.eq(x2); Formula x74 = x3.eq(x3); Formula x75 = x4.eq(x4); Formula x76 = x5.eq(x5); Formula x77 = x6.eq(x6); Formula x78 = x7.eq(x7); Formula x79 = x8.eq(x8); Formula x9 = Formula.compose(FormulaOperator.AND, x10, x67, x71, x72, x73, x74, x75, x76, x77, x78, x79); Solver solver = new Solver(); solver.options().setSolver(SATFactory.DefaultSAT4J); solver.options().setBitwidth(4); solver.options().setFlatten(false); solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); solver.options().setSymmetryBreaking(20); solver.options().setSkolemDepth(0); System.out.println(PrettyPrinter.print(x9, 0)); System.out.println(bounds); System.out.println("Solving..."); System.out.flush(); Solution sol = solver.solve(x9, bounds); System.out.println(sol.toString()); Instance inst = sol.instance(); Evaluator ev = new Evaluator(inst); System.out.println("Universe: " + ev.evaluate(Expression.UNIV)); Formula xx = x46.forAll(x40).forAll(x11); System.out.println(PrettyPrinter.print(xx, 2)); System.out.println(ev.evaluate(xx)); System.out.println(PrettyPrinter.print(x46, 4)); // Variable r = Variable.unary("this"); // Variable u1 = Variable.unary("u1"); // Variable u2 = Variable.unary("u2"); // // Formula ff = // u1.product(u2).in(x6.product(x6)).forAll(u1.oneOf(Expression.UNIV).and(u2.oneOf(Expression.UNIV))).forAll(r.oneOf(x7)); // System.out.println(PrettyPrinter.print(ff, 0)); // System.out.println(ev.evaluate(ff)); }