FA-97146 / Recipe scaling and nutrition / Open access
Shopping list aggregator: cup display threshold · case 01
A quarter cup prints as "4 tbsp".
ROOT CAUSE
Cups are used only from one whole cup instead of from a quarter cup.
VERIFIED REPAIR
Show cups from 12 teaspoons upward.
Unsuccessful approach: A strict > shows exactly 1/4 cup as 4 tbsp.
Case contract
Rows [name, qty, unit]. Names normalize: trim, lower, "-oes" -> drop "es", "-ies" -> "y", other trailing "s" dropped unless "ss". Volume (tsp=1, tbsp=3, cup=48 tsp), mass (g, kg=1000 g) and other units aggregate separately per name. Pantry {name: [qty, unit]} subtracts from the same name and dimension, never below 0. Output sorted by (name, dimension) as [name, str(qty), unit], skipping zero totals; volume shows cup if >=12 tsp, else tbsp if >=3 tsp, else tsp; mass shows kg if >=1000 g.
Why this case matters
Meal planners merge ingredient lists across recipes and subtract what is already in the pantry.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(recipes, pantry):
VOL = {'tsp': 1, 'tbsp': 3, 'cup': 48}
MASS = {'g': 1, 'kg': 1000}
def norm(n):
n = n.strip().lower()
if n.endswith('oes'):
return n[:-2]
if n.endswith('ies'):
return n[:-3] + 'y'
if n.endswith('s') and not n.endswith('ss'):
return n[:-1]
return n
def base(q, u):
if u in VOL:
return 'volume', Fraction(q) * VOL[u]
if u in MASS:
return 'mass', Fraction(q) * MASS[u]
return u, Fraction(q)
tot = {}
for recipe in recipes:
for name, q, u in recipe:
dim, v = base(q, u)
k = (norm(name), dim)
tot[k] = tot.get(k, 0) + v
for name, (q, u) in pantry.items():
dim, v = base(q, u)
pk = (norm(name), dim)
if pk in tot:
tot[pk] = max(Fraction(0), tot[pk] - v)
out = []
for (name, dim), v in sorted(tot.items()):
if v == 0:
continue
if dim == 'volume':
unit, v2 = ('cup', v / 48) if v >= 48 else ('tbsp', v / 3) if v >= 3 else ('tsp', v)
elif dim == 'mass':
unit, v2 = ('kg', v / 1000) if v >= 1000 else ('g', v)
else:
unit, v2 = dim, v
out.append([name, str(v2), unit])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/2', 'each'], ['berry', '1/2', 'tbsp']], [['berries', '4', 'kg'], ['berry', '3/4', 'kg']],
[['eggs', '3', 'kg'], ['berries', '1/2', 'cup'], ['sugar ', '2', 'kg'], ['grapes', '3', 'kg']]],
{'egg': ['1/2', 'tsp']}],
[['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'],
['grape', '3', 'kg'], ['sugar', '2', 'kg']]],
['repair check: cup display threshold',
[[[['berry', '4', 'kg']], [['eggs', '4', 'g']],
[['grape', '2', 'kg'], ['berries', '1/2', 'tsp'], ['grape', '4', 'tbsp'], ['tomatoes', '1', 'tsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'],
['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']]],
['generated control 1',
[[[['egg', '2', 'kg'], ['grapes', '4', 'tsp'], ['eggs', '1', 'kg'], ['berry', '1/3', 'each']],
[['Tomato', '2', 'each'], ['berries', '1/3', 'kg'], ['tomatoes', '1', 'tsp']]],
{'peas': ['1/4', 'tsp'], 'potatoes': ['1/4', 'cup']}],
[['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'],
['tomato', '2', 'each'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['grapes', '1/4', 'tbsp'], ['berry', '1', 'cup'], ['berries', '4', 'each'], ['potatoes', '4', 'cup']],
[['watercress', '1/2', 'tsp']]],
{}],
[['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'],
['watercress', '1/2', 'tsp']]],
['generated control 3',
[[[['watercress', '3/4', 'each'], ['peas', '1/3', 'cup']],
[['grape', '1/2', 'each'], ['watercress', '1/2', 'tsp'], ['grape', '1', 'g']]],
{}],
[['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'],
['watercress', '1/2', 'tsp']]]],
[['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['regression: cup display threshold',
[[[['flour', '1/3', 'cup'], ['sugar ', '1', 'each']],
[['grapes', '3/4', 'each'], ['berry', '3', 'g'], ['sugar ', '3', 'kg']],
[['grape', '1/4', 'cup'], ['grape', '3/4', 'g'], ['potatoes', '1/2', 'each']]],
{'egg': ['1/2', 'kg']}],
[['berry', '3', 'g'], ['flour', '1/3', 'cup'], ['grape', '3/4', 'each'], ['grape', '3/4', 'g'],
['grape', '1/4', 'cup'], ['potato', '1/2', 'each'], ['sugar', '1', 'each'], ['sugar', '3', 'kg']]],
['repair check: cup display threshold',
[[[['grape', '4', 'tsp'], ['tomatoes', '1/4', 'cup'], ['egg', '3/4', 'tbsp'], ['berries', '1/3', 'each']],
[['sugar ', '1/3', 'cup']]],
{'flour': ['1/4', 'kg'], 'tomatoes': ['4', 'g']}],
[['berry', '1/3', 'each'], ['egg', '9/4', 'tsp'], ['grape', '4/3', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1/4', 'cup']]],
['generated control 1',
[[[['peas', '3/4', 'kg'], ['sugar ', '2', 'g'], ['flour', '1', 'cup']], [['flour', '3', 'tsp']],
[['berries', '2', 'tbsp'], ['Tomato', '1/3', 'tbsp'], ['egg', '3', 'tsp']]],
{}],
[['berry', '2', 'tbsp'], ['egg', '1', 'tbsp'], ['flour', '17/16', 'cup'], ['pea', '750', 'g'],
['sugar', '2', 'g'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['berry', '1', 'each'], ['tomatoes', '1/4', 'each'], ['grape', '4', 'cup']],
[['potatoes', '3/4', 'kg'], ['watercress', '4', 'tsp']],
[['berries', '3', 'each'], ['potatoes', '2', 'tsp']]],
{'grape': ['3', 'cup'], 'peas': ['4', 'tbsp']}],
[['berry', '4', 'each'], ['grape', '1', 'cup'], ['potato', '750', 'g'], ['potato', '2', 'tsp'],
['tomato', '1/4', 'each'], ['watercress', '4/3', 'tbsp']]],
['generated control 3',
[[[['berries', '1', 'each'], ['egg', '4', 'g'], ['eggs', '1/4', 'tbsp'], ['berries', '3', 'tbsp']],
[['potatoes', '1/2', 'tsp']], [['potatoes', '1', 'tbsp'], ['sugar ', '4', 'g']]],
{'berry': ['1/2', 'g'], 'grapes': ['1/4', 'g']}],
[['berry', '1', 'each'], ['berry', '3', 'tbsp'], ['egg', '4', 'g'], ['egg', '3/4', 'tsp'],
['potato', '7/6', 'tbsp'], ['sugar', '4', 'g']]]],
[['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['regression: cup display threshold',
[[[['peas', '1/4', 'tsp'], ['flour', '4', 'cup'], ['grapes', '4', 'tbsp'], ['flour', '1/4', 'cup']],
[['peas', '3', 'tsp'], ['Tomato', '1/3', 'kg'], ['berries', '3/4', 'each'], ['berries', '3', 'kg']]],
{}],
[['berry', '3/4', 'each'], ['berry', '3', 'kg'], ['flour', '17/4', 'cup'], ['grape', '1/4', 'cup'],
['pea', '13/12', 'tbsp'], ['tomato', '1000/3', 'g']]],
['repair check: cup display threshold',
[[[['tomatoes', '3', 'each']], [['grape', '3', 'kg'], ['eggs', '1/4', 'tbsp']],
[['flour', '4', 'each'], ['flour', '1/4', 'g'], ['grape', '1/4', 'tsp'], ['flour', '1/4', 'cup']]],
{'peas': ['1/3', 'tbsp']}],
[['egg', '3/4', 'tsp'], ['flour', '4', 'each'], ['flour', '1/4', 'g'], ['flour', '1/4', 'cup'],
['grape', '3', 'kg'], ['grape', '1/4', 'tsp'], ['tomato', '3', 'each']]],
['generated control 1',
[[[['tomatoes', '1', 'g'], ['sugar ', '3/4', 'tbsp']],
[['grapes', '3/4', 'kg'], ['Tomato', '1', 'g'], ['potatoes', '3', 'tsp']], [['eggs', '1/2', 'tsp']]],
{'sugar ': ['3/4', 'g'], 'tomatoes': ['4', 'tbsp']}],
[['egg', '1/2', 'tsp'], ['grape', '750', 'g'], ['potato', '1', 'tbsp'], ['sugar', '9/4', 'tsp'],
['tomato', '2', 'g']]],
['generated control 2',
[[[['watercress', '3/4', 'tbsp'], ['flour', '1/3', 'kg'], ['tomatoes', '4', 'tsp'],
['grape', '1/2', 'tbsp']]],
{}],
[['flour', '1000/3', 'g'], ['grape', '3/2', 'tsp'], ['tomato', '4/3', 'tbsp'],
['watercress', '9/4', 'tsp']]],
['generated control 3',
[[[['peas', '1/2', 'tbsp'], ['Tomato', '2', 'kg']],
[['peas', '2', 'tsp'], ['watercress', '4', 'kg'], ['flour', '4', 'cup']], [['eggs', '1/2', 'each']]],
{'grapes': ['1/4', 'cup']}],
[['egg', '1/2', 'each'], ['flour', '4', 'cup'], ['pea', '7/6', 'tbsp'], ['tomato', '2', 'kg'],
['watercress', '4', 'kg']]]],
[['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['regression: cup display threshold',
[[[['eggs', '4', 'g'], ['sugar ', '1/3', 'cup']],
[['grape', '3/4', 'tbsp'], ['berries', '1/4', 'g'], ['Tomato', '1', 'cup']], [['grape', '4', 'tsp']]],
{'potatoes': ['1/2', 'tsp']}],
[['berry', '1/4', 'g'], ['egg', '4', 'g'], ['grape', '25/12', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1', 'cup']]],
['repair check: cup display threshold',
[[[['berry', '3/4', 'each'], ['egg', '2', 'cup'], ['berry', '4', 'tbsp']],
[['peas', '1/3', 'tsp'], ['peas', '1/3', 'kg'], ['sugar ', '1/4', 'g']]],
{'egg': ['1/4', 'each']}],
[['berry', '3/4', 'each'], ['berry', '1/4', 'cup'], ['egg', '2', 'cup'], ['pea', '1000/3', 'g'],
['pea', '1/3', 'tsp'], ['sugar', '1/4', 'g']]],
['generated control 1',
[[[['flour', '1/4', 'kg'], ['peas', '1/4', 'tbsp'], ['potatoes', '1', 'g']]],
{'berries': ['3', 'cup'], 'tomatoes': ['1', 'cup']}],
[['flour', '250', 'g'], ['pea', '3/4', 'tsp'], ['potato', '1', 'g']]],
['generated control 2', [[[['flour', '1/4', 'g']]], {}], [['flour', '1/4', 'g']]],
['generated control 3',
[[[['berries', '2', 'cup'], ['Tomato', '1/2', 'kg']],
[['grape', '1/3', 'tsp'], ['berry', '4', 'kg'], ['egg', '1/4', 'tbsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '2', 'cup'], ['egg', '3/4', 'tsp'], ['grape', '1/3', 'tsp'],
['tomato', '500', 'g']]]],
[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/4', 'cup'], ['grape', '1/2', 'kg'], ['Tomato', '1', 'tbsp'], ['berries', '3/4', 'each']],
[['berry', '2', 'kg'], ['tomatoes', '2', 'tsp']]],
{}],
[['berry', '3/4', 'each'], ['berry', '2', 'kg'], ['berry', '1/4', 'cup'], ['grape', '500', 'g'],
['tomato', '5/3', 'tbsp']]],
['repair check: cup display threshold',
[[[['berries', '1/3', 'cup'], ['Tomato', '3/4', 'kg']],
[['tomatoes', '3', 'g'], ['peas', '4', 'tbsp'], ['flour', '1/3', 'cup'], ['egg', '1/3', 'tbsp']],
[['grapes', '1', 'each'], ['watercress', '1', 'tbsp'], ['flour', '1/3', 'cup']]],
{'flour': ['1/4', 'tbsp'], 'potatoes': ['1', 'each']}],
[['berry', '1/3', 'cup'], ['egg', '1', 'tsp'], ['flour', '125/192', 'cup'], ['grape', '1', 'each'],
['pea', '1/4', 'cup'], ['tomato', '753', 'g'], ['watercress', '1', 'tbsp']]],
['generated control 1', [[[['watercress', '2', 'cup']]], {}], [['watercress', '2', 'cup']]],
['generated control 2', [[[['Tomato', '1', 'g'], ['tomatoes', '1', 'kg'], ['peas', '3/4', 'kg']]], {}],
[['pea', '750', 'g'], ['tomato', '1001/1000', 'kg']]],
['generated control 3',
[[[['flour', '1', 'tbsp']],
[['grapes', '2', 'tsp'], ['tomatoes', '1/2', 'tsp'], ['peas', '3', 'each'], ['tomatoes', '4', 'tsp']],
[['watercress', '1', 'cup'], ['peas', '2', 'tsp'], ['peas', '3', 'each']]],
{}],
[['flour', '1', 'tbsp'], ['grape', '2', 'tsp'], ['pea', '6', 'each'], ['pea', '2', 'tsp'],
['tomato', '3/2', 'tbsp'], ['watercress', '1', 'cup']]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single recipe | [['flour', '1', 'cup']] | [['flour', '1', 'cup']] | Passed |
| merge plurals | [['tomato', '3', 'each']] | [['tomato', '3', 'each']] | Passed |
| pantry covers all | [] | [] | Passed |
| regression: cup display threshold | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/2', 'tbsp'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | Failed |
| repair check: cup display threshold | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '4', 'tbsp'], ['tomato', '1', 'tsp']] | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']] | Failed |
| generated control 1 | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | Passed |
| generated control 2 | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | Passed |
| generated control 3 | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '16/3', 'tbsp'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | Failed |
SHA-256 / c77c6a678239ed7fa306cdaf82062c2ab0c8cab2c6bae4c5b962e42809020e7c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(recipes, pantry):
VOL = {'tsp': 1, 'tbsp': 3, 'cup': 48}
MASS = {'g': 1, 'kg': 1000}
def norm(n):
n = n.strip().lower()
if n.endswith('oes'):
return n[:-2]
if n.endswith('ies'):
return n[:-3] + 'y'
if n.endswith('s') and not n.endswith('ss'):
return n[:-1]
return n
def base(q, u):
if u in VOL:
return 'volume', Fraction(q) * VOL[u]
if u in MASS:
return 'mass', Fraction(q) * MASS[u]
return u, Fraction(q)
tot = {}
for recipe in recipes:
for name, q, u in recipe:
dim, v = base(q, u)
k = (norm(name), dim)
tot[k] = tot.get(k, 0) + v
for name, (q, u) in pantry.items():
dim, v = base(q, u)
pk = (norm(name), dim)
if pk in tot:
tot[pk] = max(Fraction(0), tot[pk] - v)
out = []
for (name, dim), v in sorted(tot.items()):
if v == 0:
continue
if dim == 'volume':
unit, v2 = ('cup', v / 48) if v > 12 else ('tbsp', v / 3) if v >= 3 else ('tsp', v)
elif dim == 'mass':
unit, v2 = ('kg', v / 1000) if v >= 1000 else ('g', v)
else:
unit, v2 = dim, v
out.append([name, str(v2), unit])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/2', 'each'], ['berry', '1/2', 'tbsp']], [['berries', '4', 'kg'], ['berry', '3/4', 'kg']],
[['eggs', '3', 'kg'], ['berries', '1/2', 'cup'], ['sugar ', '2', 'kg'], ['grapes', '3', 'kg']]],
{'egg': ['1/2', 'tsp']}],
[['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'],
['grape', '3', 'kg'], ['sugar', '2', 'kg']]],
['repair check: cup display threshold',
[[[['berry', '4', 'kg']], [['eggs', '4', 'g']],
[['grape', '2', 'kg'], ['berries', '1/2', 'tsp'], ['grape', '4', 'tbsp'], ['tomatoes', '1', 'tsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'],
['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']]],
['generated control 1',
[[[['egg', '2', 'kg'], ['grapes', '4', 'tsp'], ['eggs', '1', 'kg'], ['berry', '1/3', 'each']],
[['Tomato', '2', 'each'], ['berries', '1/3', 'kg'], ['tomatoes', '1', 'tsp']]],
{'peas': ['1/4', 'tsp'], 'potatoes': ['1/4', 'cup']}],
[['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'],
['tomato', '2', 'each'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['grapes', '1/4', 'tbsp'], ['berry', '1', 'cup'], ['berries', '4', 'each'], ['potatoes', '4', 'cup']],
[['watercress', '1/2', 'tsp']]],
{}],
[['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'],
['watercress', '1/2', 'tsp']]],
['generated control 3',
[[[['watercress', '3/4', 'each'], ['peas', '1/3', 'cup']],
[['grape', '1/2', 'each'], ['watercress', '1/2', 'tsp'], ['grape', '1', 'g']]],
{}],
[['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'],
['watercress', '1/2', 'tsp']]]],
[['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['regression: cup display threshold',
[[[['flour', '1/3', 'cup'], ['sugar ', '1', 'each']],
[['grapes', '3/4', 'each'], ['berry', '3', 'g'], ['sugar ', '3', 'kg']],
[['grape', '1/4', 'cup'], ['grape', '3/4', 'g'], ['potatoes', '1/2', 'each']]],
{'egg': ['1/2', 'kg']}],
[['berry', '3', 'g'], ['flour', '1/3', 'cup'], ['grape', '3/4', 'each'], ['grape', '3/4', 'g'],
['grape', '1/4', 'cup'], ['potato', '1/2', 'each'], ['sugar', '1', 'each'], ['sugar', '3', 'kg']]],
['repair check: cup display threshold',
[[[['grape', '4', 'tsp'], ['tomatoes', '1/4', 'cup'], ['egg', '3/4', 'tbsp'], ['berries', '1/3', 'each']],
[['sugar ', '1/3', 'cup']]],
{'flour': ['1/4', 'kg'], 'tomatoes': ['4', 'g']}],
[['berry', '1/3', 'each'], ['egg', '9/4', 'tsp'], ['grape', '4/3', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1/4', 'cup']]],
['generated control 1',
[[[['peas', '3/4', 'kg'], ['sugar ', '2', 'g'], ['flour', '1', 'cup']], [['flour', '3', 'tsp']],
[['berries', '2', 'tbsp'], ['Tomato', '1/3', 'tbsp'], ['egg', '3', 'tsp']]],
{}],
[['berry', '2', 'tbsp'], ['egg', '1', 'tbsp'], ['flour', '17/16', 'cup'], ['pea', '750', 'g'],
['sugar', '2', 'g'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['berry', '1', 'each'], ['tomatoes', '1/4', 'each'], ['grape', '4', 'cup']],
[['potatoes', '3/4', 'kg'], ['watercress', '4', 'tsp']],
[['berries', '3', 'each'], ['potatoes', '2', 'tsp']]],
{'grape': ['3', 'cup'], 'peas': ['4', 'tbsp']}],
[['berry', '4', 'each'], ['grape', '1', 'cup'], ['potato', '750', 'g'], ['potato', '2', 'tsp'],
['tomato', '1/4', 'each'], ['watercress', '4/3', 'tbsp']]],
['generated control 3',
[[[['berries', '1', 'each'], ['egg', '4', 'g'], ['eggs', '1/4', 'tbsp'], ['berries', '3', 'tbsp']],
[['potatoes', '1/2', 'tsp']], [['potatoes', '1', 'tbsp'], ['sugar ', '4', 'g']]],
{'berry': ['1/2', 'g'], 'grapes': ['1/4', 'g']}],
[['berry', '1', 'each'], ['berry', '3', 'tbsp'], ['egg', '4', 'g'], ['egg', '3/4', 'tsp'],
['potato', '7/6', 'tbsp'], ['sugar', '4', 'g']]]],
[['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['regression: cup display threshold',
[[[['peas', '1/4', 'tsp'], ['flour', '4', 'cup'], ['grapes', '4', 'tbsp'], ['flour', '1/4', 'cup']],
[['peas', '3', 'tsp'], ['Tomato', '1/3', 'kg'], ['berries', '3/4', 'each'], ['berries', '3', 'kg']]],
{}],
[['berry', '3/4', 'each'], ['berry', '3', 'kg'], ['flour', '17/4', 'cup'], ['grape', '1/4', 'cup'],
['pea', '13/12', 'tbsp'], ['tomato', '1000/3', 'g']]],
['repair check: cup display threshold',
[[[['tomatoes', '3', 'each']], [['grape', '3', 'kg'], ['eggs', '1/4', 'tbsp']],
[['flour', '4', 'each'], ['flour', '1/4', 'g'], ['grape', '1/4', 'tsp'], ['flour', '1/4', 'cup']]],
{'peas': ['1/3', 'tbsp']}],
[['egg', '3/4', 'tsp'], ['flour', '4', 'each'], ['flour', '1/4', 'g'], ['flour', '1/4', 'cup'],
['grape', '3', 'kg'], ['grape', '1/4', 'tsp'], ['tomato', '3', 'each']]],
['generated control 1',
[[[['tomatoes', '1', 'g'], ['sugar ', '3/4', 'tbsp']],
[['grapes', '3/4', 'kg'], ['Tomato', '1', 'g'], ['potatoes', '3', 'tsp']], [['eggs', '1/2', 'tsp']]],
{'sugar ': ['3/4', 'g'], 'tomatoes': ['4', 'tbsp']}],
[['egg', '1/2', 'tsp'], ['grape', '750', 'g'], ['potato', '1', 'tbsp'], ['sugar', '9/4', 'tsp'],
['tomato', '2', 'g']]],
['generated control 2',
[[[['watercress', '3/4', 'tbsp'], ['flour', '1/3', 'kg'], ['tomatoes', '4', 'tsp'],
['grape', '1/2', 'tbsp']]],
{}],
[['flour', '1000/3', 'g'], ['grape', '3/2', 'tsp'], ['tomato', '4/3', 'tbsp'],
['watercress', '9/4', 'tsp']]],
['generated control 3',
[[[['peas', '1/2', 'tbsp'], ['Tomato', '2', 'kg']],
[['peas', '2', 'tsp'], ['watercress', '4', 'kg'], ['flour', '4', 'cup']], [['eggs', '1/2', 'each']]],
{'grapes': ['1/4', 'cup']}],
[['egg', '1/2', 'each'], ['flour', '4', 'cup'], ['pea', '7/6', 'tbsp'], ['tomato', '2', 'kg'],
['watercress', '4', 'kg']]]],
[['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['regression: cup display threshold',
[[[['eggs', '4', 'g'], ['sugar ', '1/3', 'cup']],
[['grape', '3/4', 'tbsp'], ['berries', '1/4', 'g'], ['Tomato', '1', 'cup']], [['grape', '4', 'tsp']]],
{'potatoes': ['1/2', 'tsp']}],
[['berry', '1/4', 'g'], ['egg', '4', 'g'], ['grape', '25/12', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1', 'cup']]],
['repair check: cup display threshold',
[[[['berry', '3/4', 'each'], ['egg', '2', 'cup'], ['berry', '4', 'tbsp']],
[['peas', '1/3', 'tsp'], ['peas', '1/3', 'kg'], ['sugar ', '1/4', 'g']]],
{'egg': ['1/4', 'each']}],
[['berry', '3/4', 'each'], ['berry', '1/4', 'cup'], ['egg', '2', 'cup'], ['pea', '1000/3', 'g'],
['pea', '1/3', 'tsp'], ['sugar', '1/4', 'g']]],
['generated control 1',
[[[['flour', '1/4', 'kg'], ['peas', '1/4', 'tbsp'], ['potatoes', '1', 'g']]],
{'berries': ['3', 'cup'], 'tomatoes': ['1', 'cup']}],
[['flour', '250', 'g'], ['pea', '3/4', 'tsp'], ['potato', '1', 'g']]],
['generated control 2', [[[['flour', '1/4', 'g']]], {}], [['flour', '1/4', 'g']]],
['generated control 3',
[[[['berries', '2', 'cup'], ['Tomato', '1/2', 'kg']],
[['grape', '1/3', 'tsp'], ['berry', '4', 'kg'], ['egg', '1/4', 'tbsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '2', 'cup'], ['egg', '3/4', 'tsp'], ['grape', '1/3', 'tsp'],
['tomato', '500', 'g']]]],
[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/4', 'cup'], ['grape', '1/2', 'kg'], ['Tomato', '1', 'tbsp'], ['berries', '3/4', 'each']],
[['berry', '2', 'kg'], ['tomatoes', '2', 'tsp']]],
{}],
[['berry', '3/4', 'each'], ['berry', '2', 'kg'], ['berry', '1/4', 'cup'], ['grape', '500', 'g'],
['tomato', '5/3', 'tbsp']]],
['repair check: cup display threshold',
[[[['berries', '1/3', 'cup'], ['Tomato', '3/4', 'kg']],
[['tomatoes', '3', 'g'], ['peas', '4', 'tbsp'], ['flour', '1/3', 'cup'], ['egg', '1/3', 'tbsp']],
[['grapes', '1', 'each'], ['watercress', '1', 'tbsp'], ['flour', '1/3', 'cup']]],
{'flour': ['1/4', 'tbsp'], 'potatoes': ['1', 'each']}],
[['berry', '1/3', 'cup'], ['egg', '1', 'tsp'], ['flour', '125/192', 'cup'], ['grape', '1', 'each'],
['pea', '1/4', 'cup'], ['tomato', '753', 'g'], ['watercress', '1', 'tbsp']]],
['generated control 1', [[[['watercress', '2', 'cup']]], {}], [['watercress', '2', 'cup']]],
['generated control 2', [[[['Tomato', '1', 'g'], ['tomatoes', '1', 'kg'], ['peas', '3/4', 'kg']]], {}],
[['pea', '750', 'g'], ['tomato', '1001/1000', 'kg']]],
['generated control 3',
[[[['flour', '1', 'tbsp']],
[['grapes', '2', 'tsp'], ['tomatoes', '1/2', 'tsp'], ['peas', '3', 'each'], ['tomatoes', '4', 'tsp']],
[['watercress', '1', 'cup'], ['peas', '2', 'tsp'], ['peas', '3', 'each']]],
{}],
[['flour', '1', 'tbsp'], ['grape', '2', 'tsp'], ['pea', '6', 'each'], ['pea', '2', 'tsp'],
['tomato', '3/2', 'tbsp'], ['watercress', '1', 'cup']]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single recipe | [['flour', '1', 'cup']] | [['flour', '1', 'cup']] | Passed |
| merge plurals | [['tomato', '3', 'each']] | [['tomato', '3', 'each']] | Passed |
| pantry covers all | [] | [] | Passed |
| regression: cup display threshold | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | Passed |
| repair check: cup display threshold | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '4', 'tbsp'], ['tomato', '1', 'tsp']] | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']] | Failed |
| generated control 1 | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | Passed |
| generated control 2 | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | Passed |
| generated control 3 | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | Passed |
SHA-256 / 1bedb3d36b63f15c705d9ffedaad758ca4c60accbb1ee539b4072a40529e6e61
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(recipes, pantry):
VOL = {'tsp': 1, 'tbsp': 3, 'cup': 48}
MASS = {'g': 1, 'kg': 1000}
def norm(n):
n = n.strip().lower()
if n.endswith('oes'):
return n[:-2]
if n.endswith('ies'):
return n[:-3] + 'y'
if n.endswith('s') and not n.endswith('ss'):
return n[:-1]
return n
def base(q, u):
if u in VOL:
return 'volume', Fraction(q) * VOL[u]
if u in MASS:
return 'mass', Fraction(q) * MASS[u]
return u, Fraction(q)
tot = {}
for recipe in recipes:
for name, q, u in recipe:
dim, v = base(q, u)
k = (norm(name), dim)
tot[k] = tot.get(k, 0) + v
for name, (q, u) in pantry.items():
dim, v = base(q, u)
pk = (norm(name), dim)
if pk in tot:
tot[pk] = max(Fraction(0), tot[pk] - v)
out = []
for (name, dim), v in sorted(tot.items()):
if v == 0:
continue
if dim == 'volume':
unit, v2 = ('cup', v / 48) if v >= 12 else ('tbsp', v / 3) if v >= 3 else ('tsp', v)
elif dim == 'mass':
unit, v2 = ('kg', v / 1000) if v >= 1000 else ('g', v)
else:
unit, v2 = dim, v
out.append([name, str(v2), unit])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/2', 'each'], ['berry', '1/2', 'tbsp']], [['berries', '4', 'kg'], ['berry', '3/4', 'kg']],
[['eggs', '3', 'kg'], ['berries', '1/2', 'cup'], ['sugar ', '2', 'kg'], ['grapes', '3', 'kg']]],
{'egg': ['1/2', 'tsp']}],
[['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'],
['grape', '3', 'kg'], ['sugar', '2', 'kg']]],
['repair check: cup display threshold',
[[[['berry', '4', 'kg']], [['eggs', '4', 'g']],
[['grape', '2', 'kg'], ['berries', '1/2', 'tsp'], ['grape', '4', 'tbsp'], ['tomatoes', '1', 'tsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'],
['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']]],
['generated control 1',
[[[['egg', '2', 'kg'], ['grapes', '4', 'tsp'], ['eggs', '1', 'kg'], ['berry', '1/3', 'each']],
[['Tomato', '2', 'each'], ['berries', '1/3', 'kg'], ['tomatoes', '1', 'tsp']]],
{'peas': ['1/4', 'tsp'], 'potatoes': ['1/4', 'cup']}],
[['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'],
['tomato', '2', 'each'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['grapes', '1/4', 'tbsp'], ['berry', '1', 'cup'], ['berries', '4', 'each'], ['potatoes', '4', 'cup']],
[['watercress', '1/2', 'tsp']]],
{}],
[['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'],
['watercress', '1/2', 'tsp']]],
['generated control 3',
[[[['watercress', '3/4', 'each'], ['peas', '1/3', 'cup']],
[['grape', '1/2', 'each'], ['watercress', '1/2', 'tsp'], ['grape', '1', 'g']]],
{}],
[['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'],
['watercress', '1/2', 'tsp']]]],
[['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['regression: cup display threshold',
[[[['flour', '1/3', 'cup'], ['sugar ', '1', 'each']],
[['grapes', '3/4', 'each'], ['berry', '3', 'g'], ['sugar ', '3', 'kg']],
[['grape', '1/4', 'cup'], ['grape', '3/4', 'g'], ['potatoes', '1/2', 'each']]],
{'egg': ['1/2', 'kg']}],
[['berry', '3', 'g'], ['flour', '1/3', 'cup'], ['grape', '3/4', 'each'], ['grape', '3/4', 'g'],
['grape', '1/4', 'cup'], ['potato', '1/2', 'each'], ['sugar', '1', 'each'], ['sugar', '3', 'kg']]],
['repair check: cup display threshold',
[[[['grape', '4', 'tsp'], ['tomatoes', '1/4', 'cup'], ['egg', '3/4', 'tbsp'], ['berries', '1/3', 'each']],
[['sugar ', '1/3', 'cup']]],
{'flour': ['1/4', 'kg'], 'tomatoes': ['4', 'g']}],
[['berry', '1/3', 'each'], ['egg', '9/4', 'tsp'], ['grape', '4/3', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1/4', 'cup']]],
['generated control 1',
[[[['peas', '3/4', 'kg'], ['sugar ', '2', 'g'], ['flour', '1', 'cup']], [['flour', '3', 'tsp']],
[['berries', '2', 'tbsp'], ['Tomato', '1/3', 'tbsp'], ['egg', '3', 'tsp']]],
{}],
[['berry', '2', 'tbsp'], ['egg', '1', 'tbsp'], ['flour', '17/16', 'cup'], ['pea', '750', 'g'],
['sugar', '2', 'g'], ['tomato', '1', 'tsp']]],
['generated control 2',
[[[['berry', '1', 'each'], ['tomatoes', '1/4', 'each'], ['grape', '4', 'cup']],
[['potatoes', '3/4', 'kg'], ['watercress', '4', 'tsp']],
[['berries', '3', 'each'], ['potatoes', '2', 'tsp']]],
{'grape': ['3', 'cup'], 'peas': ['4', 'tbsp']}],
[['berry', '4', 'each'], ['grape', '1', 'cup'], ['potato', '750', 'g'], ['potato', '2', 'tsp'],
['tomato', '1/4', 'each'], ['watercress', '4/3', 'tbsp']]],
['generated control 3',
[[[['berries', '1', 'each'], ['egg', '4', 'g'], ['eggs', '1/4', 'tbsp'], ['berries', '3', 'tbsp']],
[['potatoes', '1/2', 'tsp']], [['potatoes', '1', 'tbsp'], ['sugar ', '4', 'g']]],
{'berry': ['1/2', 'g'], 'grapes': ['1/4', 'g']}],
[['berry', '1', 'each'], ['berry', '3', 'tbsp'], ['egg', '4', 'g'], ['egg', '3/4', 'tsp'],
['potato', '7/6', 'tbsp'], ['sugar', '4', 'g']]]],
[['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['regression: cup display threshold',
[[[['peas', '1/4', 'tsp'], ['flour', '4', 'cup'], ['grapes', '4', 'tbsp'], ['flour', '1/4', 'cup']],
[['peas', '3', 'tsp'], ['Tomato', '1/3', 'kg'], ['berries', '3/4', 'each'], ['berries', '3', 'kg']]],
{}],
[['berry', '3/4', 'each'], ['berry', '3', 'kg'], ['flour', '17/4', 'cup'], ['grape', '1/4', 'cup'],
['pea', '13/12', 'tbsp'], ['tomato', '1000/3', 'g']]],
['repair check: cup display threshold',
[[[['tomatoes', '3', 'each']], [['grape', '3', 'kg'], ['eggs', '1/4', 'tbsp']],
[['flour', '4', 'each'], ['flour', '1/4', 'g'], ['grape', '1/4', 'tsp'], ['flour', '1/4', 'cup']]],
{'peas': ['1/3', 'tbsp']}],
[['egg', '3/4', 'tsp'], ['flour', '4', 'each'], ['flour', '1/4', 'g'], ['flour', '1/4', 'cup'],
['grape', '3', 'kg'], ['grape', '1/4', 'tsp'], ['tomato', '3', 'each']]],
['generated control 1',
[[[['tomatoes', '1', 'g'], ['sugar ', '3/4', 'tbsp']],
[['grapes', '3/4', 'kg'], ['Tomato', '1', 'g'], ['potatoes', '3', 'tsp']], [['eggs', '1/2', 'tsp']]],
{'sugar ': ['3/4', 'g'], 'tomatoes': ['4', 'tbsp']}],
[['egg', '1/2', 'tsp'], ['grape', '750', 'g'], ['potato', '1', 'tbsp'], ['sugar', '9/4', 'tsp'],
['tomato', '2', 'g']]],
['generated control 2',
[[[['watercress', '3/4', 'tbsp'], ['flour', '1/3', 'kg'], ['tomatoes', '4', 'tsp'],
['grape', '1/2', 'tbsp']]],
{}],
[['flour', '1000/3', 'g'], ['grape', '3/2', 'tsp'], ['tomato', '4/3', 'tbsp'],
['watercress', '9/4', 'tsp']]],
['generated control 3',
[[[['peas', '1/2', 'tbsp'], ['Tomato', '2', 'kg']],
[['peas', '2', 'tsp'], ['watercress', '4', 'kg'], ['flour', '4', 'cup']], [['eggs', '1/2', 'each']]],
{'grapes': ['1/4', 'cup']}],
[['egg', '1/2', 'each'], ['flour', '4', 'cup'], ['pea', '7/6', 'tbsp'], ['tomato', '2', 'kg'],
['watercress', '4', 'kg']]]],
[['watercress keeps ss', [[[['watercress', '100', 'g']]], {}], [['watercress', '100', 'g']]],
['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['regression: cup display threshold',
[[[['eggs', '4', 'g'], ['sugar ', '1/3', 'cup']],
[['grape', '3/4', 'tbsp'], ['berries', '1/4', 'g'], ['Tomato', '1', 'cup']], [['grape', '4', 'tsp']]],
{'potatoes': ['1/2', 'tsp']}],
[['berry', '1/4', 'g'], ['egg', '4', 'g'], ['grape', '25/12', 'tbsp'], ['sugar', '1/3', 'cup'],
['tomato', '1', 'cup']]],
['repair check: cup display threshold',
[[[['berry', '3/4', 'each'], ['egg', '2', 'cup'], ['berry', '4', 'tbsp']],
[['peas', '1/3', 'tsp'], ['peas', '1/3', 'kg'], ['sugar ', '1/4', 'g']]],
{'egg': ['1/4', 'each']}],
[['berry', '3/4', 'each'], ['berry', '1/4', 'cup'], ['egg', '2', 'cup'], ['pea', '1000/3', 'g'],
['pea', '1/3', 'tsp'], ['sugar', '1/4', 'g']]],
['generated control 1',
[[[['flour', '1/4', 'kg'], ['peas', '1/4', 'tbsp'], ['potatoes', '1', 'g']]],
{'berries': ['3', 'cup'], 'tomatoes': ['1', 'cup']}],
[['flour', '250', 'g'], ['pea', '3/4', 'tsp'], ['potato', '1', 'g']]],
['generated control 2', [[[['flour', '1/4', 'g']]], {}], [['flour', '1/4', 'g']]],
['generated control 3',
[[[['berries', '2', 'cup'], ['Tomato', '1/2', 'kg']],
[['grape', '1/3', 'tsp'], ['berry', '4', 'kg'], ['egg', '1/4', 'tbsp']]],
{}],
[['berry', '4', 'kg'], ['berry', '2', 'cup'], ['egg', '3/4', 'tsp'], ['grape', '1/3', 'tsp'],
['tomato', '500', 'g']]]],
[['single recipe', [[[['flour', '1', 'cup']]], {}], [['flour', '1', 'cup']]],
['merge plurals', [[[['tomatoes', '2', 'each']], [['Tomato', '1', 'each']]], {}],
[['tomato', '3', 'each']]],
['pantry covers all', [[[['eggs', '2', 'each']]], {'egg': ['6', 'each']}], []],
['regression: cup display threshold',
[[[['berry', '1/4', 'cup'], ['grape', '1/2', 'kg'], ['Tomato', '1', 'tbsp'], ['berries', '3/4', 'each']],
[['berry', '2', 'kg'], ['tomatoes', '2', 'tsp']]],
{}],
[['berry', '3/4', 'each'], ['berry', '2', 'kg'], ['berry', '1/4', 'cup'], ['grape', '500', 'g'],
['tomato', '5/3', 'tbsp']]],
['repair check: cup display threshold',
[[[['berries', '1/3', 'cup'], ['Tomato', '3/4', 'kg']],
[['tomatoes', '3', 'g'], ['peas', '4', 'tbsp'], ['flour', '1/3', 'cup'], ['egg', '1/3', 'tbsp']],
[['grapes', '1', 'each'], ['watercress', '1', 'tbsp'], ['flour', '1/3', 'cup']]],
{'flour': ['1/4', 'tbsp'], 'potatoes': ['1', 'each']}],
[['berry', '1/3', 'cup'], ['egg', '1', 'tsp'], ['flour', '125/192', 'cup'], ['grape', '1', 'each'],
['pea', '1/4', 'cup'], ['tomato', '753', 'g'], ['watercress', '1', 'tbsp']]],
['generated control 1', [[[['watercress', '2', 'cup']]], {}], [['watercress', '2', 'cup']]],
['generated control 2', [[[['Tomato', '1', 'g'], ['tomatoes', '1', 'kg'], ['peas', '3/4', 'kg']]], {}],
[['pea', '750', 'g'], ['tomato', '1001/1000', 'kg']]],
['generated control 3',
[[[['flour', '1', 'tbsp']],
[['grapes', '2', 'tsp'], ['tomatoes', '1/2', 'tsp'], ['peas', '3', 'each'], ['tomatoes', '4', 'tsp']],
[['watercress', '1', 'cup'], ['peas', '2', 'tsp'], ['peas', '3', 'each']]],
{}],
[['flour', '1', 'tbsp'], ['grape', '2', 'tsp'], ['pea', '6', 'each'], ['pea', '2', 'tsp'],
['tomato', '3/2', 'tbsp'], ['watercress', '1', 'cup']]]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single recipe | [['flour', '1', 'cup']] | [['flour', '1', 'cup']] | Passed |
| merge plurals | [['tomato', '3', 'each']] | [['tomato', '3', 'each']] | Passed |
| pantry covers all | [] | [] | Passed |
| regression: cup display threshold | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | [['berry', '1/2', 'each'], ['berry', '19/4', 'kg'], ['berry', '17/32', 'cup'], ['egg', '3', 'kg'], ['grape', '3', 'kg'], ['sugar', '2', 'kg']] | Passed |
| repair check: cup display threshold | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']] | [['berry', '4', 'kg'], ['berry', '1/2', 'tsp'], ['egg', '4', 'g'], ['grape', '2', 'kg'], ['grape', '1/4', 'cup'], ['tomato', '1', 'tsp']] | Passed |
| generated control 1 | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | [['berry', '1/3', 'each'], ['berry', '1000/3', 'g'], ['egg', '3', 'kg'], ['grape', '4/3', 'tbsp'], ['tomato', '2', 'each'], ['tomato', '1', 'tsp']] | Passed |
| generated control 2 | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | [['berry', '4', 'each'], ['berry', '1', 'cup'], ['grape', '3/4', 'tsp'], ['potato', '4', 'cup'], ['watercress', '1/2', 'tsp']] | Passed |
| generated control 3 | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | [['grape', '1/2', 'each'], ['grape', '1', 'g'], ['pea', '1/3', 'cup'], ['watercress', '3/4', 'each'], ['watercress', '1/2', 'tsp']] | Passed |
SHA-256 / 81c82bea2387392b9936511c1f906923293165182e632dc4800184daa0aec4d0
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:29.328271+00:00.
Case digest / b1041cef16b23888c20eae566389ef771cb992b7ebd28e9c69414688bd2d4651