Arithmetic expression evaluator with precedence
One task across 30 published runs. Inspect the scores and outputs together, with each run's execution method shown.
- Task
- CODE-0006
- Domain
- Programming
- Difficulty
- hard
Leading published run: claude-opus-4-8 (high reasoning) at 100.0% composite. Lowest: claude-haiku-4-5 at 0.0%. 30 published runs shown on this task.
How this task was evaluated
Results are ordered by this task's published score. API runs use one prompt and one completion; agent runs use a coding harness with tools and iteration. Inspect the execution method when comparing results.
Objective scores use the benchmark's execution checks. Judge scores use a vision panel's fixed rubric; the published score leaves out a model's own family. Missing values are labelled rather than treated as zero.
Read the brief
Implement a Python function `eval_expr(s)` that evaluates an arithmetic expression given as a string and returns its numeric value. The expression language supports: - the binary operators `+`, `-`, `*`, `/` with standard precedence (`*` and `/` bind tighter than `+` and `-`) and left associativity, - parentheses `(` and `)` to override precedence, - unary `+` and `-` (for example `-5` or `3*-2`), - integer and decimal number literals (for example `7` or `1.5`), - arbitrary surrounding and internal whitespace, which is ignored. Semantics: - `/` is true division (so `7/2` is 3.5). - If the result is an exact integer value, return it as an `int` (so `6/2` returns `3`, not `3.0`); otherwise return a `float`. - Raise `ValueError` for a malformed expression (empty input, a dangling operator, mismatched parentheses, two adjacent numbers, an unknown token) and for division by zero. Do not use `eval`, `exec`, or any expression-parsing library: write the parser yourself. Use only the Python standard library. Write your solution to `solution.py`.