FA-92156 / PLC ladder logic scan cycles / Open access
New step inherits the previous step's excess time · case 01
A step can transition earlier than its minimum because leftover time from the previous step is carried in.
ROOT CAUSE
On transition the step time is reduced by the old minimum instead of reset.
VERIFIED REPAIR
Reset step time to 0 on every transition.
Unsuccessful approach: Seeding the new step with the current scan interval still credits time before activation.
Case contract
Cyclic step sequence with one active step. steps is a list of [min_time_ms, transition_tag]. Each scan [dt, inputs] first adds dt to the step time unless the step became active on the previous scan, then fires the transition if step time >= min_time and the transition tag is true. At most one transition fires per scan; after the last step the sequence returns to step 0; the new step time is 0. Step 0 is active before the first scan as if just entered. Return [active_step, step_time, entered_this_scan].
Why this case matters
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.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(steps, scans):
active = 0
elapsed = 0
entered = True
out = []
for dt, inputs in scans:
if not entered:
elapsed += dt
entered = False
min_ms, cond = steps[active]
if elapsed >= min_ms and inputs.get(cond, False):
active = (active + 1) % len(steps)
elapsed -= min_ms
entered = True
out.append([active, elapsed, entered])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T2'], [100, 'T2']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[1, 90, False],
[1, 110, False],
[2, 0, True],
[2, 0, False],
[2, 50, False]]],
['regression: scenario 2',
[[[20, 'T3'], [20, 'T3'], [20, 'T1']],
[[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[1, 80, False],
[1, 105, False]]],
['regression: scenario 3',
[[[0, 'T2'], [100, 'T3'], [100, 'T2']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[2, 0, True]]],
['regression: scenario 4',
[[[0, 'T2'], [0, 'T3'], [0, 'T3'], [0, 'T2']],
[[20, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[3, 0, True],
[0, 0, True],
[0, 0, False],
[1, 0, True],
[2, 0, True]]]],
[['regression: scenario 1',
[[[100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 65, False],
[0, 75, False],
[1, 0, True],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 75, False]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[100, 'T2'], [0, 'T1'], [50, 'T2'], [20, 'T2']],
[[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[0, 40, False],
[0, 65, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 10, False],
[2, 20, False],
[2, 45, False],
[2, 70, False],
[2, 120, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 3',
[[[0, 'T2'], [0, 'T1'], [50, 'T1']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[2, 0, True],
[2, 0, False],
[0, 0, True],
[0, 0, False],
[0, 25, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 25, False],
[0, 0, True],
[0, 0, False],
[1, 0, True]]],
['regression: scenario 4',
[[[0, 'T1'], [20, 'T2'], [20, 'T3']],
[[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 40, False],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 2',
[[[50, 'T3'], [0, 'T2'], [100, 'T1']],
[[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 80, False],
[1, 0, True],
[1, 0, False],
[1, 25, False],
[1, 35, False],
[1, 60, False],
[2, 0, True],
[2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 1',
[[[0, 'T3'], [20, 'T2'], [0, 'T2']],
[[40, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 50, False],
[0, 0, True]]],
['regression: scenario 3',
[[[50, 'T2'], [0, 'T3'], [100, 'T1'], [20, 'T3']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 25, False],
[0, 35, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 60, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 4',
[[[100, 'T1'], [50, 'T3'], [0, 'T1'], [0, 'T1']],
[[10, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 50, False],
[0, 70, False],
[0, 90, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 3',
[[[100, 'T2'], [0, 'T2'], [0, 'T3']],
[[50, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 70, False],
[1, 0, True],
[2, 0, True],
[2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[50, 'T1'], [50, 'T1'], [100, 'T3'], [20, 'T3']],
[[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[2, 0, True],
[2, 0, False],
[2, 25, False]]],
['regression: scenario 2',
[[[0, 'T2'], [20, 'T3'], [0, 'T3'], [20, 'T1']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[0, 0, False], [0, 10, False], [0, 60, False], [1, 0, True], [1, 0, False], [2, 0, True]]],
['regression: scenario 4',
[[[100, 'T2'], [20, 'T1'], [0, 'T3']],
[[50, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 40, False],
[0, 80, False],
[0, 105, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 70, False],
[1, 120, False],
[2, 0, True],
[2, 0, False]]]],
[['regression: scenario 4',
[[[20, 'T1'], [50, 'T1'], [50, 'T3'], [0, 'T3']],
[[25, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 45, False],
[2, 55, False],
[3, 0, True],
[3, 0, False],
[0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T1'], [20, 'T2']],
[[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 60, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[1, 90, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[20, 'T1'], [20, 'T2'], [100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 35, False],
[1, 85, False],
[2, 0, True],
[2, 0, False],
[2, 20, False]]],
['regression: scenario 3',
[[[20, 'T2'], [50, 'T2'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[0, 0, True],
[0, 0, False],
[0, 10, False],
[0, 35, False],
[1, 0, True]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: late condition | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 25, True], [1, 25, False], [0, 20, True]] | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]] | Failed |
| regression: zero-time step chain | [[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]] | [[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]] | Passed |
| regression: two zero-time steps | [[1, 0, True], [2, 0, True], [2, 0, False]] | [[1, 0, True], [2, 0, True], [2, 0, False]] | Passed |
| regression: exact minimum time | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]] | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]] | Passed |
| regression: scenario 1 | [[0, 0, False], [1, 20, True], [1, 20, False], [1, 70, False], [2, 10, True], [2, 10, False], [2, 35, False], [2, 55, False], [3, 5, True]] | [[0, 0, False], [1, 0, True], [1, 0, False], [1, 50, False], [1, 90, False], [1, 110, False], [2, 0, True], [2, 0, False], [2, 50, False]] | Failed |
| regression: scenario 2 | [[0, 0, False], [0, 40, False], [1, 30, True], [2, 10, True], [2, 10, False], [0, 30, True], [0, 30, False]] | [[0, 0, False], [0, 40, False], [1, 0, True], [1, 0, False], [1, 40, False], [1, 80, False], [1, 105, False]] | Failed |
| regression: scenario 3 | [[1, 0, True], [1, 0, False], [1, 10, False], [1, 20, False], [1, 40, False], [1, 80, False], [2, 5, True]] | [[1, 0, True], [1, 0, False], [1, 10, False], [1, 20, False], [1, 40, False], [1, 80, False], [2, 0, True]] | Failed |
| regression: scenario 4 | [[0, 0, False], [1, 20, True], [1, 20, False], [2, 40, True], [3, 40, True], [0, 40, True], [0, 40, False], [1, 80, True], [2, 80, True]] | [[0, 0, False], [1, 0, True], [1, 0, False], [2, 0, True], [3, 0, True], [0, 0, True], [0, 0, False], [1, 0, True], [2, 0, True]] | Failed |
SHA-256 / 32e13651cdcaee087cb22700d650dbc14581f93ed4a9738182d6ecf8726dd8a1
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(steps, scans):
active = 0
elapsed = 0
entered = True
out = []
for dt, inputs in scans:
if not entered:
elapsed += dt
entered = False
min_ms, cond = steps[active]
if elapsed >= min_ms and inputs.get(cond, False):
active = (active + 1) % len(steps)
elapsed = dt
entered = True
out.append([active, elapsed, entered])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T2'], [100, 'T2']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[1, 90, False],
[1, 110, False],
[2, 0, True],
[2, 0, False],
[2, 50, False]]],
['regression: scenario 2',
[[[20, 'T3'], [20, 'T3'], [20, 'T1']],
[[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[1, 80, False],
[1, 105, False]]],
['regression: scenario 3',
[[[0, 'T2'], [100, 'T3'], [100, 'T2']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[2, 0, True]]],
['regression: scenario 4',
[[[0, 'T2'], [0, 'T3'], [0, 'T3'], [0, 'T2']],
[[20, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[3, 0, True],
[0, 0, True],
[0, 0, False],
[1, 0, True],
[2, 0, True]]]],
[['regression: scenario 1',
[[[100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 65, False],
[0, 75, False],
[1, 0, True],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 75, False]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[100, 'T2'], [0, 'T1'], [50, 'T2'], [20, 'T2']],
[[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[0, 40, False],
[0, 65, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 10, False],
[2, 20, False],
[2, 45, False],
[2, 70, False],
[2, 120, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 3',
[[[0, 'T2'], [0, 'T1'], [50, 'T1']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[2, 0, True],
[2, 0, False],
[0, 0, True],
[0, 0, False],
[0, 25, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 25, False],
[0, 0, True],
[0, 0, False],
[1, 0, True]]],
['regression: scenario 4',
[[[0, 'T1'], [20, 'T2'], [20, 'T3']],
[[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 40, False],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 2',
[[[50, 'T3'], [0, 'T2'], [100, 'T1']],
[[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 80, False],
[1, 0, True],
[1, 0, False],
[1, 25, False],
[1, 35, False],
[1, 60, False],
[2, 0, True],
[2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 1',
[[[0, 'T3'], [20, 'T2'], [0, 'T2']],
[[40, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 50, False],
[0, 0, True]]],
['regression: scenario 3',
[[[50, 'T2'], [0, 'T3'], [100, 'T1'], [20, 'T3']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 25, False],
[0, 35, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 60, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 4',
[[[100, 'T1'], [50, 'T3'], [0, 'T1'], [0, 'T1']],
[[10, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 50, False],
[0, 70, False],
[0, 90, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 3',
[[[100, 'T2'], [0, 'T2'], [0, 'T3']],
[[50, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 70, False],
[1, 0, True],
[2, 0, True],
[2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[50, 'T1'], [50, 'T1'], [100, 'T3'], [20, 'T3']],
[[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[2, 0, True],
[2, 0, False],
[2, 25, False]]],
['regression: scenario 2',
[[[0, 'T2'], [20, 'T3'], [0, 'T3'], [20, 'T1']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[0, 0, False], [0, 10, False], [0, 60, False], [1, 0, True], [1, 0, False], [2, 0, True]]],
['regression: scenario 4',
[[[100, 'T2'], [20, 'T1'], [0, 'T3']],
[[50, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 40, False],
[0, 80, False],
[0, 105, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 70, False],
[1, 120, False],
[2, 0, True],
[2, 0, False]]]],
[['regression: scenario 4',
[[[20, 'T1'], [50, 'T1'], [50, 'T3'], [0, 'T3']],
[[25, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 45, False],
[2, 55, False],
[3, 0, True],
[3, 0, False],
[0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T1'], [20, 'T2']],
[[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 60, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[1, 90, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[20, 'T1'], [20, 'T2'], [100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 35, False],
[1, 85, False],
[2, 0, True],
[2, 0, False],
[2, 20, False]]],
['regression: scenario 3',
[[[20, 'T2'], [50, 'T2'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[0, 0, True],
[0, 0, False],
[0, 10, False],
[0, 35, False],
[1, 0, True]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: late condition | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 15, True], [1, 15, False], [0, 15, True]] | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]] | Failed |
| regression: zero-time step chain | [[0, 0, False], [0, 10, False], [1, 10, True], [2, 15, True], [2, 15, False], [0, 15, True], [0, 15, False]] | [[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]] | Failed |
| regression: two zero-time steps | [[1, 10, True], [2, 10, True], [2, 10, False]] | [[1, 0, True], [2, 0, True], [2, 0, False]] | Failed |
| regression: exact minimum time | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 10, True], [0, 10, True], [0, 10, False]] | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]] | Failed |
| regression: scenario 1 | [[0, 0, False], [1, 20, True], [1, 20, False], [1, 70, False], [2, 40, True], [2, 40, False], [2, 65, False], [2, 85, False], [3, 50, True]] | [[0, 0, False], [1, 0, True], [1, 0, False], [1, 50, False], [1, 90, False], [1, 110, False], [2, 0, True], [2, 0, False], [2, 50, False]] | Failed |
| regression: scenario 2 | [[0, 0, False], [0, 40, False], [1, 10, True], [1, 10, False], [1, 50, False], [1, 90, False], [1, 115, False]] | [[0, 0, False], [0, 40, False], [1, 0, True], [1, 0, False], [1, 40, False], [1, 80, False], [1, 105, False]] | Failed |
| regression: scenario 3 | [[1, 25, True], [1, 25, False], [1, 35, False], [1, 45, False], [1, 65, False], [1, 105, False], [2, 25, True]] | [[1, 0, True], [1, 0, False], [1, 10, False], [1, 20, False], [1, 40, False], [1, 80, False], [2, 0, True]] | Failed |
| regression: scenario 4 | [[0, 0, False], [1, 20, True], [1, 20, False], [2, 20, True], [3, 25, True], [0, 50, True], [0, 50, False], [1, 40, True], [2, 40, True]] | [[0, 0, False], [1, 0, True], [1, 0, False], [2, 0, True], [3, 0, True], [0, 0, True], [0, 0, False], [1, 0, True], [2, 0, True]] | Failed |
SHA-256 / 21c70225c8efb2a9624c432da01c44400516e62352ad04cadbb0641dc00f52fa
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(steps, scans):
active = 0
elapsed = 0
entered = True
out = []
for dt, inputs in scans:
if not entered:
elapsed += dt
entered = False
min_ms, cond = steps[active]
if elapsed >= min_ms and inputs.get(cond, False):
active = (active + 1) % len(steps)
elapsed = 0
entered = True
out.append([active, elapsed, entered])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T2'], [100, 'T2']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[1, 90, False],
[1, 110, False],
[2, 0, True],
[2, 0, False],
[2, 50, False]]],
['regression: scenario 2',
[[[20, 'T3'], [20, 'T3'], [20, 'T1']],
[[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[1, 80, False],
[1, 105, False]]],
['regression: scenario 3',
[[[0, 'T2'], [100, 'T3'], [100, 'T2']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[2, 0, True]]],
['regression: scenario 4',
[[[0, 'T2'], [0, 'T3'], [0, 'T3'], [0, 'T2']],
[[20, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[3, 0, True],
[0, 0, True],
[0, 0, False],
[1, 0, True],
[2, 0, True]]]],
[['regression: scenario 1',
[[[100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 65, False],
[0, 75, False],
[1, 0, True],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 75, False]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[100, 'T2'], [0, 'T1'], [50, 'T2'], [20, 'T2']],
[[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[0, 40, False],
[0, 65, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 10, False],
[2, 20, False],
[2, 45, False],
[2, 70, False],
[2, 120, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 3',
[[[0, 'T2'], [0, 'T1'], [50, 'T1']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[2, 0, True],
[2, 0, False],
[0, 0, True],
[0, 0, False],
[0, 25, False],
[1, 0, True],
[2, 0, True],
[2, 0, False],
[2, 25, False],
[0, 0, True],
[0, 0, False],
[1, 0, True]]],
['regression: scenario 4',
[[[0, 'T1'], [20, 'T2'], [20, 'T3']],
[[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}]]],
[[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 40, False],
[0, 0, True],
[0, 0, False],
[0, 40, False],
[0, 50, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 2',
[[[50, 'T3'], [0, 'T2'], [100, 'T1']],
[[40, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 80, False],
[1, 0, True],
[1, 0, False],
[1, 25, False],
[1, 35, False],
[1, 60, False],
[2, 0, True],
[2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 1',
[[[0, 'T3'], [20, 'T2'], [0, 'T2']],
[[40, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': False, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 20, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[2, 0, True],
[2, 0, False],
[2, 50, False],
[0, 0, True]]],
['regression: scenario 3',
[[[50, 'T2'], [0, 'T3'], [100, 'T1'], [20, 'T3']],
[[25, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 25, False],
[0, 35, False],
[1, 0, True],
[1, 0, False],
[1, 40, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 60, False],
[3, 0, True],
[3, 0, False]]],
['regression: scenario 4',
[[[100, 'T1'], [50, 'T3'], [0, 'T1'], [0, 'T1']],
[[10, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[0, 50, False],
[0, 70, False],
[0, 90, False],
[1, 0, True],
[1, 0, False],
[1, 10, False]]]],
[['regression: scenario 3',
[[[100, 'T2'], [0, 'T2'], [0, 'T3']],
[[50, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 70, False],
[1, 0, True],
[2, 0, True],
[2, 0, False]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: scenario 1',
[[[50, 'T1'], [50, 'T1'], [100, 'T3'], [20, 'T3']],
[[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[1, 0, True],
[1, 0, False],
[1, 50, False],
[2, 0, True],
[2, 0, False],
[2, 25, False]]],
['regression: scenario 2',
[[[0, 'T2'], [20, 'T3'], [0, 'T3'], [20, 'T1']],
[[25, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': True}]]],
[[0, 0, False], [0, 10, False], [0, 60, False], [1, 0, True], [1, 0, False], [2, 0, True]]],
['regression: scenario 4',
[[[100, 'T2'], [20, 'T1'], [0, 'T3']],
[[50, {'T1': False, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': False, 'T2': False, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[0, 10, False],
[0, 30, False],
[0, 40, False],
[0, 80, False],
[0, 105, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 70, False],
[1, 120, False],
[2, 0, True],
[2, 0, False]]]],
[['regression: scenario 4',
[[[20, 'T1'], [50, 'T1'], [50, 'T3'], [0, 'T3']],
[[25, {'T1': True, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': True}],
[50, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': True, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[2, 0, True],
[2, 0, False],
[2, 20, False],
[2, 45, False],
[2, 55, False],
[3, 0, True],
[3, 0, False],
[0, 0, True]]],
['regression: scenario 1',
[[[0, 'T2'], [100, 'T3'], [100, 'T1'], [20, 'T2']],
[[40, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': True, 'T3': True}],
[20, {'T1': True, 'T2': False, 'T3': False}],
[40, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': False, 'T2': False, 'T3': True}]]],
[[0, 0, False],
[0, 40, False],
[0, 50, False],
[0, 60, False],
[1, 0, True],
[1, 0, False],
[1, 20, False],
[1, 40, False],
[1, 80, False],
[1, 90, False]]],
['regression: zero-time step chain',
[[[20, 'A'], [0, 'B'], [30, 'C']],
[[10, {'A': True}],
[10, {'A': True}],
[10, {'A': True, 'B': True}],
[15, {'B': True}],
[15, {'C': True}],
[15, {'C': True}],
[15, {'C': True}]]],
[[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]]],
['regression: two zero-time steps',
[[[0, 'A'], [0, 'A'], [0, 'A'], [50, 'B']], [[10, {'A': True}], [10, {'A': True}], [10, {}]]],
[[1, 0, True], [2, 0, True], [2, 0, False]]],
['regression: exact minimum time',
[[[30, 'X'], [10, 'Y']],
[[10, {}], [10, {}], [10, {}], [10, {'X': True}], [10, {'Y': True}], [10, {'Y': True}]]],
[[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]]],
['regression: late condition',
[[[20, 'X'], [20, 'Y']], [[15, {}], [15, {}], [15, {}], [15, {'X': True}], [15, {}], [15, {'Y': True}]]],
[[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]]],
['regression: scenario 2',
[[[20, 'T1'], [20, 'T2'], [100, 'T3'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[20, {'T1': False, 'T2': False, 'T3': False}],
[10, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': False, 'T3': True}],
[40, {'T1': True, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': False, 'T3': False}],
[20, {'T1': True, 'T2': False, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[1, 10, False],
[1, 35, False],
[1, 85, False],
[2, 0, True],
[2, 0, False],
[2, 20, False]]],
['regression: scenario 3',
[[[20, 'T2'], [50, 'T2'], [0, 'T1']],
[[50, {'T1': False, 'T2': True, 'T3': False}],
[25, {'T1': True, 'T2': True, 'T3': True}],
[25, {'T1': False, 'T2': False, 'T3': False}],
[50, {'T1': False, 'T2': True, 'T3': False}],
[40, {'T1': True, 'T2': False, 'T3': False}],
[50, {'T1': True, 'T2': True, 'T3': True}],
[10, {'T1': False, 'T2': False, 'T3': True}],
[25, {'T1': True, 'T2': False, 'T3': True}],
[25, {'T1': False, 'T2': True, 'T3': False}]]],
[[0, 0, False],
[1, 0, True],
[1, 0, False],
[2, 0, True],
[0, 0, True],
[0, 0, False],
[0, 10, False],
[0, 35, False],
[1, 0, True]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: late condition | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]] | [[0, 0, False], [0, 15, False], [0, 30, False], [1, 0, True], [1, 0, False], [1, 15, False]] | Passed |
| regression: zero-time step chain | [[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]] | [[0, 0, False], [0, 10, False], [1, 0, True], [2, 0, True], [2, 0, False], [2, 15, False], [0, 0, True]] | Passed |
| regression: two zero-time steps | [[1, 0, True], [2, 0, True], [2, 0, False]] | [[1, 0, True], [2, 0, True], [2, 0, False]] | Passed |
| regression: exact minimum time | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]] | [[0, 0, False], [0, 10, False], [0, 20, False], [1, 0, True], [1, 0, False], [0, 0, True]] | Passed |
| regression: scenario 1 | [[0, 0, False], [1, 0, True], [1, 0, False], [1, 50, False], [1, 90, False], [1, 110, False], [2, 0, True], [2, 0, False], [2, 50, False]] | [[0, 0, False], [1, 0, True], [1, 0, False], [1, 50, False], [1, 90, False], [1, 110, False], [2, 0, True], [2, 0, False], [2, 50, False]] | Passed |
| regression: scenario 2 | [[0, 0, False], [0, 40, False], [1, 0, True], [1, 0, False], [1, 40, False], [1, 80, False], [1, 105, False]] | [[0, 0, False], [0, 40, False], [1, 0, True], [1, 0, False], [1, 40, False], [1, 80, False], [1, 105, False]] | Passed |
| regression: scenario 3 | [[1, 0, True], [1, 0, False], [1, 10, False], [1, 20, False], [1, 40, False], [1, 80, False], [2, 0, True]] | [[1, 0, True], [1, 0, False], [1, 10, False], [1, 20, False], [1, 40, False], [1, 80, False], [2, 0, True]] | Passed |
| regression: scenario 4 | [[0, 0, False], [1, 0, True], [1, 0, False], [2, 0, True], [3, 0, True], [0, 0, True], [0, 0, False], [1, 0, True], [2, 0, True]] | [[0, 0, False], [1, 0, True], [1, 0, False], [2, 0, True], [3, 0, True], [0, 0, True], [0, 0, False], [1, 0, True], [2, 0, True]] | Passed |
SHA-256 / 86a9df6f91a484f3f6869b1863e16dd0245f2c5e4022360ce1de734dec5e5a17
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:43.037177+00:00.
Case digest / bd061ade7db650392333b310b90304d4dbebe32fdab301915ff2334a2573bbde