from typing import Any, Dict, List from common.base_problem import BaseProblem from problems.max_subarray.generator import generate_max_subarray_case from problems.max_subarray.solvers import solve_brute_force, solve_divide_conquer, solve_kadane from common.timer_utils import time_execution class MaxSubarrayProblem(BaseProblem): def generate_case(self, size: int = 100, min_val: int = -100, max_val: int = 100) -> Dict[str, Any]: arr = generate_max_subarray_case(size, min_val, max_val) return {"array": arr} def solve(self, input_data: Dict[str, Any], algorithm: str) -> Dict[str, Any]: arr = input_data.get("array", []) result = None duration = 0.0 if algorithm == "brute_force": result, duration = time_execution(solve_brute_force)(arr) elif algorithm == "divide_conquer": result, duration = time_execution(solve_divide_conquer)(arr) elif algorithm == "kadane": result, duration = time_execution(solve_kadane)(arr) else: raise ValueError(f"Unknown algorithm: {algorithm}") return { "algorithm": algorithm, "result": result, "time_seconds": duration } def verify(self, input_data: Any, result: Any) -> bool: # Use Kadane as the source of truth truth, _ = time_execution(solve_kadane)(input_data.get("array", [])) return result == truth