File size: 2,684 Bytes
6c511d6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 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")
|