FA-86491 / Procedural level generation constraints / Open access
Strip wave-function propagation: Domains keep duplicates and input order · case 01
Duplicate tiles skew weighted collapse later.
ROOT CAUSE
Input domains are copied without deduplication or sorting.
VERIFIED REPAIR
Restore `sorted(set(d))` at the domain normalisation step.
Unsuccessful approach: Sorting alone keeps duplicate tiles.
Case contract
A 1D strip of cells, each with a domain of tiles; rules[t] lists tiles allowed immediately to the right of t. Repeatedly remove tile t from cell i unless (i is first or some tile l in cell i-1 allows t on its right) and (i is last or t allows some tile in cell i+1), until stable. Domains are returned as sorted unique lists with a contradiction flag (any empty domain).
Why this case matters
Procedural generators silently emit unplayable or unfair levels when a single constraint check uses the wrong boundary, axis, neighborhood or update order; the defect is visible in exact generated geometry.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(domains, rules):
dom = [list(d) for d in domains]
changed = True
while changed:
changed = False
for i in range(len(dom)):
keep = []
for t in dom[i]:
ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])
ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])
if ok_left and ok_right:
keep.append(t)
if keep != dom[i]:
dom[i] = keep
changed = True
return {'domains': dom, 'contradiction': any(not d for d in dom)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'grass', 'sand', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],
{'sea': ['hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill', 'sea'],
'hill': ['sand', 'sea']}],
{'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'sea'],
['sea', 'sand', 'grass', 'hill', 'sea'],
['sand', 'grass'],
['sea', 'hill', 'grass', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'sand'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'hill', 'sand', 'sea', 'sand'],
['sea', 'grass', 'hill', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['sand', 'sea', 'grass'], ['sand', 'sea', 'grass'], ['hill', 'sand', 'grass', 'hill']],
{'sea': ['grass', 'hill', 'sand'],
'sand': ['grass', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand']}],
{'domains': [['grass', 'sand', 'sea'], ['grass', 'sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'hill']],
{'sea': ['hill'], 'sand': ['grass', 'sand', 'sea'], 'grass': ['sea'], 'hill': ['grass', 'hill']}],
{'domains': [['hill', 'sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['sea', 'sand', 'grass'],
['sea', 'sand', 'hill', 'grass'],
['sea', 'grass', 'hill', 'sand', 'sand'],
['hill', 'sand', 'sea', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['grass', 'sand'],
['sea', 'sand', 'grass', 'hill'],
['sea', 'grass', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand', 'grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'grass', 'sand']],
{'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],
{'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],
{'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['sea', 'sea']],
{'sea': ['grass', 'hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill'],
'hill': ['grass', 'sand']}],
{'domains': [['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass', 'sea', 'hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['sand']],
{'sea': ['sea'],
'sand': ['hill', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sea'],
'hill': ['grass', 'hill', 'sea']}],
{'domains': [['sand']], 'contradiction': False})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| duplicate domain entries #1 | {'contradiction': False, 'domains': [['grass', 'grass', 'sand']]} | {'contradiction': False, 'domains': [['grass', 'sand']]} | Failed |
| fault site domain normalisation #1 | {'contradiction': False, 'domains': [['hill', 'grass', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'hill', 'sand', 'sea']]} | Failed |
| fault site domain normalisation #2 | {'contradiction': False, 'domains': [['sand', 'hill', 'sea']]} | {'contradiction': False, 'domains': [['hill', 'sand', 'sea']]} | Failed |
| regression domain normalisation #1 | {'contradiction': False, 'domains': [['hill', 'sea', 'sea'], ['sand', 'grass', 'hill'], ['sand', 'sea'], ['sand', 'hill', 'grass']]} | {'contradiction': False, 'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']]} | Failed |
| regression domain normalisation #2 | {'contradiction': False, 'domains': [['hill', 'hill'], ['grass'], ['grass']]} | {'contradiction': False, 'domains': [['hill'], ['grass'], ['grass']]} | Failed |
| coast gradient #1 | {'contradiction': True, 'domains': [[], [], []]} | {'contradiction': True, 'domains': [[], [], []]} | Passed |
| asymmetric rule #1 | {'contradiction': False, 'domains': [['sand'], ['grass']]} | {'contradiction': False, 'domains': [['sand'], ['grass']]} | Passed |
| control #1 | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | Passed |
SHA-256 / 957359e37336ad8105aab1cfb5dfdb08145a44f9c2da20098de858dc275adbef
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(domains, rules):
dom = [sorted(d) for d in domains]
changed = True
while changed:
changed = False
for i in range(len(dom)):
keep = []
for t in dom[i]:
ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])
ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])
if ok_left and ok_right:
keep.append(t)
if keep != dom[i]:
dom[i] = keep
changed = True
return {'domains': dom, 'contradiction': any(not d for d in dom)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'grass', 'sand', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],
{'sea': ['hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill', 'sea'],
'hill': ['sand', 'sea']}],
{'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'sea'],
['sea', 'sand', 'grass', 'hill', 'sea'],
['sand', 'grass'],
['sea', 'hill', 'grass', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'sand'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'hill', 'sand', 'sea', 'sand'],
['sea', 'grass', 'hill', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['sand', 'sea', 'grass'], ['sand', 'sea', 'grass'], ['hill', 'sand', 'grass', 'hill']],
{'sea': ['grass', 'hill', 'sand'],
'sand': ['grass', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand']}],
{'domains': [['grass', 'sand', 'sea'], ['grass', 'sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'hill']],
{'sea': ['hill'], 'sand': ['grass', 'sand', 'sea'], 'grass': ['sea'], 'hill': ['grass', 'hill']}],
{'domains': [['hill', 'sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['sea', 'sand', 'grass'],
['sea', 'sand', 'hill', 'grass'],
['sea', 'grass', 'hill', 'sand', 'sand'],
['hill', 'sand', 'sea', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['grass', 'sand'],
['sea', 'sand', 'grass', 'hill'],
['sea', 'grass', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand', 'grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'grass', 'sand']],
{'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],
{'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],
{'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['sea', 'sea']],
{'sea': ['grass', 'hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill'],
'hill': ['grass', 'sand']}],
{'domains': [['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass', 'sea', 'hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['sand']],
{'sea': ['sea'],
'sand': ['hill', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sea'],
'hill': ['grass', 'hill', 'sea']}],
{'domains': [['sand']], 'contradiction': False})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| duplicate domain entries #1 | {'contradiction': False, 'domains': [['grass', 'grass', 'sand']]} | {'contradiction': False, 'domains': [['grass', 'sand']]} | Failed |
| fault site domain normalisation #1 | {'contradiction': False, 'domains': [['grass', 'hill', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'hill', 'sand', 'sea']]} | Passed |
| fault site domain normalisation #2 | {'contradiction': False, 'domains': [['hill', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['hill', 'sand', 'sea']]} | Passed |
| regression domain normalisation #1 | {'contradiction': False, 'domains': [['hill', 'sea', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']]} | {'contradiction': False, 'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']]} | Failed |
| regression domain normalisation #2 | {'contradiction': False, 'domains': [['hill', 'hill'], ['grass'], ['grass']]} | {'contradiction': False, 'domains': [['hill'], ['grass'], ['grass']]} | Failed |
| coast gradient #1 | {'contradiction': True, 'domains': [[], [], []]} | {'contradiction': True, 'domains': [[], [], []]} | Passed |
| asymmetric rule #1 | {'contradiction': False, 'domains': [['sand'], ['grass']]} | {'contradiction': False, 'domains': [['sand'], ['grass']]} | Passed |
| control #1 | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | Passed |
SHA-256 / 1d7b329a35c38e440a2262ee91d88bcc2dbfe4f5419a57ddf24bb774cebac8c0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(domains, rules):
dom = [sorted(set(d)) for d in domains]
changed = True
while changed:
changed = False
for i in range(len(dom)):
keep = []
for t in dom[i]:
ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])
ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])
if ok_left and ok_right:
keep.append(t)
if keep != dom[i]:
dom[i] = keep
changed = True
return {'domains': dom, 'contradiction': any(not d for d in dom)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'grass', 'sand', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sand', 'hill', 'sea']],
{'sea': ['sand', 'sea'],
'sand': ['grass', 'hill'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand', 'sea']}],
{'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],
{'sea': ['hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill', 'sea'],
'hill': ['sand', 'sea']}],
{'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'sea'],
['sea', 'sand', 'grass', 'hill', 'sea'],
['sand', 'grass'],
['sea', 'hill', 'grass', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'sand'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'sea', 'grass', 'sea'],
['sea', 'sand', 'grass', 'hill'],
['sand', 'sea'],
['sand', 'hill', 'sea', 'grass']],
{'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],
{'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('fault site domain normalisation #1',
[[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['grass', 'hill', 'sand', 'sea', 'sand'],
['sea', 'grass', 'hill', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['sand', 'sea', 'grass'], ['sand', 'sea', 'grass'], ['hill', 'sand', 'grass', 'hill']],
{'sea': ['grass', 'hill', 'sand'],
'sand': ['grass', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sand'],
'hill': ['hill', 'sand']}],
{'domains': [['grass', 'sand', 'sea'], ['grass', 'sand', 'sea'], ['grass', 'hill', 'sand']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sand', 'sea']],
{'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('regression domain normalisation #1',
[[['hill', 'hill'], ['grass'], ['grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass'], ['grass']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'hill']],
{'sea': ['hill'], 'sand': ['grass', 'sand', 'sea'], 'grass': ['sea'], 'hill': ['grass', 'hill']}],
{'domains': [['hill', 'sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['sea', 'sand', 'grass'],
['sea', 'sand', 'hill', 'grass'],
['sea', 'grass', 'hill', 'sand', 'sand'],
['hill', 'sand', 'sea', 'grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('regression domain normalisation #3',
[[['grass', 'sand'],
['sea', 'sand', 'grass', 'hill'],
['sea', 'grass', 'sand', 'hill'],
['sea', 'grass', 'hill', 'sand', 'grass']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sand'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea'],
['grass', 'hill', 'sand', 'sea']],
'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['grass', 'sea']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['grass', 'sea']], 'contradiction': False})],
[('duplicate domain entries #1',
[[['grass', 'grass', 'sand']], {'grass': []}],
{'domains': [['grass', 'sand']], 'contradiction': False}),
('fault site domain normalisation #1',
[[['sea', 'grass', 'sand']],
{'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],
{'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),
('fault site domain normalisation #2',
[[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],
{'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],
{'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False}),
('regression domain normalisation #1',
[[['sea', 'sea']],
{'sea': ['grass', 'hill', 'sea'],
'sand': ['grass', 'hill', 'sea'],
'grass': ['hill'],
'hill': ['grass', 'sand']}],
{'domains': [['sea']], 'contradiction': False}),
('regression domain normalisation #2',
[[['hill', 'hill'], ['grass', 'sea', 'hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [['hill'], ['grass']], 'contradiction': False}),
('coast gradient #1',
[[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],
{'sea': ['sea', 'sand'],
'sand': ['sea', 'sand', 'grass'],
'grass': ['sand', 'grass', 'hill'],
'hill': ['grass']}],
{'domains': [[], [], []], 'contradiction': True}),
('asymmetric rule #1',
[[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],
{'domains': [['sand'], ['grass']], 'contradiction': False}),
('control #1',
[[['sand']],
{'sea': ['sea'],
'sand': ['hill', 'sand', 'sea'],
'grass': ['grass', 'hill', 'sea'],
'hill': ['grass', 'hill', 'sea']}],
{'domains': [['sand']], 'contradiction': False})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| duplicate domain entries #1 | {'contradiction': False, 'domains': [['grass', 'sand']]} | {'contradiction': False, 'domains': [['grass', 'sand']]} | Passed |
| fault site domain normalisation #1 | {'contradiction': False, 'domains': [['grass', 'hill', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'hill', 'sand', 'sea']]} | Passed |
| fault site domain normalisation #2 | {'contradiction': False, 'domains': [['hill', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['hill', 'sand', 'sea']]} | Passed |
| regression domain normalisation #1 | {'contradiction': False, 'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']]} | {'contradiction': False, 'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']]} | Passed |
| regression domain normalisation #2 | {'contradiction': False, 'domains': [['hill'], ['grass'], ['grass']]} | {'contradiction': False, 'domains': [['hill'], ['grass'], ['grass']]} | Passed |
| coast gradient #1 | {'contradiction': True, 'domains': [[], [], []]} | {'contradiction': True, 'domains': [[], [], []]} | Passed |
| asymmetric rule #1 | {'contradiction': False, 'domains': [['sand'], ['grass']]} | {'contradiction': False, 'domains': [['sand'], ['grass']]} | Passed |
| control #1 | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | {'contradiction': False, 'domains': [['grass', 'sand', 'sea']]} | Passed |
SHA-256 / 918875d5ca7e4c336e4d4f516cd3bffa0f610319894bcbe22440b26967221063
Verification & scope
Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. 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:50:50.114237+00:00.
Case digest / ac0ae3fdc2770fab877a85f8a5a589094f97a4f1129253452058517b1e8dd825