FA-67776 / Elevator dispatch scheduling / Open access
Single car SCAN service simulation: stop time accounting · case 01
Stops with several boarders take longer than one stop time, or alighting-only stops take no time.
ROOT CAUSE
Stop time is charged per boarding passenger instead of once per stop.
VERIFIED REPAIR
Charge one stop time for any stop with alighting or boarding.
Unsuccessful approach: Charging only boarding stops makes alighting instantaneous.
Case contract
All passengers [id, from, to] wait at time 0. The car starts at start heading up. At each floor it first lets riders alight, then boards waiting passengers (in id order) whose travel direction equals the car direction while load < cap; any alighting or boarding costs one stop_s. If no rider destination or waiting origin lies strictly ahead it reverses in place (and may board again); otherwise it moves one floor (floor_s). Return {id: [board time, alight time]} for delivered passengers.
Why this case matters
Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cap = x['cap']
pos = x['start']
t = 0
d = 'up'
waiting = {r[0]: r for r in x['requests']}
riding = {}
picked = {}
done = {}
for _ in range(400):
if not waiting and not riding:
break
stopped = False
for pid in sorted(riding):
if riding[pid][2] == pos:
done[pid] = [picked[pid], t]
del riding[pid]
stopped = True
for pid in sorted(waiting):
r = waiting[pid]
rdir = 'up' if r[2] > r[1] else 'down'
if r[1] == pos and rdir == d and len(riding) < cap:
riding[pid] = r
picked[pid] = t
del waiting[pid]
t += x['stop_s']
if stopped:
t += x['stop_s']
targets = [r[2] for r in riding.values()] + [r[1] for r in waiting.values()]
ahead = [f for f in targets if (f > pos if d == 'up' else f < pos)]
if not ahead:
d = 'down' if d == 'up' else 'up'
continue
pos += 1 if d == 'up' else -1
t += x['floor_s']
return done
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 2', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 9], ['p1', 4, 2], ['p2', 9, 2], ['p3', 9, 8]]}, {'p3': [2, 9], 'p1': [22, 31], 'p2': [2, 31], 'p0': [44, 55]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('control 1', {'cap': 1, 'start': 5, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 8], ['p1', 3, 7], ['p2', 0, 7], ['p3', 3, 2], ['p4', 7, 1]]}, {'p0': [2, 11], 'p4': [18, 35], 'p2': [42, 61], 'p3': [74, 81], 'p1': [88, 101]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('control 7', {'cap': 4, 'start': 6, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 7, 5], ['p2', 6, 0]]}, {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 21', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 7], ['p1', 5, 9], ['p2', 4, 5], ['p3', 0, 1], ['p4', 2, 5], ['p5', 0, 5]]}, {'p3': [0, 10], 'p4': [20, 34], 'p5': [0, 34], 'p1': [34, 50], 'p0': [60, 70], 'p2': [84, 94]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 12', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 3], ['p1', 8, 4], ['p2', 2, 8], ['p3', 5, 0], ['p4', 8, 2], ['p5', 7, 9]]}, {'p2': [0, 28], 'p5': [18, 38], 'p1': [48, 72], 'p0': [48, 82], 'p4': [48, 92], 'p3': [62, 104]}), ('control 15', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 6, 3], ['p1', 4, 1], ['p2', 5, 0]]}, {'p0': [4, 26], 'p2': [14, 40], 'p1': [56, 70]}), ('control 18', {'cap': 4, 'start': 9, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 1, 0], ['p1', 7, 8], ['p2', 1, 8]]}, {'p0': [16, 26], 'p1': [56, 66], 'p2': [36, 66]})], [('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]}), ('control 9', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 2], ['p1', 4, 5], ['p2', 3, 6], ['p3', 0, 9]]}, {'p1': [11, 18], 'p2': [4, 25], 'p0': [30, 43], 'p3': [52, 75]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('sampled regression 23', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 9, 4], ['p1', 9, 1], ['p2', 0, 1], ['p3', 6, 2]]}, {'p0': [2, 22], 'p3': [13, 31], 'p1': [2, 38], 'p2': [45, 52]}), ('control 26', {'cap': 1, 'start': 3, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 4], ['p1', 1, 6], ['p2', 1, 6], ['p3', 5, 1]]}, {'p3': [4, 20], 'p0': [30, 46], 'p1': [60, 78], 'p2': [96, 114]}), ('control 29', {'cap': 4, 'start': 5, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 5], ['p1', 0, 2], ['p2', 7, 1]]}, {'p0': [6, 28], 'p2': [16, 44], 'p1': [54, 66]})], [('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 61', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 4, 9], ['p1', 8, 1], ['p2', 3, 8], ['p3', 1, 4]]}, {'p3': [0, 22], 'p2': [12, 38], 'p0': [22, 48], 'p1': [58, 80]}), ('control 14', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 1], ['p1', 0, 5]]}, {'p0': [2, 9], 'p1': [16, 31]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 34', {'cap': 2, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 2, 8], ['p2', 6, 1], ['p3', 3, 7], ['p4', 6, 8], ['p5', 2, 4]]}, {'p4': [4, 13], 'p2': [22, 42], 'p0': [35, 49], 'p5': [58, 67], 'p1': [58, 80], 'p3': [95, 108]}), ('control 37', {'cap': 2, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 5, 9], ['p1', 6, 7]]}, {'p1': [13, 20], 'p0': [6, 29]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('control 19', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 5], ['p1', 6, 4], ['p2', 9, 2], ['p3', 4, 5]]}, {'p3': [6, 16], 'p1': [46, 58], 'p2': [32, 70], 'p0': [82, 100]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('control 45', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 0, 2], ['p1', 6, 2], ['p2', 4, 5], ['p3', 1, 7], ['p4', 7, 4]]}, {'p4': [2, 18], 'p1': [9, 27], 'p0': [36, 50], 'p2': [59, 66], 'p3': [43, 75]}), ('sampled regression 48', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 0, 2], ['p2', 8, 5], ['p3', 6, 4], ['p4', 0, 3]]}, {'p2': [0, 16], 'p3': [9, 23], 'p0': [32, 41], 'p1': [46, 55], 'p4': [46, 62]}), ('control 51', {'cap': 4, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 2, 6], ['p2', 8, 1], ['p3', 1, 6], ['p4', 3, 1]]}, {'p0': [8, 15], 'p2': [22, 46], 'p4': [37, 46], 'p1': [58, 71], 'p3': [51, 71]})]]
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: full car at a floor where a rider alights | {'a': [0, 11], 'b': [11, 27]} | {'a': [0, 11], 'b': [11, 22]} | Failed |
| boundary: opposite-direction passenger waits | {'a': [22, 31], 'b': [0, 11]} | {'a': [22, 31], 'b': [0, 11]} | Passed |
| sampled regression 2 | {'p0': [49, 60], 'p1': [27, 36], 'p2': [2, 36], 'p3': [7, 14]} | {'p0': [44, 55], 'p1': [22, 31], 'p2': [2, 31], 'p3': [2, 9]} | Failed |
| regression: capacity exactly reached | {'a': [0, 18], 'b': [5, 25], 'c': [40, 57]} | {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]} | Failed |
| regression: two boardings share one stop | {'a': [0, 22], 'b': [8, 22]} | {'a': [0, 14], 'b': [0, 14]} | Failed |
| control 1 | {'p0': [2, 11], 'p1': [88, 101], 'p2': [42, 61], 'p3': [74, 81], 'p4': [18, 35]} | {'p0': [2, 11], 'p1': [88, 101], 'p2': [42, 61], 'p3': [74, 81], 'p4': [18, 35]} | Passed |
| control 4 | {'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81], 'p3': [13, 20]} | {'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81], 'p3': [13, 20]} | Passed |
| control 7 | {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]} | {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]} | Passed |
SHA-256 / 7f31c4711d6e90739e246e59475b78fba2b9c8ff95b8991401b52f4c98470caf
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cap = x['cap']
pos = x['start']
t = 0
d = 'up'
waiting = {r[0]: r for r in x['requests']}
riding = {}
picked = {}
done = {}
for _ in range(400):
if not waiting and not riding:
break
stopped = False
for pid in sorted(riding):
if riding[pid][2] == pos:
done[pid] = [picked[pid], t]
del riding[pid]
for pid in sorted(waiting):
r = waiting[pid]
rdir = 'up' if r[2] > r[1] else 'down'
if r[1] == pos and rdir == d and len(riding) < cap:
riding[pid] = r
picked[pid] = t
del waiting[pid]
stopped = True
if stopped:
t += x['stop_s']
targets = [r[2] for r in riding.values()] + [r[1] for r in waiting.values()]
ahead = [f for f in targets if (f > pos if d == 'up' else f < pos)]
if not ahead:
d = 'down' if d == 'up' else 'up'
continue
pos += 1 if d == 'up' else -1
t += x['floor_s']
return done
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 2', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 9], ['p1', 4, 2], ['p2', 9, 2], ['p3', 9, 8]]}, {'p3': [2, 9], 'p1': [22, 31], 'p2': [2, 31], 'p0': [44, 55]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('control 1', {'cap': 1, 'start': 5, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 8], ['p1', 3, 7], ['p2', 0, 7], ['p3', 3, 2], ['p4', 7, 1]]}, {'p0': [2, 11], 'p4': [18, 35], 'p2': [42, 61], 'p3': [74, 81], 'p1': [88, 101]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('control 7', {'cap': 4, 'start': 6, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 7, 5], ['p2', 6, 0]]}, {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 21', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 7], ['p1', 5, 9], ['p2', 4, 5], ['p3', 0, 1], ['p4', 2, 5], ['p5', 0, 5]]}, {'p3': [0, 10], 'p4': [20, 34], 'p5': [0, 34], 'p1': [34, 50], 'p0': [60, 70], 'p2': [84, 94]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 12', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 3], ['p1', 8, 4], ['p2', 2, 8], ['p3', 5, 0], ['p4', 8, 2], ['p5', 7, 9]]}, {'p2': [0, 28], 'p5': [18, 38], 'p1': [48, 72], 'p0': [48, 82], 'p4': [48, 92], 'p3': [62, 104]}), ('control 15', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 6, 3], ['p1', 4, 1], ['p2', 5, 0]]}, {'p0': [4, 26], 'p2': [14, 40], 'p1': [56, 70]}), ('control 18', {'cap': 4, 'start': 9, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 1, 0], ['p1', 7, 8], ['p2', 1, 8]]}, {'p0': [16, 26], 'p1': [56, 66], 'p2': [36, 66]})], [('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]}), ('control 9', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 2], ['p1', 4, 5], ['p2', 3, 6], ['p3', 0, 9]]}, {'p1': [11, 18], 'p2': [4, 25], 'p0': [30, 43], 'p3': [52, 75]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('sampled regression 23', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 9, 4], ['p1', 9, 1], ['p2', 0, 1], ['p3', 6, 2]]}, {'p0': [2, 22], 'p3': [13, 31], 'p1': [2, 38], 'p2': [45, 52]}), ('control 26', {'cap': 1, 'start': 3, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 4], ['p1', 1, 6], ['p2', 1, 6], ['p3', 5, 1]]}, {'p3': [4, 20], 'p0': [30, 46], 'p1': [60, 78], 'p2': [96, 114]}), ('control 29', {'cap': 4, 'start': 5, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 5], ['p1', 0, 2], ['p2', 7, 1]]}, {'p0': [6, 28], 'p2': [16, 44], 'p1': [54, 66]})], [('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 61', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 4, 9], ['p1', 8, 1], ['p2', 3, 8], ['p3', 1, 4]]}, {'p3': [0, 22], 'p2': [12, 38], 'p0': [22, 48], 'p1': [58, 80]}), ('control 14', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 1], ['p1', 0, 5]]}, {'p0': [2, 9], 'p1': [16, 31]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 34', {'cap': 2, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 2, 8], ['p2', 6, 1], ['p3', 3, 7], ['p4', 6, 8], ['p5', 2, 4]]}, {'p4': [4, 13], 'p2': [22, 42], 'p0': [35, 49], 'p5': [58, 67], 'p1': [58, 80], 'p3': [95, 108]}), ('control 37', {'cap': 2, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 5, 9], ['p1', 6, 7]]}, {'p1': [13, 20], 'p0': [6, 29]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('control 19', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 5], ['p1', 6, 4], ['p2', 9, 2], ['p3', 4, 5]]}, {'p3': [6, 16], 'p1': [46, 58], 'p2': [32, 70], 'p0': [82, 100]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('control 45', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 0, 2], ['p1', 6, 2], ['p2', 4, 5], ['p3', 1, 7], ['p4', 7, 4]]}, {'p4': [2, 18], 'p1': [9, 27], 'p0': [36, 50], 'p2': [59, 66], 'p3': [43, 75]}), ('sampled regression 48', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 0, 2], ['p2', 8, 5], ['p3', 6, 4], ['p4', 0, 3]]}, {'p2': [0, 16], 'p3': [9, 23], 'p0': [32, 41], 'p1': [46, 55], 'p4': [46, 62]}), ('control 51', {'cap': 4, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 2, 6], ['p2', 8, 1], ['p3', 1, 6], ['p4', 3, 1]]}, {'p0': [8, 15], 'p2': [22, 46], 'p4': [37, 46], 'p1': [58, 71], 'p3': [51, 71]})]]
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: full car at a floor where a rider alights | {'a': [0, 11], 'b': [11, 22]} | {'a': [0, 11], 'b': [11, 22]} | Passed |
| boundary: opposite-direction passenger waits | {'a': [17, 26], 'b': [0, 11]} | {'a': [22, 31], 'b': [0, 11]} | Failed |
| sampled regression 2 | {'p0': [34, 45], 'p1': [17, 26], 'p2': [2, 26], 'p3': [2, 9]} | {'p0': [44, 55], 'p1': [22, 31], 'p2': [2, 31], 'p3': [2, 9]} | Failed |
| regression: capacity exactly reached | {'a': [0, 13], 'b': [0, 15], 'c': [25, 42]} | {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]} | Failed |
| regression: two boardings share one stop | {'a': [0, 14], 'b': [0, 14]} | {'a': [0, 14], 'b': [0, 14]} | Passed |
| control 1 | {'p0': [2, 11], 'p1': [68, 81], 'p2': [32, 51], 'p3': [59, 66], 'p4': [13, 30]} | {'p0': [2, 11], 'p1': [88, 101], 'p2': [42, 61], 'p3': [74, 81], 'p4': [18, 35]} | Failed |
| control 4 | {'p0': [2, 24], 'p1': [24, 43], 'p2': [45, 66], 'p3': [13, 20]} | {'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81], 'p3': [13, 20]} | Failed |
| control 7 | {'p0': [4, 11], 'p1': [15, 29], 'p2': [22, 39]} | {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]} | Failed |
SHA-256 / 34f9c1520581f926c04786e37f7a43c42bde6eb0ee49dffd999df77b52af1937
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cap = x['cap']
pos = x['start']
t = 0
d = 'up'
waiting = {r[0]: r for r in x['requests']}
riding = {}
picked = {}
done = {}
for _ in range(400):
if not waiting and not riding:
break
stopped = False
for pid in sorted(riding):
if riding[pid][2] == pos:
done[pid] = [picked[pid], t]
del riding[pid]
stopped = True
for pid in sorted(waiting):
r = waiting[pid]
rdir = 'up' if r[2] > r[1] else 'down'
if r[1] == pos and rdir == d and len(riding) < cap:
riding[pid] = r
picked[pid] = t
del waiting[pid]
stopped = True
if stopped:
t += x['stop_s']
targets = [r[2] for r in riding.values()] + [r[1] for r in waiting.values()]
ahead = [f for f in targets if (f > pos if d == 'up' else f < pos)]
if not ahead:
d = 'down' if d == 'up' else 'up'
continue
pos += 1 if d == 'up' else -1
t += x['floor_s']
return done
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 2', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 9], ['p1', 4, 2], ['p2', 9, 2], ['p3', 9, 8]]}, {'p3': [2, 9], 'p1': [22, 31], 'p2': [2, 31], 'p0': [44, 55]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('control 1', {'cap': 1, 'start': 5, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 8], ['p1', 3, 7], ['p2', 0, 7], ['p3', 3, 2], ['p4', 7, 1]]}, {'p0': [2, 11], 'p4': [18, 35], 'p2': [42, 61], 'p3': [74, 81], 'p1': [88, 101]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('control 7', {'cap': 4, 'start': 6, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 7, 5], ['p2', 6, 0]]}, {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 21', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 7], ['p1', 5, 9], ['p2', 4, 5], ['p3', 0, 1], ['p4', 2, 5], ['p5', 0, 5]]}, {'p3': [0, 10], 'p4': [20, 34], 'p5': [0, 34], 'p1': [34, 50], 'p0': [60, 70], 'p2': [84, 94]}), ('control 4', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 8], ['p1', 8, 1], ['p2', 0, 8], ['p3', 5, 6]]}, {'p3': [13, 20], 'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 12', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 3], ['p1', 8, 4], ['p2', 2, 8], ['p3', 5, 0], ['p4', 8, 2], ['p5', 7, 9]]}, {'p2': [0, 28], 'p5': [18, 38], 'p1': [48, 72], 'p0': [48, 82], 'p4': [48, 92], 'p3': [62, 104]}), ('control 15', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 6, 3], ['p1', 4, 1], ['p2', 5, 0]]}, {'p0': [4, 26], 'p2': [14, 40], 'p1': [56, 70]}), ('control 18', {'cap': 4, 'start': 9, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 1, 0], ['p1', 7, 8], ['p2', 1, 8]]}, {'p0': [16, 26], 'p1': [56, 66], 'p2': [36, 66]})], [('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]}), ('control 9', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 6, 2], ['p1', 4, 5], ['p2', 3, 6], ['p3', 0, 9]]}, {'p1': [11, 18], 'p2': [4, 25], 'p0': [30, 43], 'p3': [52, 75]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('sampled regression 23', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 9, 4], ['p1', 9, 1], ['p2', 0, 1], ['p3', 6, 2]]}, {'p0': [2, 22], 'p3': [13, 31], 'p1': [2, 38], 'p2': [45, 52]}), ('control 26', {'cap': 1, 'start': 3, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 4], ['p1', 1, 6], ['p2', 1, 6], ['p3', 5, 1]]}, {'p3': [4, 20], 'p0': [30, 46], 'p1': [60, 78], 'p2': [96, 114]}), ('control 29', {'cap': 4, 'start': 5, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 8, 5], ['p1', 0, 2], ['p2', 7, 1]]}, {'p0': [6, 28], 'p2': [16, 44], 'p1': [54, 66]})], [('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('boundary: opposite-direction passenger waits', {'cap': 4, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 2, 0], ['b', 2, 5]]}, {'b': [0, 11], 'a': [22, 31]}), ('sampled regression 61', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 4, 9], ['p1', 8, 1], ['p2', 3, 8], ['p3', 1, 4]]}, {'p3': [0, 22], 'p2': [12, 38], 'p0': [22, 48], 'p1': [58, 80]}), ('control 14', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 1], ['p1', 0, 5]]}, {'p0': [2, 9], 'p1': [16, 31]}), ('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('sampled regression 34', {'cap': 2, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 2, 8], ['p2', 6, 1], ['p3', 3, 7], ['p4', 6, 8], ['p5', 2, 4]]}, {'p4': [4, 13], 'p2': [22, 42], 'p0': [35, 49], 'p5': [58, 67], 'p1': [58, 80], 'p3': [95, 108]}), ('control 37', {'cap': 2, 'start': 2, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 5, 9], ['p1', 6, 7]]}, {'p1': [13, 20], 'p0': [6, 29]}), ('sampled regression 40', {'cap': 2, 'start': 6, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 9, 5], ['p1', 8, 3], ['p2', 5, 4]]}, {'p0': [6, 30], 'p2': [30, 40], 'p1': [16, 50]})], [('regression: capacity exactly reached', {'cap': 2, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 4], ['b', 0, 5], ['c', 0, 6]]}, {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]}), ('regression: full car at a floor where a rider alights', {'cap': 1, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 3], ['b', 3, 6]]}, {'a': [0, 11], 'b': [11, 22]}), ('control 19', {'cap': 2, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['p0', 0, 5], ['p1', 6, 4], ['p2', 9, 2], ['p3', 4, 5]]}, {'p3': [6, 16], 'p1': [46, 58], 'p2': [32, 70], 'p0': [82, 100]}), ('regression: two boardings share one stop', {'cap': 4, 'start': 1, 'floor_s': 2, 'stop_s': 8, 'requests': [['a', 1, 4], ['b', 1, 4]]}, {'a': [0, 14], 'b': [0, 14]}), ('boundary: alighting-only stop', {'cap': 4, 'start': 0, 'floor_s': 2, 'stop_s': 5, 'requests': [['a', 0, 2], ['b', 5, 6]]}, {'a': [0, 9], 'b': [20, 27]}), ('control 45', {'cap': 4, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 0, 2], ['p1', 6, 2], ['p2', 4, 5], ['p3', 1, 7], ['p4', 7, 4]]}, {'p4': [2, 18], 'p1': [9, 27], 'p0': [36, 50], 'p2': [59, 66], 'p3': [43, 75]}), ('sampled regression 48', {'cap': 2, 'start': 8, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 2, 0], ['p1', 0, 2], ['p2', 8, 5], ['p3', 6, 4], ['p4', 0, 3]]}, {'p2': [0, 16], 'p3': [9, 23], 'p0': [32, 41], 'p1': [46, 55], 'p4': [46, 62]}), ('control 51', {'cap': 4, 'start': 4, 'floor_s': 2, 'stop_s': 5, 'requests': [['p0', 8, 9], ['p1', 2, 6], ['p2', 8, 1], ['p3', 1, 6], ['p4', 3, 1]]}, {'p0': [8, 15], 'p2': [22, 46], 'p4': [37, 46], 'p1': [58, 71], 'p3': [51, 71]})]]
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: full car at a floor where a rider alights | {'a': [0, 11], 'b': [11, 22]} | {'a': [0, 11], 'b': [11, 22]} | Passed |
| boundary: opposite-direction passenger waits | {'a': [22, 31], 'b': [0, 11]} | {'a': [22, 31], 'b': [0, 11]} | Passed |
| sampled regression 2 | {'p0': [44, 55], 'p1': [22, 31], 'p2': [2, 31], 'p3': [2, 9]} | {'p0': [44, 55], 'p1': [22, 31], 'p2': [2, 31], 'p3': [2, 9]} | Passed |
| regression: capacity exactly reached | {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]} | {'a': [0, 13], 'b': [0, 20], 'c': [35, 52]} | Passed |
| regression: two boardings share one stop | {'a': [0, 14], 'b': [0, 14]} | {'a': [0, 14], 'b': [0, 14]} | Passed |
| control 1 | {'p0': [2, 11], 'p1': [88, 101], 'p2': [42, 61], 'p3': [74, 81], 'p4': [18, 35]} | {'p0': [2, 11], 'p1': [88, 101], 'p2': [42, 61], 'p3': [74, 81], 'p4': [18, 35]} | Passed |
| control 4 | {'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81], 'p3': [13, 20]} | {'p0': [2, 29], 'p1': [34, 53], 'p2': [60, 81], 'p3': [13, 20]} | Passed |
| control 7 | {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]} | {'p0': [4, 11], 'p1': [20, 34], 'p2': [27, 49]} | Passed |
SHA-256 / ce9f1bd4c23e9375125eae7b9f0f8832e98f6f33817f54cd23fced8d7da569c2
Verification & scope
Stipulated toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety cases. 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:55.945038+00:00.
Case digest / facec747e99c6bfaec8e4b3864b73efbf19774b621909e3411590118d3780f3c