FA-68111 / Traffic signal timing plans / Open access
Dual-ring barrier sequencing: ring 1 alone decides when the barrier is crossed · case 01
Dual-ring barrier sequencing returns a wrong result when ring 1 alone decides when the barrier is crossed.
ROOT CAUSE
The barrier is crossed when ring 1 finishes, cutting short a longer ring 2 and overlapping conflicting phases.
VERIFIED REPAIR
Restore the barrier crossing time rule so that the step reads `t0 = max(ends)`.
Unsuccessful approach: Crossing at the earlier ring end is the same violation in the other direction.
Case contract
Input {ring1: [[1,d],[2,d],[3,d],[4,d]], ring2: [[5,d],[6,d],[7,d],[8,d]] with durations including clearance, calls, lag}. Phases 1-2/5-6 are left of the barrier and 3-4/7-8 right of it. On each side both rings start together at the barrier; if the first phase of a ring's pair is in lag the pair is swapped. Phases without calls are skipped and take no time. Both rings cross a barrier together when the slower ring finishes. Return {starts: sorted [phase, start], cycle}.
Why this case matters
Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
calls = set(x['calls'])
lag = set(x['lag'])
t0 = 0
starts = []
for side in (0, 1):
ends = []
for ring in (x['ring1'], x['ring2']):
pair = ring[2 * side:2 * side + 2]
if pair[0][0] in lag:
pair = [pair[1], pair[0]]
t = t0
for ph, dur in pair:
if ph in calls:
starts.append([ph, t])
t += dur
ends.append(t)
t0 = ends[0]
return {'starts': sorted(starts), 'cycle': t0}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'ring1': [[1, 25], [2, 16], [3, 33], [4, 26]], 'ring2': [[5, 12], [6, 24], [7, 38], [8, 33]], 'calls': [5, 7, 8], 'lag': [6]}, {'starts': [[5, 0], [7, 12], [8, 50]], 'cycle': 83}), ({'ring1': [[1, 33], [2, 34], [3, 13], [4, 35]], 'ring2': [[5, 34], [6, 32], [7, 24], [8, 36]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [4, 6, 7]}, {'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]], 'cycle': 127}), ({'ring1': [[1, 38], [2, 36], [3, 23], [4, 19]], 'ring2': [[5, 11], [6, 11], [7, 37], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 7], 'lag': [1]}, {'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 37], [2, 12], [3, 24], [4, 28]], 'ring2': [[5, 26], [6, 28], [7, 35], [8, 36]], 'calls': [1, 3, 5, 8], 'lag': [4, 8]}, {'starts': [[1, 0], [3, 37], [5, 0], [8, 37]], 'cycle': 73}), ({'ring1': [[1, 21], [2, 17], [3, 31], [4, 14]], 'ring2': [[5, 11], [6, 36], [7, 33], [8, 29]], 'calls': [3, 5, 6, 7, 8], 'lag': [2, 3, 5, 6]}, {'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]], 'cycle': 109}), ({'ring1': [[1, 19], [2, 40], [3, 21], [4, 28]], 'ring2': [[5, 8], [6, 8], [7, 20], [8, 25]], 'calls': [1, 2, 3, 4, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]], 'cycle': 108})], [({'ring1': [[1, 39], [2, 22], [3, 29], [4, 13]], 'ring2': [[5, 14], [6, 35], [7, 12], [8, 26]], 'calls': [1, 2, 3, 6, 7, 8], 'lag': [2, 5]}, {'starts': [[1, 0], [2, 39], [3, 61], [6, 0], [7, 61], [8, 73]], 'cycle': 99}), ({'ring1': [[1, 8], [2, 31], [3, 14], [4, 9]], 'ring2': [[5, 15], [6, 22], [7, 25], [8, 33]], 'calls': [1, 2, 3, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 8], [3, 39], [5, 0]], 'cycle': 53}), ({'ring1': [[1, 29], [2, 38], [3, 11], [4, 28]], 'ring2': [[5, 31], [6, 19], [7, 17], [8, 27]], 'calls': [1, 2, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 38], [2, 0], [5, 0], [6, 31], [7, 67], [8, 84]], 'cycle': 111}), ({'ring1': [[1, 25], [2, 32], [3, 17], [4, 38]], 'ring2': [[5, 21], [6, 22], [7, 20], [8, 28]], 'calls': [2, 3, 4, 5, 6, 7], 'lag': [1, 4, 5]}, {'starts': [[2, 0], [3, 43], [4, 60], [5, 22], [6, 0], [7, 43]], 'cycle': 98}), ({'ring1': [[1, 19], [2, 27], [3, 18], [4, 34]], 'ring2': [[5, 34], [6, 20], [7, 30], [8, 15]], 'calls': [1, 2, 3, 4, 7], 'lag': [5, 6]}, {'starts': [[1, 0], [2, 19], [3, 46], [4, 64], [7, 46]], 'cycle': 98}), ({'ring1': [[1, 28], [2, 19], [3, 32], [4, 37]], 'ring2': [[5, 40], [6, 9], [7, 19], [8, 31]], 'calls': [1, 2, 3, 4, 5], 'lag': [2, 5, 6]}, {'starts': [[1, 0], [2, 28], [3, 47], [4, 79], [5, 0]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72})], [({'ring1': [[1, 26], [2, 30], [3, 11], [4, 9]], 'ring2': [[5, 17], [6, 20], [7, 29], [8, 35]], 'calls': [1, 2, 4, 5, 6, 7, 8], 'lag': [3, 6, 7, 8]}, {'starts': [[1, 0], [2, 26], [4, 56], [5, 0], [6, 17], [7, 91], [8, 56]], 'cycle': 120}), ({'ring1': [[1, 32], [2, 15], [3, 34], [4, 12]], 'ring2': [[5, 12], [6, 27], [7, 31], [8, 11]], 'calls': [1, 3, 4, 7, 8], 'lag': [1]}, {'starts': [[1, 0], [3, 32], [4, 66], [7, 32], [8, 63]], 'cycle': 78}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 8], [2, 24], [3, 39], [4, 19]], 'ring2': [[5, 32], [6, 37], [7, 23], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': [1, 2, 8]}, {'starts': [[1, 24], [2, 0], [3, 69], [4, 108], [5, 0], [6, 32], [8, 69]], 'cycle': 127}), ({'ring1': [[1, 12], [2, 36], [3, 34], [4, 8]], 'ring2': [[5, 22], [6, 13], [7, 28], [8, 32]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 36], [2, 0], [3, 48], [4, 82], [5, 0], [6, 22], [7, 48], [8, 76]], 'cycle': 108}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 38], [3, 32], [4, 16]], 'ring2': [[5, 29], [6, 36], [7, 16], [8, 35]], 'calls': [1, 3, 4, 5, 6, 8], 'lag': [4, 6]}, {'starts': [[1, 0], [3, 65], [4, 97], [5, 0], [6, 29], [8, 65]], 'cycle': 113}), ({'ring1': [[1, 24], [2, 15], [3, 18], [4, 37]], 'ring2': [[5, 15], [6, 24], [7, 11], [8, 9]], 'calls': [1, 3, 4, 5, 6, 7], 'lag': [6, 7, 8]}, {'starts': [[1, 0], [3, 39], [4, 57], [5, 0], [6, 15], [7, 39]], 'cycle': 94})], [({'ring1': [[1, 32], [2, 16], [3, 35], [4, 40]], 'ring2': [[5, 40], [6, 21], [7, 39], [8, 19]], 'calls': [1, 3, 5, 6, 7], 'lag': []}, {'starts': [[1, 0], [3, 61], [5, 0], [6, 40], [7, 61]], 'cycle': 100}), ({'ring1': [[1, 37], [2, 38], [3, 19], [4, 16]], 'ring2': [[5, 10], [6, 11], [7, 40], [8, 11]], 'calls': [1, 3, 4, 5, 7], 'lag': [2, 4]}, {'starts': [[1, 0], [3, 37], [4, 56], [5, 0], [7, 37]], 'cycle': 77}), ({'ring1': [[1, 27], [2, 25], [3, 10], [4, 36]], 'ring2': [[5, 9], [6, 39], [7, 24], [8, 32]], 'calls': [1, 2, 4, 5, 7], 'lag': [2, 4, 7, 8]}, {'starts': [[1, 0], [2, 27], [4, 52], [5, 0], [7, 52]], 'cycle': 88}), ({'ring1': [[1, 23], [2, 10], [3, 29], [4, 20]], 'ring2': [[5, 20], [6, 34], [7, 33], [8, 39]], 'calls': [2, 3, 5, 6, 7], 'lag': [1]}, {'starts': [[2, 0], [3, 54], [5, 0], [6, 20], [7, 54]], 'cycle': 87}), ({'ring1': [[1, 32], [2, 38], [3, 17], [4, 17]], 'ring2': [[5, 27], [6, 13], [7, 17], [8, 37]], 'calls': [1, 5, 6, 8], 'lag': [3, 4]}, {'starts': [[1, 0], [5, 0], [6, 27], [8, 40]], 'cycle': 77}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 28], [3, 23], [4, 32]], 'ring2': [[5, 15], [6, 27], [7, 40], [8, 23]], 'calls': [1, 2, 6, 7, 8], 'lag': [1, 4, 7, 8]}, {'starts': [[1, 28], [2, 0], [6, 0], [7, 69], [8, 46]], 'cycle': 109})], [({'ring1': [[1, 8], [2, 28], [3, 10], [4, 30]], 'ring2': [[5, 34], [6, 19], [7, 32], [8, 24]], 'calls': [1, 2, 3, 4, 5, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 28], [2, 0], [3, 36], [4, 46], [5, 0], [7, 36], [8, 68]], 'cycle': 92}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 22], [2, 30], [3, 20], [4, 40]], 'ring2': [[5, 10], [6, 36], [7, 25], [8, 14]], 'calls': [1, 3, 5, 6, 7, 8], 'lag': [4]}, {'starts': [[1, 0], [3, 46], [5, 0], [6, 10], [7, 46], [8, 71]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 37], [2, 14], [3, 23], [4, 35]], 'ring2': [[5, 37], [6, 26], [7, 17], [8, 24]], 'calls': [3, 4, 5, 6, 8], 'lag': [1, 8]}, {'starts': [[3, 63], [4, 86], [5, 0], [6, 37], [8, 63]], 'cycle': 121}), ({'ring1': [[1, 17], [2, 38], [3, 37], [4, 18]], 'ring2': [[5, 24], [6, 10], [7, 27], [8, 21]], 'calls': [1, 2, 3, 5, 6, 7, 8], 'lag': [2, 7]}, {'starts': [[1, 0], [2, 17], [3, 55], [5, 0], [6, 24], [7, 76], [8, 55]], 'cycle': 103}), ({'ring1': [[1, 35], [2, 15], [3, 12], [4, 14]], 'ring2': [[5, 23], [6, 12], [7, 24], [8, 35]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': []}, {'starts': [[1, 0], [2, 35], [3, 50], [4, 62], [5, 0], [6, 23], [8, 50]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 33], [3, 40], [4, 32]], 'ring2': [[5, 10], [6, 24], [7, 21], [8, 40]], 'calls': [1, 2, 4, 6, 7, 8], 'lag': [2]}, {'starts': [[1, 0], [2, 12], [4, 45], [6, 0], [7, 45], [8, 66]], 'cycle': 106})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, 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 |
|---|---|---|---|
| timing oracle 0 | {'cycle': 0, 'starts': [[5, 0], [7, 0], [8, 38]]} | {'cycle': 83, 'starts': [[5, 0], [7, 12], [8, 50]]} | Failed |
| timing oracle 1 | {'cycle': 115, 'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]]} | {'cycle': 127, 'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]]} | Failed |
| timing oracle 2 | {'cycle': 116, 'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]]} | {'cycle': 116, 'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]]} | Passed |
| timing oracle 3 | {'cycle': 55, 'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]]} | {'cycle': 72, 'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]]} | Failed |
| timing oracle 4 | {'cycle': 77, 'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]]} | {'cycle': 84, 'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]]} | Failed |
| timing oracle 5 | {'cycle': 61, 'starts': [[1, 0], [3, 37], [5, 0], [8, 37]]} | {'cycle': 73, 'starts': [[1, 0], [3, 37], [5, 0], [8, 37]]} | Failed |
| timing oracle 6 | {'cycle': 31, 'starts': [[3, 0], [5, 36], [6, 0], [7, 0], [8, 33]]} | {'cycle': 109, 'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]]} | Failed |
| timing oracle 7 | {'cycle': 108, 'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]]} | {'cycle': 108, 'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]]} | Passed |
SHA-256 / f2ca2913ca7e8bd87a2c152a246c5461ba19be54e6cf7c43b7adb0b844f31ea7
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
calls = set(x['calls'])
lag = set(x['lag'])
t0 = 0
starts = []
for side in (0, 1):
ends = []
for ring in (x['ring1'], x['ring2']):
pair = ring[2 * side:2 * side + 2]
if pair[0][0] in lag:
pair = [pair[1], pair[0]]
t = t0
for ph, dur in pair:
if ph in calls:
starts.append([ph, t])
t += dur
ends.append(t)
t0 = min(ends)
return {'starts': sorted(starts), 'cycle': t0}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'ring1': [[1, 25], [2, 16], [3, 33], [4, 26]], 'ring2': [[5, 12], [6, 24], [7, 38], [8, 33]], 'calls': [5, 7, 8], 'lag': [6]}, {'starts': [[5, 0], [7, 12], [8, 50]], 'cycle': 83}), ({'ring1': [[1, 33], [2, 34], [3, 13], [4, 35]], 'ring2': [[5, 34], [6, 32], [7, 24], [8, 36]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [4, 6, 7]}, {'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]], 'cycle': 127}), ({'ring1': [[1, 38], [2, 36], [3, 23], [4, 19]], 'ring2': [[5, 11], [6, 11], [7, 37], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 7], 'lag': [1]}, {'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 37], [2, 12], [3, 24], [4, 28]], 'ring2': [[5, 26], [6, 28], [7, 35], [8, 36]], 'calls': [1, 3, 5, 8], 'lag': [4, 8]}, {'starts': [[1, 0], [3, 37], [5, 0], [8, 37]], 'cycle': 73}), ({'ring1': [[1, 21], [2, 17], [3, 31], [4, 14]], 'ring2': [[5, 11], [6, 36], [7, 33], [8, 29]], 'calls': [3, 5, 6, 7, 8], 'lag': [2, 3, 5, 6]}, {'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]], 'cycle': 109}), ({'ring1': [[1, 19], [2, 40], [3, 21], [4, 28]], 'ring2': [[5, 8], [6, 8], [7, 20], [8, 25]], 'calls': [1, 2, 3, 4, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]], 'cycle': 108})], [({'ring1': [[1, 39], [2, 22], [3, 29], [4, 13]], 'ring2': [[5, 14], [6, 35], [7, 12], [8, 26]], 'calls': [1, 2, 3, 6, 7, 8], 'lag': [2, 5]}, {'starts': [[1, 0], [2, 39], [3, 61], [6, 0], [7, 61], [8, 73]], 'cycle': 99}), ({'ring1': [[1, 8], [2, 31], [3, 14], [4, 9]], 'ring2': [[5, 15], [6, 22], [7, 25], [8, 33]], 'calls': [1, 2, 3, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 8], [3, 39], [5, 0]], 'cycle': 53}), ({'ring1': [[1, 29], [2, 38], [3, 11], [4, 28]], 'ring2': [[5, 31], [6, 19], [7, 17], [8, 27]], 'calls': [1, 2, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 38], [2, 0], [5, 0], [6, 31], [7, 67], [8, 84]], 'cycle': 111}), ({'ring1': [[1, 25], [2, 32], [3, 17], [4, 38]], 'ring2': [[5, 21], [6, 22], [7, 20], [8, 28]], 'calls': [2, 3, 4, 5, 6, 7], 'lag': [1, 4, 5]}, {'starts': [[2, 0], [3, 43], [4, 60], [5, 22], [6, 0], [7, 43]], 'cycle': 98}), ({'ring1': [[1, 19], [2, 27], [3, 18], [4, 34]], 'ring2': [[5, 34], [6, 20], [7, 30], [8, 15]], 'calls': [1, 2, 3, 4, 7], 'lag': [5, 6]}, {'starts': [[1, 0], [2, 19], [3, 46], [4, 64], [7, 46]], 'cycle': 98}), ({'ring1': [[1, 28], [2, 19], [3, 32], [4, 37]], 'ring2': [[5, 40], [6, 9], [7, 19], [8, 31]], 'calls': [1, 2, 3, 4, 5], 'lag': [2, 5, 6]}, {'starts': [[1, 0], [2, 28], [3, 47], [4, 79], [5, 0]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72})], [({'ring1': [[1, 26], [2, 30], [3, 11], [4, 9]], 'ring2': [[5, 17], [6, 20], [7, 29], [8, 35]], 'calls': [1, 2, 4, 5, 6, 7, 8], 'lag': [3, 6, 7, 8]}, {'starts': [[1, 0], [2, 26], [4, 56], [5, 0], [6, 17], [7, 91], [8, 56]], 'cycle': 120}), ({'ring1': [[1, 32], [2, 15], [3, 34], [4, 12]], 'ring2': [[5, 12], [6, 27], [7, 31], [8, 11]], 'calls': [1, 3, 4, 7, 8], 'lag': [1]}, {'starts': [[1, 0], [3, 32], [4, 66], [7, 32], [8, 63]], 'cycle': 78}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 8], [2, 24], [3, 39], [4, 19]], 'ring2': [[5, 32], [6, 37], [7, 23], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': [1, 2, 8]}, {'starts': [[1, 24], [2, 0], [3, 69], [4, 108], [5, 0], [6, 32], [8, 69]], 'cycle': 127}), ({'ring1': [[1, 12], [2, 36], [3, 34], [4, 8]], 'ring2': [[5, 22], [6, 13], [7, 28], [8, 32]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 36], [2, 0], [3, 48], [4, 82], [5, 0], [6, 22], [7, 48], [8, 76]], 'cycle': 108}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 38], [3, 32], [4, 16]], 'ring2': [[5, 29], [6, 36], [7, 16], [8, 35]], 'calls': [1, 3, 4, 5, 6, 8], 'lag': [4, 6]}, {'starts': [[1, 0], [3, 65], [4, 97], [5, 0], [6, 29], [8, 65]], 'cycle': 113}), ({'ring1': [[1, 24], [2, 15], [3, 18], [4, 37]], 'ring2': [[5, 15], [6, 24], [7, 11], [8, 9]], 'calls': [1, 3, 4, 5, 6, 7], 'lag': [6, 7, 8]}, {'starts': [[1, 0], [3, 39], [4, 57], [5, 0], [6, 15], [7, 39]], 'cycle': 94})], [({'ring1': [[1, 32], [2, 16], [3, 35], [4, 40]], 'ring2': [[5, 40], [6, 21], [7, 39], [8, 19]], 'calls': [1, 3, 5, 6, 7], 'lag': []}, {'starts': [[1, 0], [3, 61], [5, 0], [6, 40], [7, 61]], 'cycle': 100}), ({'ring1': [[1, 37], [2, 38], [3, 19], [4, 16]], 'ring2': [[5, 10], [6, 11], [7, 40], [8, 11]], 'calls': [1, 3, 4, 5, 7], 'lag': [2, 4]}, {'starts': [[1, 0], [3, 37], [4, 56], [5, 0], [7, 37]], 'cycle': 77}), ({'ring1': [[1, 27], [2, 25], [3, 10], [4, 36]], 'ring2': [[5, 9], [6, 39], [7, 24], [8, 32]], 'calls': [1, 2, 4, 5, 7], 'lag': [2, 4, 7, 8]}, {'starts': [[1, 0], [2, 27], [4, 52], [5, 0], [7, 52]], 'cycle': 88}), ({'ring1': [[1, 23], [2, 10], [3, 29], [4, 20]], 'ring2': [[5, 20], [6, 34], [7, 33], [8, 39]], 'calls': [2, 3, 5, 6, 7], 'lag': [1]}, {'starts': [[2, 0], [3, 54], [5, 0], [6, 20], [7, 54]], 'cycle': 87}), ({'ring1': [[1, 32], [2, 38], [3, 17], [4, 17]], 'ring2': [[5, 27], [6, 13], [7, 17], [8, 37]], 'calls': [1, 5, 6, 8], 'lag': [3, 4]}, {'starts': [[1, 0], [5, 0], [6, 27], [8, 40]], 'cycle': 77}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 28], [3, 23], [4, 32]], 'ring2': [[5, 15], [6, 27], [7, 40], [8, 23]], 'calls': [1, 2, 6, 7, 8], 'lag': [1, 4, 7, 8]}, {'starts': [[1, 28], [2, 0], [6, 0], [7, 69], [8, 46]], 'cycle': 109})], [({'ring1': [[1, 8], [2, 28], [3, 10], [4, 30]], 'ring2': [[5, 34], [6, 19], [7, 32], [8, 24]], 'calls': [1, 2, 3, 4, 5, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 28], [2, 0], [3, 36], [4, 46], [5, 0], [7, 36], [8, 68]], 'cycle': 92}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 22], [2, 30], [3, 20], [4, 40]], 'ring2': [[5, 10], [6, 36], [7, 25], [8, 14]], 'calls': [1, 3, 5, 6, 7, 8], 'lag': [4]}, {'starts': [[1, 0], [3, 46], [5, 0], [6, 10], [7, 46], [8, 71]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 37], [2, 14], [3, 23], [4, 35]], 'ring2': [[5, 37], [6, 26], [7, 17], [8, 24]], 'calls': [3, 4, 5, 6, 8], 'lag': [1, 8]}, {'starts': [[3, 63], [4, 86], [5, 0], [6, 37], [8, 63]], 'cycle': 121}), ({'ring1': [[1, 17], [2, 38], [3, 37], [4, 18]], 'ring2': [[5, 24], [6, 10], [7, 27], [8, 21]], 'calls': [1, 2, 3, 5, 6, 7, 8], 'lag': [2, 7]}, {'starts': [[1, 0], [2, 17], [3, 55], [5, 0], [6, 24], [7, 76], [8, 55]], 'cycle': 103}), ({'ring1': [[1, 35], [2, 15], [3, 12], [4, 14]], 'ring2': [[5, 23], [6, 12], [7, 24], [8, 35]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': []}, {'starts': [[1, 0], [2, 35], [3, 50], [4, 62], [5, 0], [6, 23], [8, 50]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 33], [3, 40], [4, 32]], 'ring2': [[5, 10], [6, 24], [7, 21], [8, 40]], 'calls': [1, 2, 4, 6, 7, 8], 'lag': [2]}, {'starts': [[1, 0], [2, 12], [4, 45], [6, 0], [7, 45], [8, 66]], 'cycle': 106})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, 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 |
|---|---|---|---|
| timing oracle 0 | {'cycle': 0, 'starts': [[5, 0], [7, 0], [8, 38]]} | {'cycle': 83, 'starts': [[5, 0], [7, 12], [8, 50]]} | Failed |
| timing oracle 1 | {'cycle': 80, 'starts': [[1, 0], [2, 33], [3, 32], [4, 45], [6, 0], [7, 68], [8, 32]]} | {'cycle': 127, 'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]]} | Failed |
| timing oracle 2 | {'cycle': 59, 'starts': [[1, 36], [2, 0], [3, 22], [4, 45], [5, 0], [6, 11], [7, 22]]} | {'cycle': 116, 'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]]} | Failed |
| timing oracle 3 | {'cycle': 45, 'starts': [[2, 0], [4, 20], [6, 0], [7, 20], [8, 32]]} | {'cycle': 72, 'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]]} | Failed |
| timing oracle 4 | {'cycle': 70, 'starts': [[1, 30], [2, 0], [3, 35], [4, 45], [5, 0], [6, 15], [7, 35], [8, 47]]} | {'cycle': 84, 'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]]} | Failed |
| timing oracle 5 | {'cycle': 50, 'starts': [[1, 0], [3, 26], [5, 0], [8, 26]]} | {'cycle': 73, 'starts': [[1, 0], [3, 37], [5, 0], [8, 37]]} | Failed |
| timing oracle 6 | {'cycle': 31, 'starts': [[3, 0], [5, 36], [6, 0], [7, 0], [8, 33]]} | {'cycle': 109, 'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]]} | Failed |
| timing oracle 7 | {'cycle': 8, 'starts': [[1, 0], [2, 19], [3, 8], [4, 29], [5, 0]]} | {'cycle': 108, 'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]]} | Failed |
SHA-256 / bb8ff7679aaa170a6a9b17f53f309d4f07d56c8053cd5cc88daabdab11e9b543
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
calls = set(x['calls'])
lag = set(x['lag'])
t0 = 0
starts = []
for side in (0, 1):
ends = []
for ring in (x['ring1'], x['ring2']):
pair = ring[2 * side:2 * side + 2]
if pair[0][0] in lag:
pair = [pair[1], pair[0]]
t = t0
for ph, dur in pair:
if ph in calls:
starts.append([ph, t])
t += dur
ends.append(t)
t0 = max(ends)
return {'starts': sorted(starts), 'cycle': t0}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'ring1': [[1, 25], [2, 16], [3, 33], [4, 26]], 'ring2': [[5, 12], [6, 24], [7, 38], [8, 33]], 'calls': [5, 7, 8], 'lag': [6]}, {'starts': [[5, 0], [7, 12], [8, 50]], 'cycle': 83}), ({'ring1': [[1, 33], [2, 34], [3, 13], [4, 35]], 'ring2': [[5, 34], [6, 32], [7, 24], [8, 36]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [4, 6, 7]}, {'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]], 'cycle': 127}), ({'ring1': [[1, 38], [2, 36], [3, 23], [4, 19]], 'ring2': [[5, 11], [6, 11], [7, 37], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 7], 'lag': [1]}, {'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 37], [2, 12], [3, 24], [4, 28]], 'ring2': [[5, 26], [6, 28], [7, 35], [8, 36]], 'calls': [1, 3, 5, 8], 'lag': [4, 8]}, {'starts': [[1, 0], [3, 37], [5, 0], [8, 37]], 'cycle': 73}), ({'ring1': [[1, 21], [2, 17], [3, 31], [4, 14]], 'ring2': [[5, 11], [6, 36], [7, 33], [8, 29]], 'calls': [3, 5, 6, 7, 8], 'lag': [2, 3, 5, 6]}, {'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]], 'cycle': 109}), ({'ring1': [[1, 19], [2, 40], [3, 21], [4, 28]], 'ring2': [[5, 8], [6, 8], [7, 20], [8, 25]], 'calls': [1, 2, 3, 4, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]], 'cycle': 108})], [({'ring1': [[1, 39], [2, 22], [3, 29], [4, 13]], 'ring2': [[5, 14], [6, 35], [7, 12], [8, 26]], 'calls': [1, 2, 3, 6, 7, 8], 'lag': [2, 5]}, {'starts': [[1, 0], [2, 39], [3, 61], [6, 0], [7, 61], [8, 73]], 'cycle': 99}), ({'ring1': [[1, 8], [2, 31], [3, 14], [4, 9]], 'ring2': [[5, 15], [6, 22], [7, 25], [8, 33]], 'calls': [1, 2, 3, 5], 'lag': [2]}, {'starts': [[1, 0], [2, 8], [3, 39], [5, 0]], 'cycle': 53}), ({'ring1': [[1, 29], [2, 38], [3, 11], [4, 28]], 'ring2': [[5, 31], [6, 19], [7, 17], [8, 27]], 'calls': [1, 2, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 38], [2, 0], [5, 0], [6, 31], [7, 67], [8, 84]], 'cycle': 111}), ({'ring1': [[1, 25], [2, 32], [3, 17], [4, 38]], 'ring2': [[5, 21], [6, 22], [7, 20], [8, 28]], 'calls': [2, 3, 4, 5, 6, 7], 'lag': [1, 4, 5]}, {'starts': [[2, 0], [3, 43], [4, 60], [5, 22], [6, 0], [7, 43]], 'cycle': 98}), ({'ring1': [[1, 19], [2, 27], [3, 18], [4, 34]], 'ring2': [[5, 34], [6, 20], [7, 30], [8, 15]], 'calls': [1, 2, 3, 4, 7], 'lag': [5, 6]}, {'starts': [[1, 0], [2, 19], [3, 46], [4, 64], [7, 46]], 'cycle': 98}), ({'ring1': [[1, 28], [2, 19], [3, 32], [4, 37]], 'ring2': [[5, 40], [6, 9], [7, 19], [8, 31]], 'calls': [1, 2, 3, 4, 5], 'lag': [2, 5, 6]}, {'starts': [[1, 0], [2, 28], [3, 47], [4, 79], [5, 0]], 'cycle': 116}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72})], [({'ring1': [[1, 26], [2, 30], [3, 11], [4, 9]], 'ring2': [[5, 17], [6, 20], [7, 29], [8, 35]], 'calls': [1, 2, 4, 5, 6, 7, 8], 'lag': [3, 6, 7, 8]}, {'starts': [[1, 0], [2, 26], [4, 56], [5, 0], [6, 17], [7, 91], [8, 56]], 'cycle': 120}), ({'ring1': [[1, 32], [2, 15], [3, 34], [4, 12]], 'ring2': [[5, 12], [6, 27], [7, 31], [8, 11]], 'calls': [1, 3, 4, 7, 8], 'lag': [1]}, {'starts': [[1, 0], [3, 32], [4, 66], [7, 32], [8, 63]], 'cycle': 78}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 8], [2, 24], [3, 39], [4, 19]], 'ring2': [[5, 32], [6, 37], [7, 23], [8, 8]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': [1, 2, 8]}, {'starts': [[1, 24], [2, 0], [3, 69], [4, 108], [5, 0], [6, 32], [8, 69]], 'cycle': 127}), ({'ring1': [[1, 12], [2, 36], [3, 34], [4, 8]], 'ring2': [[5, 22], [6, 13], [7, 28], [8, 32]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 36], [2, 0], [3, 48], [4, 82], [5, 0], [6, 22], [7, 48], [8, 76]], 'cycle': 108}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 38], [3, 32], [4, 16]], 'ring2': [[5, 29], [6, 36], [7, 16], [8, 35]], 'calls': [1, 3, 4, 5, 6, 8], 'lag': [4, 6]}, {'starts': [[1, 0], [3, 65], [4, 97], [5, 0], [6, 29], [8, 65]], 'cycle': 113}), ({'ring1': [[1, 24], [2, 15], [3, 18], [4, 37]], 'ring2': [[5, 15], [6, 24], [7, 11], [8, 9]], 'calls': [1, 3, 4, 5, 6, 7], 'lag': [6, 7, 8]}, {'starts': [[1, 0], [3, 39], [4, 57], [5, 0], [6, 15], [7, 39]], 'cycle': 94})], [({'ring1': [[1, 32], [2, 16], [3, 35], [4, 40]], 'ring2': [[5, 40], [6, 21], [7, 39], [8, 19]], 'calls': [1, 3, 5, 6, 7], 'lag': []}, {'starts': [[1, 0], [3, 61], [5, 0], [6, 40], [7, 61]], 'cycle': 100}), ({'ring1': [[1, 37], [2, 38], [3, 19], [4, 16]], 'ring2': [[5, 10], [6, 11], [7, 40], [8, 11]], 'calls': [1, 3, 4, 5, 7], 'lag': [2, 4]}, {'starts': [[1, 0], [3, 37], [4, 56], [5, 0], [7, 37]], 'cycle': 77}), ({'ring1': [[1, 27], [2, 25], [3, 10], [4, 36]], 'ring2': [[5, 9], [6, 39], [7, 24], [8, 32]], 'calls': [1, 2, 4, 5, 7], 'lag': [2, 4, 7, 8]}, {'starts': [[1, 0], [2, 27], [4, 52], [5, 0], [7, 52]], 'cycle': 88}), ({'ring1': [[1, 23], [2, 10], [3, 29], [4, 20]], 'ring2': [[5, 20], [6, 34], [7, 33], [8, 39]], 'calls': [2, 3, 5, 6, 7], 'lag': [1]}, {'starts': [[2, 0], [3, 54], [5, 0], [6, 20], [7, 54]], 'cycle': 87}), ({'ring1': [[1, 32], [2, 38], [3, 17], [4, 17]], 'ring2': [[5, 27], [6, 13], [7, 17], [8, 37]], 'calls': [1, 5, 6, 8], 'lag': [3, 4]}, {'starts': [[1, 0], [5, 0], [6, 27], [8, 40]], 'cycle': 77}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 18], [2, 28], [3, 23], [4, 32]], 'ring2': [[5, 15], [6, 27], [7, 40], [8, 23]], 'calls': [1, 2, 6, 7, 8], 'lag': [1, 4, 7, 8]}, {'starts': [[1, 28], [2, 0], [6, 0], [7, 69], [8, 46]], 'cycle': 109})], [({'ring1': [[1, 8], [2, 28], [3, 10], [4, 30]], 'ring2': [[5, 34], [6, 19], [7, 32], [8, 24]], 'calls': [1, 2, 3, 4, 5, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 28], [2, 0], [3, 36], [4, 46], [5, 0], [7, 36], [8, 68]], 'cycle': 92}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 22], [2, 30], [3, 20], [4, 40]], 'ring2': [[5, 10], [6, 36], [7, 25], [8, 14]], 'calls': [1, 3, 5, 6, 7, 8], 'lag': [4]}, {'starts': [[1, 0], [3, 46], [5, 0], [6, 10], [7, 46], [8, 71]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 37], [2, 14], [3, 23], [4, 35]], 'ring2': [[5, 37], [6, 26], [7, 17], [8, 24]], 'calls': [3, 4, 5, 6, 8], 'lag': [1, 8]}, {'starts': [[3, 63], [4, 86], [5, 0], [6, 37], [8, 63]], 'cycle': 121}), ({'ring1': [[1, 17], [2, 38], [3, 37], [4, 18]], 'ring2': [[5, 24], [6, 10], [7, 27], [8, 21]], 'calls': [1, 2, 3, 5, 6, 7, 8], 'lag': [2, 7]}, {'starts': [[1, 0], [2, 17], [3, 55], [5, 0], [6, 24], [7, 76], [8, 55]], 'cycle': 103}), ({'ring1': [[1, 35], [2, 15], [3, 12], [4, 14]], 'ring2': [[5, 23], [6, 12], [7, 24], [8, 35]], 'calls': [1, 2, 3, 4, 5, 6, 8], 'lag': []}, {'starts': [[1, 0], [2, 35], [3, 50], [4, 62], [5, 0], [6, 23], [8, 50]], 'cycle': 85}), ({'ring1': [[1, 12], [2, 33], [3, 40], [4, 32]], 'ring2': [[5, 10], [6, 24], [7, 21], [8, 40]], 'calls': [1, 2, 4, 6, 7, 8], 'lag': [2]}, {'starts': [[1, 0], [2, 12], [4, 45], [6, 0], [7, 45], [8, 66]], 'cycle': 106})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, 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 |
|---|---|---|---|
| timing oracle 0 | {'cycle': 83, 'starts': [[5, 0], [7, 12], [8, 50]]} | {'cycle': 83, 'starts': [[5, 0], [7, 12], [8, 50]]} | Passed |
| timing oracle 1 | {'cycle': 127, 'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]]} | {'cycle': 127, 'starts': [[1, 0], [2, 33], [3, 67], [4, 80], [6, 0], [7, 103], [8, 67]]} | Passed |
| timing oracle 2 | {'cycle': 116, 'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]]} | {'cycle': 116, 'starts': [[1, 36], [2, 0], [3, 74], [4, 97], [5, 0], [6, 11], [7, 74]]} | Passed |
| timing oracle 3 | {'cycle': 72, 'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]]} | {'cycle': 72, 'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]]} | Passed |
| timing oracle 4 | {'cycle': 84, 'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]]} | {'cycle': 84, 'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]]} | Passed |
| timing oracle 5 | {'cycle': 73, 'starts': [[1, 0], [3, 37], [5, 0], [8, 37]]} | {'cycle': 73, 'starts': [[1, 0], [3, 37], [5, 0], [8, 37]]} | Passed |
| timing oracle 6 | {'cycle': 109, 'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]]} | {'cycle': 109, 'starts': [[3, 47], [5, 36], [6, 0], [7, 47], [8, 80]]} | Passed |
| timing oracle 7 | {'cycle': 108, 'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]]} | {'cycle': 108, 'starts': [[1, 0], [2, 19], [3, 59], [4, 80], [5, 0]]} | Passed |
SHA-256 / 1021d1ee6267e5b54cf119de169829e61db866254028e519aec14f1c87297cfa
Verification & scope
A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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:47:59.188922+00:00.
Case digest / 135f9ac9d8dd4be68dcb2e76b73ff5f141f7d6b48014a52fac46139811f7fe93