{"abstract":"Tiles unsupported on one side survive propagation.","category":"Procedural level generation constraints","checks":8,"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).","evaluation_group":"w2-procedural-level-generation-constraints-strip-wfc","failed_approach":"Checking only the left side ignores right-hand constraints.","family":"w2-procedural-level-generation-constraints-strip-wfc-support-conjunction","id":"FA-86496","implementations":{"attempt":{"sha256":"e7e4213741d52bd27d8dde6b1514851d9058dc009ec8082cb293742794681b36","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(domains, rules):\n    dom = [sorted(set(d)) for d in domains]\n    changed = True\n    while changed:\n        changed = False\n        for i in range(len(dom)):\n            keep = []\n            for t in dom[i]:\n                ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])\n                ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])\n                if ok_left:\n                    keep.append(t)\n            if keep != dom[i]:\n                dom[i] = keep\n                changed = True\n    return {'domains': dom, 'contradiction': any(not d for d in dom)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'sea']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #4',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sand', 'hill', 'sea']],\n    {'sea': ['sand', 'sea'],\n     'sand': ['grass', 'hill'],\n     'grass': ['grass', 'hill', 'sand'],\n     'hill': ['hill', 'sand', 'sea']}],\n   {'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['sand']],\n    {'sea': ['sea'],\n     'sand': ['hill', 'sand', 'sea'],\n     'grass': ['grass', 'hill', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['sand']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['grass'], ['grass', 'sea', 'sand', 'hill']],\n    {'sea': ['grass', 'sand', 'sea'],\n     'sand': ['grass', 'sand'],\n     'grass': ['grass', 'hill'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass'], ['grass', 'hill']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #2',\n   [[['hill', 'grass', 'sea'], ['grass']],\n    {'sea': ['grass', 'sand', 'sea'], 'sand': ['grass', 'sea'], 'grass': ['sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [['sea'], ['grass']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['hill', 'grass', 'sand'],\n     ['sand', 'sea'],\n     ['sand', 'sea', 'grass', 'hill'],\n     ['sea'],\n     ['grass', 'sea', 'hill']],\n    {'sea': ['grass'], 'sand': ['grass', 'sand'], 'grass': ['grass', 'hill', 'sea'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass'], ['sea'], ['grass']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['hill', 'grass', 'sand', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill', 'grass', 'sand', 'sea'],\n     ['sea', 'sand', 'hill', 'grass'],\n     ['sand', 'sea', 'grass', 'hill', 'sea']],\n    {'sea': ['sand'], 'sand': ['hill', 'sand'], 'grass': ['sand', 'sea'], 'hill': ['sand']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['hill', 'sand', 'sea'], ['hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sand', 'sea', 'hill', 'grass'],\n     ['hill', 'sea', 'grass', 'sand'],\n     ['grass', 'sand', 'sea'],\n     ['grass', 'sea', 'grass'],\n     ['grass', 'hill', 'sea']],\n    {'sea': ['hill'], 'sand': ['hill', 'sand'], 'grass': ['hill'], 'hill': ['hill']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea'], ['sand', 'sea'], ['hill', 'sand', 'sea'], ['sea', 'hill', 'sea']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill'], 'grass': ['hill', 'sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sea', 'grass', 'sand']],\n    {'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],\n    {'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False})]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"5c7b12e4cb37ea97246075b7b5af152b72207e9c2065aa40f7efec4c5e810c04","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(domains, rules):\n    dom = [sorted(set(d)) for d in domains]\n    changed = True\n    while changed:\n        changed = False\n        for i in range(len(dom)):\n            keep = []\n            for t in dom[i]:\n                ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])\n                ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])\n                if ok_left or ok_right:\n                    keep.append(t)\n            if keep != dom[i]:\n                dom[i] = keep\n                changed = True\n    return {'domains': dom, 'contradiction': any(not d for d in dom)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'sea']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #4',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sand', 'hill', 'sea']],\n    {'sea': ['sand', 'sea'],\n     'sand': ['grass', 'hill'],\n     'grass': ['grass', 'hill', 'sand'],\n     'hill': ['hill', 'sand', 'sea']}],\n   {'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['sand']],\n    {'sea': ['sea'],\n     'sand': ['hill', 'sand', 'sea'],\n     'grass': ['grass', 'hill', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['sand']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['grass'], ['grass', 'sea', 'sand', 'hill']],\n    {'sea': ['grass', 'sand', 'sea'],\n     'sand': ['grass', 'sand'],\n     'grass': ['grass', 'hill'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass'], ['grass', 'hill']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #2',\n   [[['hill', 'grass', 'sea'], ['grass']],\n    {'sea': ['grass', 'sand', 'sea'], 'sand': ['grass', 'sea'], 'grass': ['sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [['sea'], ['grass']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['hill', 'grass', 'sand'],\n     ['sand', 'sea'],\n     ['sand', 'sea', 'grass', 'hill'],\n     ['sea'],\n     ['grass', 'sea', 'hill']],\n    {'sea': ['grass'], 'sand': ['grass', 'sand'], 'grass': ['grass', 'hill', 'sea'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass'], ['sea'], ['grass']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['hill', 'grass', 'sand', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill', 'grass', 'sand', 'sea'],\n     ['sea', 'sand', 'hill', 'grass'],\n     ['sand', 'sea', 'grass', 'hill', 'sea']],\n    {'sea': ['sand'], 'sand': ['hill', 'sand'], 'grass': ['sand', 'sea'], 'hill': ['sand']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['hill', 'sand', 'sea'], ['hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sand', 'sea', 'hill', 'grass'],\n     ['hill', 'sea', 'grass', 'sand'],\n     ['grass', 'sand', 'sea'],\n     ['grass', 'sea', 'grass'],\n     ['grass', 'hill', 'sea']],\n    {'sea': ['hill'], 'sand': ['hill', 'sand'], 'grass': ['hill'], 'hill': ['hill']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea'], ['sand', 'sea'], ['hill', 'sand', 'sea'], ['sea', 'hill', 'sea']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill'], 'grass': ['hill', 'sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sea', 'grass', 'sand']],\n    {'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],\n    {'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False})]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"e9d5039e47be49b08b98c627e3481f1adff572977d675a888e1d0f73a255d0e4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(domains, rules):\n    dom = [sorted(set(d)) for d in domains]\n    changed = True\n    while changed:\n        changed = False\n        for i in range(len(dom)):\n            keep = []\n            for t in dom[i]:\n                ok_left = i == 0 or any(t in rules.get(l, []) for l in dom[i - 1])\n                ok_right = i == len(dom) - 1 or any(r in rules.get(t, []) for r in dom[i + 1])\n                if ok_left and ok_right:\n                    keep.append(t)\n            if keep != dom[i]:\n                dom[i] = keep\n                changed = True\n    return {'domains': dom, 'contradiction': any(not d for d in dom)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'sea']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['hill'], ['sand', 'hill'], ['sea'], ['grass', 'sand', 'sea', 'hill'], ['sea']],\n    {'sea': ['hill', 'sea'],\n     'sand': ['grass', 'hill', 'sea'],\n     'grass': ['hill', 'sea'],\n     'hill': ['sand', 'sea']}],\n   {'domains': [['hill'], ['sand'], ['sea'], ['hill', 'sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea', 'grass', 'sea'],\n     ['sea', 'sand', 'grass', 'hill'],\n     ['sand', 'sea'],\n     ['sand', 'hill', 'sea', 'grass']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill', 'sand'], 'grass': ['sea'], 'hill': ['sand']}],\n   {'domains': [['hill', 'sea'], ['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass', 'hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['grass', 'sand', 'sea']],\n    {'sea': ['grass', 'sand'], 'sand': ['hill'], 'grass': ['hill'], 'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['hill', 'sea'], ['sea', 'hill', 'sand'], ['hill', 'sea'], ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['sea'], ['sand', 'sea'], ['sea'], ['sea']], 'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sea', 'sand'], ['hill'], ['sand', 'sea'], ['sea', 'grass', 'hill']],\n    {'sea': ['sand'], 'sand': ['grass', 'sand'], 'grass': ['sea'], 'hill': ['grass']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #4',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sand', 'hill', 'sea']],\n    {'sea': ['sand', 'sea'],\n     'sand': ['grass', 'hill'],\n     'grass': ['grass', 'hill', 'sand'],\n     'hill': ['hill', 'sand', 'sea']}],\n   {'domains': [['hill', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['sand']],\n    {'sea': ['sea'],\n     'sand': ['hill', 'sand', 'sea'],\n     'grass': ['grass', 'hill', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['sand']], 'contradiction': False})],\n [('asymmetric rule #1',\n   [[['sand'], ['hill', 'grass']], {'sand': ['grass'], 'grass': ['sand'], 'hill': ['sand']}],\n   {'domains': [['sand'], ['grass']], 'contradiction': False}),\n  ('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('fault site support conjunction #1',\n   [[['grass'], ['grass', 'sea', 'sand', 'hill']],\n    {'sea': ['grass', 'sand', 'sea'],\n     'sand': ['grass', 'sand'],\n     'grass': ['grass', 'hill'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['grass'], ['grass', 'hill']], 'contradiction': False}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill', 'grass', 'sand'],\n     ['grass', 'sand', 'hill', 'sea'],\n     ['hill'],\n     ['sea', 'sand', 'sand'],\n     ['hill', 'grass', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #2',\n   [[['hill', 'grass', 'sea'], ['grass']],\n    {'sea': ['grass', 'sand', 'sea'], 'sand': ['grass', 'sea'], 'grass': ['sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [['sea'], ['grass']], 'contradiction': False}),\n  ('regression support conjunction #3',\n   [[['hill', 'grass', 'sand'],\n     ['sand', 'sea'],\n     ['sand', 'sea', 'grass', 'hill'],\n     ['sea'],\n     ['grass', 'sea', 'hill']],\n    {'sea': ['grass'], 'sand': ['grass', 'sand'], 'grass': ['grass', 'hill', 'sea'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand'], ['sand', 'sea'], ['grass'], ['sea'], ['grass']],\n    'contradiction': False}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['hill', 'grass', 'sand', 'sea']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea']], 'contradiction': False})],\n [('coast gradient #1',\n   [[['sea'], ['sea', 'sand', 'grass', 'hill'], ['hill']],\n    {'sea': ['sea', 'sand'],\n     'sand': ['sea', 'sand', 'grass'],\n     'grass': ['sand', 'grass', 'hill'],\n     'hill': ['grass']}],\n   {'domains': [[], [], []], 'contradiction': True}),\n  ('regression support conjunction #1',\n   [[['sea', 'hill'], ['sea', 'hill', 'grass'], ['sea', 'sand', 'grass', 'hill']],\n    {'sea': ['sand'],\n     'sand': ['grass', 'sand', 'sea'],\n     'grass': ['hill', 'sand', 'sea'],\n     'hill': ['grass', 'hill', 'sea']}],\n   {'domains': [['hill'], ['grass', 'hill', 'sea'], ['grass', 'hill', 'sand', 'sea']],\n    'contradiction': False}),\n  ('fault site support conjunction #1',\n   [[['hill', 'grass', 'sand', 'sea'],\n     ['sea', 'sand', 'hill', 'grass'],\n     ['sand', 'sea', 'grass', 'hill', 'sea']],\n    {'sea': ['sand'], 'sand': ['hill', 'sand'], 'grass': ['sand', 'sea'], 'hill': ['sand']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['hill', 'sand', 'sea'], ['hill', 'sand']],\n    'contradiction': False}),\n  ('regression support conjunction #2',\n   [[['sand', 'sea', 'hill', 'grass'],\n     ['hill', 'sea', 'grass', 'sand'],\n     ['grass', 'sand', 'sea'],\n     ['grass', 'sea', 'grass'],\n     ['grass', 'hill', 'sea']],\n    {'sea': ['hill'], 'sand': ['hill', 'sand'], 'grass': ['hill'], 'hill': ['hill']}],\n   {'domains': [[], [], [], [], []], 'contradiction': True}),\n  ('regression support conjunction #3',\n   [[['sea'], ['sand', 'sea'], ['hill', 'sand', 'sea'], ['sea', 'hill', 'sea']],\n    {'sea': ['grass', 'hill'], 'sand': ['hill'], 'grass': ['hill', 'sea'], 'hill': ['sand', 'sea']}],\n   {'domains': [[], [], [], []], 'contradiction': True}),\n  ('duplicate domain entries #1',\n   [[['grass', 'grass', 'sand']], {'grass': []}],\n   {'domains': [['grass', 'sand']], 'contradiction': False}),\n  ('control #1',\n   [[['sea', 'grass', 'sand']],\n    {'sea': ['hill'], 'sand': ['sea'], 'grass': ['grass', 'sand', 'sea'], 'hill': ['hill']}],\n   {'domains': [['grass', 'sand', 'sea']], 'contradiction': False}),\n  ('control #2',\n   [[['hill', 'sea', 'grass', 'sand'], ['sea', 'grass', 'sand']],\n    {'sea': ['hill', 'sand'], 'sand': ['grass', 'hill', 'sand'], 'grass': ['grass'], 'hill': ['sea']}],\n   {'domains': [['grass', 'hill', 'sand', 'sea'], ['grass', 'sand', 'sea']], 'contradiction': False})]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-procedural-level-generation-constraints-strip-wfc-support-conjunction","generated_at":"2026-09-29T14:50:50.140452+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Restore `if ok_left and ok_right:` at the support conjunction step.","root_cause":"A tile is kept when either side supports it.","sha256":"54d3c2d902c30060a8a1b3ce159e576f829780d6a028a9575bbcc93d9973e2cc","title":"Strip wave-function propagation: One-sided support keeps tiles · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.609,"exit_code":1,"observations":[{"actual":{"contradiction":true,"domains":[["sea"],["sand","sea"],[]]},"check":"coast gradient #1","expected":{"contradiction":true,"domains":[[],[],[]]},"passed":false},{"actual":{"contradiction":false,"domains":[["sand"],["grass"]]},"check":"asymmetric rule #1","expected":{"contradiction":false,"domains":[["sand"],["grass"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["hill"],["sand"],["sea"],["hill","sea"],["sea"]]},"check":"fault site support conjunction #1","expected":{"contradiction":false,"domains":[["hill"],["sand"],["sea"],["hill","sea"],["sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","hill","sea"],["grass","hill","sand","sea"],["sand","sea"],["grass","hill","sand"]]},"check":"regression support conjunction #1","expected":{"contradiction":false,"domains":[["hill","sea"],["grass","hill","sand"],["sand","sea"],["grass","hill","sand"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["hill","sea"],["sand","sea"],["sea"],["sea"]]},"check":"regression support conjunction #2","expected":{"contradiction":false,"domains":[["sea"],["sand","sea"],["sea"],["sea"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["grass","sand"]]},"check":"duplicate domain entries #1","expected":{"contradiction":false,"domains":[["grass","sand"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sand","sea"]]},"check":"control #1","expected":{"contradiction":false,"domains":[["grass","sand","sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sea"]]},"check":"control #2","expected":{"contradiction":false,"domains":[["grass","sea"]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coast gradient #1\", \"actual\": {\"domains\": [[\"sea\"], [\"sand\", \"sea\"], []], \"contradiction\": true}, \"expected\": {\"domains\": [[], [], []], \"contradiction\": true}, \"passed\": false}, {\"check\": \"asymmetric rule #1\", \"actual\": {\"domains\": [[\"sand\"], [\"grass\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sand\"], [\"grass\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"fault site support conjunction #1\", \"actual\": {\"domains\": [[\"hill\"], [\"sand\"], [\"sea\"], [\"hill\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\"], [\"sand\"], [\"sea\"], [\"hill\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"regression support conjunction #1\", \"actual\": {\"domains\": [[\"grass\", \"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\", \"sea\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"regression support conjunction #2\", \"actual\": {\"domains\": [[\"hill\", \"sea\"], [\"sand\", \"sea\"], [\"sea\"], [\"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sea\"], [\"sand\", \"sea\"], [\"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"duplicate domain entries #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #2\", \"actual\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.506,"exit_code":1,"observations":[{"actual":{"contradiction":false,"domains":[["sea"],["grass","sand","sea"],["hill"]]},"check":"coast gradient #1","expected":{"contradiction":true,"domains":[[],[],[]]},"passed":false},{"actual":{"contradiction":false,"domains":[["sand"],["grass","hill"]]},"check":"asymmetric rule #1","expected":{"contradiction":false,"domains":[["sand"],["grass"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["hill"],["hill","sand"],["sea"],["grass","hill","sand","sea"],["sea"]]},"check":"fault site support conjunction #1","expected":{"contradiction":false,"domains":[["hill"],["sand"],["sea"],["hill","sea"],["sea"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["grass","hill","sea"],["grass","hill","sand","sea"],["sand","sea"],["grass","hill","sand","sea"]]},"check":"regression support conjunction #1","expected":{"contradiction":false,"domains":[["hill","sea"],["grass","hill","sand"],["sand","sea"],["grass","hill","sand"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["hill","sea"],["sand","sea"],["hill","sea"],["grass","hill","sea"]]},"check":"regression support conjunction #2","expected":{"contradiction":false,"domains":[["sea"],["sand","sea"],["sea"],["sea"]]},"passed":false},{"actual":{"contradiction":false,"domains":[["grass","sand"]]},"check":"duplicate domain entries #1","expected":{"contradiction":false,"domains":[["grass","sand"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sand","sea"]]},"check":"control #1","expected":{"contradiction":false,"domains":[["grass","sand","sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sea"]]},"check":"control #2","expected":{"contradiction":false,"domains":[["grass","sea"]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coast gradient #1\", \"actual\": {\"domains\": [[\"sea\"], [\"grass\", \"sand\", \"sea\"], [\"hill\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[], [], []], \"contradiction\": true}, \"passed\": false}, {\"check\": \"asymmetric rule #1\", \"actual\": {\"domains\": [[\"sand\"], [\"grass\", \"hill\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sand\"], [\"grass\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"fault site support conjunction #1\", \"actual\": {\"domains\": [[\"hill\"], [\"hill\", \"sand\"], [\"sea\"], [\"grass\", \"hill\", \"sand\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\"], [\"sand\"], [\"sea\"], [\"hill\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"regression support conjunction #1\", \"actual\": {\"domains\": [[\"grass\", \"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\", \"sea\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"regression support conjunction #2\", \"actual\": {\"domains\": [[\"hill\", \"sea\"], [\"sand\", \"sea\"], [\"hill\", \"sea\"], [\"grass\", \"hill\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sea\"], [\"sand\", \"sea\"], [\"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": false}, {\"check\": \"duplicate domain entries #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #2\", \"actual\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.495,"exit_code":0,"observations":[{"actual":{"contradiction":true,"domains":[[],[],[]]},"check":"coast gradient #1","expected":{"contradiction":true,"domains":[[],[],[]]},"passed":true},{"actual":{"contradiction":false,"domains":[["sand"],["grass"]]},"check":"asymmetric rule #1","expected":{"contradiction":false,"domains":[["sand"],["grass"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["hill"],["sand"],["sea"],["hill","sea"],["sea"]]},"check":"fault site support conjunction #1","expected":{"contradiction":false,"domains":[["hill"],["sand"],["sea"],["hill","sea"],["sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["hill","sea"],["grass","hill","sand"],["sand","sea"],["grass","hill","sand"]]},"check":"regression support conjunction #1","expected":{"contradiction":false,"domains":[["hill","sea"],["grass","hill","sand"],["sand","sea"],["grass","hill","sand"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["sea"],["sand","sea"],["sea"],["sea"]]},"check":"regression support conjunction #2","expected":{"contradiction":false,"domains":[["sea"],["sand","sea"],["sea"],["sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sand"]]},"check":"duplicate domain entries #1","expected":{"contradiction":false,"domains":[["grass","sand"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sand","sea"]]},"check":"control #1","expected":{"contradiction":false,"domains":[["grass","sand","sea"]]},"passed":true},{"actual":{"contradiction":false,"domains":[["grass","sea"]]},"check":"control #2","expected":{"contradiction":false,"domains":[["grass","sea"]]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coast gradient #1\", \"actual\": {\"domains\": [[], [], []], \"contradiction\": true}, \"expected\": {\"domains\": [[], [], []], \"contradiction\": true}, \"passed\": true}, {\"check\": \"asymmetric rule #1\", \"actual\": {\"domains\": [[\"sand\"], [\"grass\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sand\"], [\"grass\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"fault site support conjunction #1\", \"actual\": {\"domains\": [[\"hill\"], [\"sand\"], [\"sea\"], [\"hill\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\"], [\"sand\"], [\"sea\"], [\"hill\", \"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"regression support conjunction #1\", \"actual\": {\"domains\": [[\"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"hill\", \"sea\"], [\"grass\", \"hill\", \"sand\"], [\"sand\", \"sea\"], [\"grass\", \"hill\", \"sand\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"regression support conjunction #2\", \"actual\": {\"domains\": [[\"sea\"], [\"sand\", \"sea\"], [\"sea\"], [\"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"sea\"], [\"sand\", \"sea\"], [\"sea\"], [\"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"duplicate domain entries #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sand\", \"sea\"]], \"contradiction\": false}, \"passed\": true}, {\"check\": \"control #2\", \"actual\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"expected\": {\"domains\": [[\"grass\", \"sea\"]], \"contradiction\": false}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}