diff --git a/app/routes/main_routes.py b/app/routes/main_routes.py index 32d9fea..a1b71e7 100644 --- a/app/routes/main_routes.py +++ b/app/routes/main_routes.py @@ -178,7 +178,10 @@ def build_queens_trace(board_size): }) return True - for col in range(board_size): + candidate_columns = list(range(board_size)) + random.shuffle(candidate_columns) + + for col in candidate_columns: if not is_queen_position_safe(row, col): continue @@ -374,9 +377,14 @@ def check(): @main_bp.route("/solve") def solve_queens_route(): - """Return all queens solutions for the requested board size.""" + """Return one random queens solution for the requested board size.""" board_size = parse_board_size(request.args.get("size")) - return jsonify(solve_queens(board_size)) + queen_solutions = solve_queens(board_size) + + if not queen_solutions: + return jsonify([]) + + return jsonify(random.choice(queen_solutions)) @main_bp.route("/solve_trace") diff --git a/test/test_app_integration.py b/test/test_app_integration.py index a455f7e..7de3bdd 100644 --- a/test/test_app_integration.py +++ b/test/test_app_integration.py @@ -75,6 +75,16 @@ def test_check_endpoint_applies_different_rules_for_queens_and_rooks(client): assert rooks_response.get_json() == {"valid": True} +def test_solve_endpoint_returns_one_valid_4x4_queens_solution(client): + response = client.get("/solve?size=4") + + assert response.status_code == 200 + assert tuple(response.get_json()) in { + (1, 3, 0, 2), + (2, 0, 3, 1), + } + + def test_authenticated_user_can_save_and_load_a_game_state(client, app_instance, user_factory, login_as): user_factory(username="alice", password="Password123!")