{"abstract":"After a reset issued while the timer stays enabled, the next scan is not credited and completion is late.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Retentive timer (RTO) on rung 1 and its reset (RES) on a later rung, evaluated per scan; scans is a list of [enable, reset, elapsed_ms]. An enabled scan whose previous scan was also enabled adds the elapsed time (clamped at preset); DN sets when ACC >= preset while enabled. A disabled rung retains ACC and DN. Because RES is a later rung, a reset in a scan clears ACC and DN after the RTO has run; the enable edge memory is not touched by RES. Return [DN, ACC] per scan.","evaluation_group":"w2-plc-ladder-logic-scan-cycles-rto-retentive-reset","failed_approach":"Clearing the edge memory only when resetting a done timer still loses a scan in that case.","family":"w2-plc-ladder-logic-scan-cycles-rto-retentive-reset-reset-edge-memory","id":"FA-91911","implementations":{"attempt":{"sha256":"19e525088dd30d24fd42121dab5fb802c7b97e422873f5e55427b36e6526eaa5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        prev = en\n        if res:\n            if dn:\n                prev = False\n            acc = 0\n            dn = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['regression: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 16',\n   [50,\n    [[True, True, 20],\n     [True, True, 20],\n     [True, False, 30],\n     [True, False, 40],\n     [True, True, 20],\n     [True, False, 20],\n     [True, True, 30],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 30],\n     [True, False, 20],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [False, 0],\n    [False, 20],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['control: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]]],\n [['regression: scenario 4',\n   [150,\n    [[True, False, 20],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 20],\n     [True, True, 10],\n     [True, True, 40],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 60],\n    [False, 90],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 40],\n    [False, 40],\n    [False, 40]]],\n  ['regression: scenario 52',\n   [100,\n    [[False, False, 40],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10],\n     [False, False, 10],\n     [False, True, 30],\n     [False, False, 10],\n     [True, True, 40],\n     [True, True, 20],\n     [True, False, 40],\n     [True, False, 20],\n     [True, True, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 80],\n    [False, 80],\n    [False, 80],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 0],\n    [False, 10]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [50,\n    [[False, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [True, True, 10],\n     [False, False, 10],\n     [False, False, 20],\n     [False, True, 40],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [True, 50],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 8',\n   [150,\n    [[True, False, 30],\n     [True, True, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, True, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 40],\n     [False, True, 50],\n     [True, False, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 80],\n    [False, 110],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 10]]],\n  ['regression: scenario 17',\n   [50,\n    [[False, False, 10],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [True, True, 40],\n     [True, False, 30],\n     [True, True, 50]]],\n   [[False, 0], [False, 0], [True, 50], [True, 50], [False, 0], [False, 30], [False, 0]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\nfor label, args, expected in fixtures[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":"bea88db07dc4562345e61e1fbd6f7febc6435a848d1ba5d6624ee2e40803f492","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        prev = en\n        if res:\n            acc = 0\n            dn = False\n            prev = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['regression: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 16',\n   [50,\n    [[True, True, 20],\n     [True, True, 20],\n     [True, False, 30],\n     [True, False, 40],\n     [True, True, 20],\n     [True, False, 20],\n     [True, True, 30],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 30],\n     [True, False, 20],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [False, 0],\n    [False, 20],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['control: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]]],\n [['regression: scenario 4',\n   [150,\n    [[True, False, 20],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 20],\n     [True, True, 10],\n     [True, True, 40],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 60],\n    [False, 90],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 40],\n    [False, 40],\n    [False, 40]]],\n  ['regression: scenario 52',\n   [100,\n    [[False, False, 40],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10],\n     [False, False, 10],\n     [False, True, 30],\n     [False, False, 10],\n     [True, True, 40],\n     [True, True, 20],\n     [True, False, 40],\n     [True, False, 20],\n     [True, True, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 80],\n    [False, 80],\n    [False, 80],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 0],\n    [False, 10]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [50,\n    [[False, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [True, True, 10],\n     [False, False, 10],\n     [False, False, 20],\n     [False, True, 40],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [True, 50],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 8',\n   [150,\n    [[True, False, 30],\n     [True, True, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, True, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 40],\n     [False, True, 50],\n     [True, False, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 80],\n    [False, 110],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 10]]],\n  ['regression: scenario 17',\n   [50,\n    [[False, False, 10],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [True, True, 40],\n     [True, False, 30],\n     [True, True, 50]]],\n   [[False, 0], [False, 0], [True, 50], [True, 50], [False, 0], [False, 30], [False, 0]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\nfor label, args, expected in fixtures[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":"5cbb1d92c96009709dc74bcca0ca7340b27a0c8d7fa800b74266e71b7df20e66","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        prev = en\n        if res:\n            acc = 0\n            dn = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['regression: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 16',\n   [50,\n    [[True, True, 20],\n     [True, True, 20],\n     [True, False, 30],\n     [True, False, 40],\n     [True, True, 20],\n     [True, False, 20],\n     [True, True, 30],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 30],\n     [True, False, 20],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [False, 0],\n    [False, 20],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['control: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]]],\n [['regression: scenario 4',\n   [150,\n    [[True, False, 20],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 20],\n     [True, True, 10],\n     [True, True, 40],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 60],\n    [False, 90],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 40],\n    [False, 40],\n    [False, 40]]],\n  ['regression: scenario 52',\n   [100,\n    [[False, False, 40],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10],\n     [False, False, 10],\n     [False, True, 30],\n     [False, False, 10],\n     [True, True, 40],\n     [True, True, 20],\n     [True, False, 40],\n     [True, False, 20],\n     [True, True, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 80],\n    [False, 80],\n    [False, 80],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 0],\n    [False, 10]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['control: scenario 4',\n   [50,\n    [[False, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [True, True, 10],\n     [False, False, 10],\n     [False, False, 20],\n     [False, True, 40],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [True, 50],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 8',\n   [150,\n    [[True, False, 30],\n     [True, True, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, True, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [True, False, 40],\n     [False, True, 50],\n     [True, False, 50],\n     [True, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 80],\n    [False, 110],\n    [False, 0],\n    [False, 30],\n    [False, 70],\n    [False, 110],\n    [False, 0],\n    [False, 0],\n    [False, 10]]],\n  ['regression: scenario 17',\n   [50,\n    [[False, False, 10],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [True, True, 40],\n     [True, False, 30],\n     [True, True, 50]]],\n   [[False, 0], [False, 0], [True, 50], [True, 50], [False, 0], [False, 30], [False, 0]]],\n  ['control: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['regression: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['control: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\nfor label, args, expected in fixtures[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":"A deterministic bounded teaching model of one PLC instruction or rung pattern evaluated scan by scan. The stated contract is a stipulated toy convention, not a claim of conformance to any vendor controller or IEC 61131-3 runtime. 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-plc-ladder-logic-scan-cycles-rto-retentive-reset-reset-edge-memory","generated_at":"2026-09-29T14:51:40.492485+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ladder programs are executed as repeated scans; each defect here changes what a rung, timer, counter or data-table instruction reports on a particular scan, which is how commissioning and field faults are actually observed.","repair":"RES clears only ACC and DN; the enable edge memory tracks the rung alone.","root_cause":"The reset writes the edge memory as if the rung had been false.","sha256":"f7e41987c3cebb17590e377541bb1b618bfcddb05891f682dd4d3c419c5a7476","title":"RES also clears the RTO enable edge memory · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":80.862,"exit_code":1,"observations":[{"actual":[[false,0],[false,60],[false,0],[false,30],[false,60]],"check":"regression: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0],[false,25]],"check":"regression: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":false},{"actual":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"check":"control: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0]],"check":"control: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"check":"control: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,0]],"check":"regression: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":false},{"actual":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"check":"control: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": true}, {\"check\": \"regression: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0], [false, 25]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": false}, {\"check\": \"control: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": true}, {\"check\": \"control: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 0]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": false}, {\"check\": \"control: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.823,"exit_code":1,"observations":[{"actual":[[false,0],[false,60],[false,0],[false,0],[false,30]],"check":"regression: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":false},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0],[false,25]],"check":"regression: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":false},{"actual":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"check":"control: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0]],"check":"control: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"check":"control: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,0]],"check":"regression: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":false},{"actual":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"check":"control: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 0], [false, 30]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": false}, {\"check\": \"regression: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0], [false, 25]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": false}, {\"check\": \"control: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": true}, {\"check\": \"control: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 0]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": false}, {\"check\": \"control: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":59.207,"exit_code":0,"observations":[{"actual":[[false,0],[false,60],[false,0],[false,30],[false,60]],"check":"regression: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"check":"regression: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":true},{"actual":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"check":"control: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0]],"check":"control: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"check":"control: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"check":"regression: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":true},{"actual":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"check":"control: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": true}, {\"check\": \"regression: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": true}, {\"check\": \"control: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": true}, {\"check\": \"control: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": true}, {\"check\": \"control: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}