Spaces:
Sleeping
Sleeping
| import re | |
| import sympy as sp | |
| import random | |
| class LinearSolverEngine: | |
| def __init__(self, lhs, rhs, n=3): | |
| self.lhs_raw = lhs | |
| self.rhs_raw = rhs | |
| self.n = n | |
| def _clean_string(self, text): | |
| text = text.lower().replace(" ", "") | |
| text = re.sub(r'(\d)([a-z])', r'\1*\2', text) | |
| return text | |
| def run(self): | |
| lhs_c = self._clean_string(self.lhs_raw) | |
| rhs_c = self._clean_string(self.rhs_raw) | |
| lhs_expr = sp.sympify(lhs_c) | |
| rhs_expr = sp.sympify(rhs_c) | |
| full_eq = sp.Eq(lhs_expr, rhs_expr) | |
| vars_found = sorted(list(full_eq.free_symbols), key=lambda x: x.name) | |
| if len(vars_found) < 2: | |
| return "Please enter an equation with 2 variables (e.g., x - v = 6)", [], "N/A" | |
| input_var = vars_found[0] | |
| target_var = vars_found[1] | |
| points = [1, 3, 5] | |
| random.shuffle(points) | |
| solutions_data = [] | |
| steps = f"Given equation: {self.lhs_raw} = {self.rhs_raw}\n\n" | |
| for i, val in enumerate(points, 1): | |
| subbed_eq = full_eq.subs(input_var, val) | |
| plugged_in_str = re.sub(rf'\b{input_var}\b', f"({val})", lhs_c) | |
| target_value = sp.solve(subbed_eq, target_var)[0] | |
| isolated_rhs = sp.solve(subbed_eq, target_var, dict=True)[0][target_var] | |
| steps += f"Solution number {i}:\n" | |
| steps += f"Step A: Let's take {input_var} as {val}\n" | |
| steps += f"Step B: Plug it in: {plugged_in_str} = {rhs_c}\n" | |
| steps += f"Step C: Simplify and solve for {target_var}...\n" | |
| # The "Human-like" math breakdown | |
| steps += f"{target_var} = {isolated_rhs}\n" | |
| steps += f"Result: When {input_var} = {val}, then {target_var} = {target_value}\n" | |
| steps += f"Point: ({val}, {target_value})\n\n" | |
| solutions_data.append((float(val), float(target_value))) | |
| return steps, solutions_data, input_var |