{"abstract":"On a reset scan with the timer enabled, ACC ends the scan non-zero instead of cleared.","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":"Moving the reset first and also clearing the enable edge memory still loses the next scan's credit.","family":"w2-plc-ladder-logic-scan-cycles-rto-retentive-reset-reset-rung-order","id":"FA-91901","implementations":{"attempt":{"sha256":"82046a6b019237b525fa79c461f75411a8a0e3c12f8a16fabeedf00226826c8f","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 res:\n            acc = 0\n            dn = False\n            prev = False\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        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: scenario 5',\n   [0,\n    [[True, False, 20],\n     [False, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 30],\n     [False, True, 40],\n     [True, False, 10],\n     [False, False, 20],\n     [False, True, 40]]],\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    [False, 0],\n    [True, 0],\n    [True, 0],\n    [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 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   [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 [['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 6',\n   [0,\n    [[True, True, 10],\n     [True, False, 40],\n     [False, True, 40],\n     [True, True, 20],\n     [True, False, 30],\n     [False, True, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 20],\n     [False, False, 10]]],\n   [[False, 0],\n    [True, 0],\n    [False, 0],\n    [False, 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  ['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  ['regression: 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  ['control: 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 24',\n   [0,\n    [[False, False, 40],\n     [True, False, 10],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[False, 0], [True, 0], [False, 0], [False, 0], [True, 0], [True, 0], [True, 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    [[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 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  ['regression: scenario 19',\n   [0,\n    [[False, False, 10],\n     [True, True, 30],\n     [True, False, 20],\n     [True, False, 20],\n     [False, True, 40],\n     [True, True, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 10],\n     [False, False, 30],\n     [True, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [False, 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: 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  ['regression: 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 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: scenario 6',\n   [0,\n    [[True, True, 30],\n     [True, True, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [True, False, 30],\n     [True, True, 50],\n     [True, False, 10],\n     [False, False, 50],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 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  ['regression: scenario 32',\n   [0,\n    [[True, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 30],\n     [True, True, 40],\n     [True, False, 50]]],\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    [False, 0],\n    [True, 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":"d473aa1415c2ef8838b50ff1dba8aaf9398cb69bf915375cb9f5f86fe74277f0","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 res:\n            acc = 0\n            dn = False\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        prev = en\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: scenario 5',\n   [0,\n    [[True, False, 20],\n     [False, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 30],\n     [False, True, 40],\n     [True, False, 10],\n     [False, False, 20],\n     [False, True, 40]]],\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    [False, 0],\n    [True, 0],\n    [True, 0],\n    [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 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   [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 [['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 6',\n   [0,\n    [[True, True, 10],\n     [True, False, 40],\n     [False, True, 40],\n     [True, True, 20],\n     [True, False, 30],\n     [False, True, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 20],\n     [False, False, 10]]],\n   [[False, 0],\n    [True, 0],\n    [False, 0],\n    [False, 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  ['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  ['regression: 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  ['control: 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 24',\n   [0,\n    [[False, False, 40],\n     [True, False, 10],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[False, 0], [True, 0], [False, 0], [False, 0], [True, 0], [True, 0], [True, 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    [[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 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  ['regression: scenario 19',\n   [0,\n    [[False, False, 10],\n     [True, True, 30],\n     [True, False, 20],\n     [True, False, 20],\n     [False, True, 40],\n     [True, True, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 10],\n     [False, False, 30],\n     [True, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [False, 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: 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  ['regression: 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 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: scenario 6',\n   [0,\n    [[True, True, 30],\n     [True, True, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [True, False, 30],\n     [True, True, 50],\n     [True, False, 10],\n     [False, False, 50],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 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  ['regression: scenario 32',\n   [0,\n    [[True, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 30],\n     [True, True, 40],\n     [True, False, 50]]],\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    [False, 0],\n    [True, 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":"7cae5dc66b05df2ad30db2857b179f9d61a4faf916accbbc3ecb06bd76b393bd","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: scenario 5',\n   [0,\n    [[True, False, 20],\n     [False, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 30],\n     [False, True, 40],\n     [True, False, 10],\n     [False, False, 20],\n     [False, True, 40]]],\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    [False, 0],\n    [True, 0],\n    [True, 0],\n    [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 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   [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 [['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 6',\n   [0,\n    [[True, True, 10],\n     [True, False, 40],\n     [False, True, 40],\n     [True, True, 20],\n     [True, False, 30],\n     [False, True, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 10],\n     [False, False, 20],\n     [False, False, 10]]],\n   [[False, 0],\n    [True, 0],\n    [False, 0],\n    [False, 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  ['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  ['regression: 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  ['control: 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 24',\n   [0,\n    [[False, False, 40],\n     [True, False, 10],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[False, 0], [True, 0], [False, 0], [False, 0], [True, 0], [True, 0], [True, 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    [[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 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  ['regression: scenario 19',\n   [0,\n    [[False, False, 10],\n     [True, True, 30],\n     [True, False, 20],\n     [True, False, 20],\n     [False, True, 40],\n     [True, True, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 10],\n     [False, False, 30],\n     [True, False, 30],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [False, 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: 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  ['regression: 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 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: scenario 6',\n   [0,\n    [[True, True, 30],\n     [True, True, 40],\n     [False, False, 10],\n     [False, False, 10],\n     [True, False, 30],\n     [True, True, 50],\n     [True, False, 10],\n     [False, False, 50],\n     [True, False, 10],\n     [False, False, 40],\n     [False, False, 40],\n     [False, False, 20]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 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  ['regression: scenario 32',\n   [0,\n    [[True, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 30],\n     [True, True, 40],\n     [True, False, 50]]],\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    [False, 0],\n    [True, 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-rung-order","generated_at":"2026-09-29T14:51:40.466267+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":"Apply RES after the RTO instruction, matching its later rung position.","root_cause":"The reset is processed at the top of the scan, so the later RTO rung re-accumulates in the same scan.","sha256":"900449c33dcb748d8632a14790a82760f368d77919b3b44f56107c738e711f78","title":"RES rung is applied before the RTO rung in the same scan · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":50.857,"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":[[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"check":"regression: scenario 5","expected":[[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"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,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],[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}],"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: scenario 5\", \"actual\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"expected\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"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\": \"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: 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}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.052,"exit_code":1,"observations":[{"actual":[[false,0],[false,60],[false,30],[false,60],[false,90]],"check":"regression: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":false},{"actual":[[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"check":"regression: scenario 5","expected":[[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"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,10],[false,35],[true,50]],"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],[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,10],[false,60]],"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}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 30], [false, 60], [false, 90]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": false}, {\"check\": \"regression: scenario 5\", \"actual\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"expected\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"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\": \"regression: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 10], [false, 35], [true, 50]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": false}, {\"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, 10], [false, 60]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":91.345,"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":[[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"check":"regression: scenario 5","expected":[[true,0],[true,0],[true,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0],[true,0],[true,0],[false,0]],"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,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],[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}],"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: scenario 5\", \"actual\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"expected\": [[true, 0], [true, 0], [true, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0], [true, 0], [true, 0], [false, 0]], \"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\": \"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: 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}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}