32 typedef typename compositor_t::function function_t;
35 std::vector<T> board(
static_cast<std::size_t
>(n), T(- 1));
39 symbol_table_t symbol_table;
40 symbol_table.add_constant(
"n" , n );
41 symbol_table.add_vector (
"board" , board);
42 symbol_table.add_package (io_package);
44 compositor_t compositor(symbol_table);
46 compositor.load_variables(
true);
47 compositor.load_vectors (
true);
50 function_t(
"display_board")
53 " for (var row := 0; row < n; row += 1) "
55 " for (var col := 0; col < n; col += 1) "
57 " print((board[row] == col) ? ' Q ' : ' . '); "
65 function_t(
"is_valid")
69 " for (var i := 0; i < row; i += 1) "
72 " (board[i] == col) or "
73 " (abs(board[i] - col) == abs(i - row)) "
84 function_t(
"solve_nqueens")
93 " for (var col := 0; col < n; col += 1) "
95 " if (is_valid(row, col)) "
97 " board[row] := col; "
99 " if (solve_nqueens(row + 1)) "
109 const std::string sudoku_solver_program =
110 " if (solve_nqueens(0)) "
112 " println('N-Queens Puzzle Solved!'); "
116 " println('Error: Failed to solve n-queens puzzle.'); "
119 " display_board(); ";
121 expression_t expression;
122 expression.register_symbol_table(symbol_table);
125 parser.compile(sudoku_solver_program,expression);