FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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