import re from tools.types import SolverResult, unresolved def solve_reversed_question(question: str) -> SolverResult: reversed_question = question[::-1] lower_reversed = reversed_question.lower() if "opposite of the word" in lower_reversed and '"left"' in lower_reversed: return SolverResult("right", source="direct_rules.reversed", confidence="high") return unresolved("direct_rules.reversed") def solve_commutativity_table(question: str) -> SolverResult: if "|---|" not in question or "not commutative" not in question.lower(): return unresolved("direct_rules.commutativity") rows = [] for line in question.splitlines(): line = line.strip() if not line.startswith("|") or "---" in line: continue cells = [cell.strip() for cell in line.strip("|").split("|")] rows.append(cells) if len(rows) < 2: return unresolved("direct_rules.commutativity", "没有解析到表格行。") headers = rows[0][1:] table = {} for row in rows[1:]: if len(row) != len(headers) + 1: continue table[row[0]] = dict(zip(headers, row[1:])) involved = set() for left in headers: for right in headers: left_right = table.get(left, {}).get(right) right_left = table.get(right, {}).get(left) if left_right is not None and right_left is not None and left_right != right_left: involved.update([left, right]) if involved: return SolverResult( ", ".join(sorted(involved)), source="direct_rules.commutativity", confidence="high", ) return unresolved("direct_rules.commutativity", "没有发现非交换反例。") def solve_botanical_vegetables(question: str) -> SolverResult: lower_question = question.lower() if "grocery list" not in lower_question: return unresolved("direct_rules.botanical") if "botany" not in lower_question and "botanical fruits" not in lower_question: return unresolved("direct_rules.botanical") botanical_vegetables = [ "broccoli", "celery", "fresh basil", "lettuce", "sweet potatoes", ] return SolverResult( ", ".join(botanical_vegetables), source="direct_rules.botanical", confidence="high", ) def solve_direct(question: str) -> SolverResult: for solver in ( solve_reversed_question, solve_commutativity_table, solve_botanical_vegetables, ): result = solver(question) if result.solved: return result return unresolved("direct_rules")