FA-67636 / Elevator dispatch scheduling / Open access
Figure of suitability hall call allocation: idle car score · case 01
Idle cars beat or lose to approaching cars inconsistently with the stipulated scores.
ROOT CAUSE
Idle cars receive the same-direction bonus.
VERIFIED REPAIR
Score idle cars N+1-d.
Unsuccessful approach: Scoring idle cars N-d penalises them below an opposite-direction approach.
Case contract
With N = floors-1 and d = distance to the call: an idle car scores N+1-d; a car moving strictly towards the call scores N+2-d if travelling in the call direction, N+1-d otherwise; a car moving away (or level with the call while moving) scores 1. Each call independently goes to the highest score, ties to the lowest car id.
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):
N = x['floors'] - 1
res = []
for fl, cd in x['calls']:
best = None
for car in sorted(x['cars'], key=lambda c: c['id']):
d = abs(car['floor'] - fl)
if car['dir'] == 'idle':
fs = N + 2 - d
else:
toward = (car['dir'] == 'up' and fl > car['floor']) or (car['dir'] == 'down' and fl < car['floor'])
if not toward:
fs = 1
elif car['dir'] == cd:
fs = N + 2 - d
else:
fs = N + 1 - d
if best is None or fs > best[0]:
best = (fs, car['id'])
res.append(best[1])
return res
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('control 5', {'floors': 10, 'cars': [{'id': 'C', 'floor': 4, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}], 'calls': [[6, 'up'], [4, 'up'], [7, 'up'], [1, 'down']]}, ['D', 'A', 'B', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 4', {'floors': 13, 'cars': [{'id': 'A', 'floor': 8, 'dir': 'up'}, {'id': 'C', 'floor': 12, 'dir': 'idle'}, {'id': 'D', 'floor': 10, 'dir': 'idle'}], 'calls': [[10, 'down'], [3, 'up']]}, ['D', 'D']), ('control 7', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'idle'}, {'id': 'C', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 1, 'dir': 'idle'}], 'calls': [[5, 'down'], [6, 'down']]}, ['A', 'A']), ('control 10', {'floors': 11, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 3, 'dir': 'up'}, {'id': 'A', 'floor': 5, 'dir': 'down'}], 'calls': [[6, 'up']]}, ['D'])], [('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('control 79', {'floors': 14, 'cars': [{'id': 'D', 'floor': 6, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'up'}, {'id': 'B', 'floor': 4, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 12', {'floors': 9, 'cars': [{'id': 'C', 'floor': 0, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 0, 'dir': 'up'}], 'calls': [[0, 'up'], [7, 'up'], [6, 'down']]}, ['C', 'B', 'B']), ('control 15', {'floors': 15, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[10, 'down'], [4, 'down'], [12, 'down']]}, ['B', 'B', 'B']), ('control 18', {'floors': 12, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[4, 'up'], [7, 'down'], [5, 'up'], [1, 'down']]}, ['B', 'B', 'B', 'B'])], [('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('control 17', {'floors': 16, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'down'}, {'id': 'A', 'floor': 0, 'dir': 'idle'}, {'id': 'D', 'floor': 13, 'dir': 'up'}], 'calls': [[10, 'down'], [2, 'down']]}, ['A', 'A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 23', {'floors': 11, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'C', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'A', 'floor': 3, 'dir': 'up'}], 'calls': [[2, 'down'], [0, 'up']]}, ['D', 'A']), ('control 26', {'floors': 10, 'cars': [{'id': 'C', 'floor': 1, 'dir': 'down'}, {'id': 'B', 'floor': 1, 'dir': 'up'}], 'calls': [[6, 'up'], [0, 'up'], [7, 'up']]}, ['B', 'C', 'B']), ('control 29', {'floors': 15, 'cars': [{'id': 'C', 'floor': 8, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'B', 'floor': 10, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'down'}], 'calls': [[14, 'down'], [5, 'up']]}, ['B', 'A'])], [('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('control 11', {'floors': 14, 'cars': [{'id': 'A', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 3, 'dir': 'up'}], 'calls': [[9, 'down'], [9, 'up'], [10, 'down'], [11, 'down']]}, ['A', 'A', 'A', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 34', {'floors': 14, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[7, 'up'], [9, 'up']]}, ['A', 'C']), ('control 37', {'floors': 12, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'down'}], 'calls': [[7, 'down'], [10, 'up'], [11, 'down']]}, ['C', 'B', 'B']), ('control 40', {'floors': 8, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['B'])], [('sampled regression 55', {'floors': 11, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'C', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'up'}], 'calls': [[6, 'down'], [4, 'up']]}, ['C', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 76', {'floors': 8, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 4, 'dir': 'up'}], 'calls': [[3, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 45', {'floors': 16, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[10, 'down'], [15, 'down']]}, ['C', 'C']), ('control 48', {'floors': 10, 'cars': [{'id': 'B', 'floor': 1, 'dir': 'down'}, {'id': 'C', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[3, 'up'], [1, 'down'], [3, 'up']]}, ['D', 'C', 'D']), ('control 51', {'floors': 14, 'cars': [{'id': 'C', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'up'}, {'id': 'A', 'floor': 0, 'dir': 'up'}], 'calls': [[8, 'up'], [0, 'up'], [0, 'up'], [8, 'down']]}, ['D', 'C', 'C', 'D'])]]
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 |
|---|---|---|---|
| sampled regression 1 | ['D', 'D', 'D', 'B'] | ['D', 'D', 'C', 'B'] | Failed |
| boundary: opposite-direction approach | ['B'] | ['B'] | Passed |
| sampled regression 46 | ['A', 'D', 'C', 'C'] | ['A', 'D', 'A', 'B'] | Failed |
| control 5 | ['D', 'A', 'B', 'A'] | ['D', 'A', 'B', 'A'] | Passed |
| boundary: car level with the call while moving | ['B'] | ['B'] | Passed |
| control 4 | ['D', 'D'] | ['D', 'D'] | Passed |
| control 7 | ['A', 'A'] | ['A', 'A'] | Passed |
| control 10 | ['D'] | ['D'] | Passed |
SHA-256 / f35d003f57cfbfac6b362d4f8576a23fb4c9cc42ef6717a96fd682a8f827c3b1
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
N = x['floors'] - 1
res = []
for fl, cd in x['calls']:
best = None
for car in sorted(x['cars'], key=lambda c: c['id']):
d = abs(car['floor'] - fl)
if car['dir'] == 'idle':
fs = N - d
else:
toward = (car['dir'] == 'up' and fl > car['floor']) or (car['dir'] == 'down' and fl < car['floor'])
if not toward:
fs = 1
elif car['dir'] == cd:
fs = N + 2 - d
else:
fs = N + 1 - d
if best is None or fs > best[0]:
best = (fs, car['id'])
res.append(best[1])
return res
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('control 5', {'floors': 10, 'cars': [{'id': 'C', 'floor': 4, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}], 'calls': [[6, 'up'], [4, 'up'], [7, 'up'], [1, 'down']]}, ['D', 'A', 'B', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 4', {'floors': 13, 'cars': [{'id': 'A', 'floor': 8, 'dir': 'up'}, {'id': 'C', 'floor': 12, 'dir': 'idle'}, {'id': 'D', 'floor': 10, 'dir': 'idle'}], 'calls': [[10, 'down'], [3, 'up']]}, ['D', 'D']), ('control 7', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'idle'}, {'id': 'C', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 1, 'dir': 'idle'}], 'calls': [[5, 'down'], [6, 'down']]}, ['A', 'A']), ('control 10', {'floors': 11, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 3, 'dir': 'up'}, {'id': 'A', 'floor': 5, 'dir': 'down'}], 'calls': [[6, 'up']]}, ['D'])], [('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('control 79', {'floors': 14, 'cars': [{'id': 'D', 'floor': 6, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'up'}, {'id': 'B', 'floor': 4, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 12', {'floors': 9, 'cars': [{'id': 'C', 'floor': 0, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 0, 'dir': 'up'}], 'calls': [[0, 'up'], [7, 'up'], [6, 'down']]}, ['C', 'B', 'B']), ('control 15', {'floors': 15, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[10, 'down'], [4, 'down'], [12, 'down']]}, ['B', 'B', 'B']), ('control 18', {'floors': 12, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[4, 'up'], [7, 'down'], [5, 'up'], [1, 'down']]}, ['B', 'B', 'B', 'B'])], [('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('control 17', {'floors': 16, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'down'}, {'id': 'A', 'floor': 0, 'dir': 'idle'}, {'id': 'D', 'floor': 13, 'dir': 'up'}], 'calls': [[10, 'down'], [2, 'down']]}, ['A', 'A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 23', {'floors': 11, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'C', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'A', 'floor': 3, 'dir': 'up'}], 'calls': [[2, 'down'], [0, 'up']]}, ['D', 'A']), ('control 26', {'floors': 10, 'cars': [{'id': 'C', 'floor': 1, 'dir': 'down'}, {'id': 'B', 'floor': 1, 'dir': 'up'}], 'calls': [[6, 'up'], [0, 'up'], [7, 'up']]}, ['B', 'C', 'B']), ('control 29', {'floors': 15, 'cars': [{'id': 'C', 'floor': 8, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'B', 'floor': 10, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'down'}], 'calls': [[14, 'down'], [5, 'up']]}, ['B', 'A'])], [('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('control 11', {'floors': 14, 'cars': [{'id': 'A', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 3, 'dir': 'up'}], 'calls': [[9, 'down'], [9, 'up'], [10, 'down'], [11, 'down']]}, ['A', 'A', 'A', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 34', {'floors': 14, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[7, 'up'], [9, 'up']]}, ['A', 'C']), ('control 37', {'floors': 12, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'down'}], 'calls': [[7, 'down'], [10, 'up'], [11, 'down']]}, ['C', 'B', 'B']), ('control 40', {'floors': 8, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['B'])], [('sampled regression 55', {'floors': 11, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'C', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'up'}], 'calls': [[6, 'down'], [4, 'up']]}, ['C', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 76', {'floors': 8, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 4, 'dir': 'up'}], 'calls': [[3, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 45', {'floors': 16, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[10, 'down'], [15, 'down']]}, ['C', 'C']), ('control 48', {'floors': 10, 'cars': [{'id': 'B', 'floor': 1, 'dir': 'down'}, {'id': 'C', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[3, 'up'], [1, 'down'], [3, 'up']]}, ['D', 'C', 'D']), ('control 51', {'floors': 14, 'cars': [{'id': 'C', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'up'}, {'id': 'A', 'floor': 0, 'dir': 'up'}], 'calls': [[8, 'up'], [0, 'up'], [0, 'up'], [8, 'down']]}, ['D', 'C', 'C', 'D'])]]
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 |
|---|---|---|---|
| sampled regression 1 | ['D', 'D', 'C', 'B'] | ['D', 'D', 'C', 'B'] | Passed |
| boundary: opposite-direction approach | ['A'] | ['B'] | Failed |
| sampled regression 46 | ['A', 'D', 'A', 'B'] | ['A', 'D', 'A', 'B'] | Passed |
| control 5 | ['C', 'A', 'B', 'A'] | ['D', 'A', 'B', 'A'] | Failed |
| boundary: car level with the call while moving | ['B'] | ['B'] | Passed |
| control 4 | ['D', 'D'] | ['D', 'D'] | Passed |
| control 7 | ['A', 'A'] | ['A', 'A'] | Passed |
| control 10 | ['D'] | ['D'] | Passed |
SHA-256 / 23311c109b523a1cc323d87a2b308f8c9d8973887d8726cdde544114ea1a0c7f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
N = x['floors'] - 1
res = []
for fl, cd in x['calls']:
best = None
for car in sorted(x['cars'], key=lambda c: c['id']):
d = abs(car['floor'] - fl)
if car['dir'] == 'idle':
fs = N + 1 - d
else:
toward = (car['dir'] == 'up' and fl > car['floor']) or (car['dir'] == 'down' and fl < car['floor'])
if not toward:
fs = 1
elif car['dir'] == cd:
fs = N + 2 - d
else:
fs = N + 1 - d
if best is None or fs > best[0]:
best = (fs, car['id'])
res.append(best[1])
return res
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('control 5', {'floors': 10, 'cars': [{'id': 'C', 'floor': 4, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}], 'calls': [[6, 'up'], [4, 'up'], [7, 'up'], [1, 'down']]}, ['D', 'A', 'B', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 4', {'floors': 13, 'cars': [{'id': 'A', 'floor': 8, 'dir': 'up'}, {'id': 'C', 'floor': 12, 'dir': 'idle'}, {'id': 'D', 'floor': 10, 'dir': 'idle'}], 'calls': [[10, 'down'], [3, 'up']]}, ['D', 'D']), ('control 7', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'idle'}, {'id': 'C', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 1, 'dir': 'idle'}], 'calls': [[5, 'down'], [6, 'down']]}, ['A', 'A']), ('control 10', {'floors': 11, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 3, 'dir': 'up'}, {'id': 'A', 'floor': 5, 'dir': 'down'}], 'calls': [[6, 'up']]}, ['D'])], [('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('control 79', {'floors': 14, 'cars': [{'id': 'D', 'floor': 6, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'up'}, {'id': 'B', 'floor': 4, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 12', {'floors': 9, 'cars': [{'id': 'C', 'floor': 0, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'A', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 0, 'dir': 'up'}], 'calls': [[0, 'up'], [7, 'up'], [6, 'down']]}, ['C', 'B', 'B']), ('control 15', {'floors': 15, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[10, 'down'], [4, 'down'], [12, 'down']]}, ['B', 'B', 'B']), ('control 18', {'floors': 12, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[4, 'up'], [7, 'down'], [5, 'up'], [1, 'down']]}, ['B', 'B', 'B', 'B'])], [('sampled regression 41', {'floors': 13, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'D', 'floor': 7, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down'], [0, 'up'], [0, 'up'], [4, 'up']]}, ['A', 'B', 'B', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 2', {'floors': 9, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'idle'}, {'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'down'}, {'id': 'C', 'floor': 8, 'dir': 'down'}], 'calls': [[3, 'down'], [7, 'up']]}, ['B', 'C']), ('control 17', {'floors': 16, 'cars': [{'id': 'B', 'floor': 5, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'down'}, {'id': 'A', 'floor': 0, 'dir': 'idle'}, {'id': 'D', 'floor': 13, 'dir': 'up'}], 'calls': [[10, 'down'], [2, 'down']]}, ['A', 'A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 23', {'floors': 11, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'C', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'A', 'floor': 3, 'dir': 'up'}], 'calls': [[2, 'down'], [0, 'up']]}, ['D', 'A']), ('control 26', {'floors': 10, 'cars': [{'id': 'C', 'floor': 1, 'dir': 'down'}, {'id': 'B', 'floor': 1, 'dir': 'up'}], 'calls': [[6, 'up'], [0, 'up'], [7, 'up']]}, ['B', 'C', 'B']), ('control 29', {'floors': 15, 'cars': [{'id': 'C', 'floor': 8, 'dir': 'up'}, {'id': 'A', 'floor': 6, 'dir': 'idle'}, {'id': 'B', 'floor': 10, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'down'}], 'calls': [[14, 'down'], [5, 'up']]}, ['B', 'A'])], [('sampled regression 46', {'floors': 13, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 12, 'dir': 'down'}, {'id': 'A', 'floor': 10, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}], 'calls': [[7, 'down'], [5, 'down'], [7, 'up'], [11, 'up']]}, ['A', 'D', 'A', 'B']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 1', {'floors': 14, 'cars': [{'id': 'C', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 10, 'dir': 'down'}, {'id': 'D', 'floor': 6, 'dir': 'idle'}], 'calls': [[12, 'up'], [6, 'down'], [5, 'up'], [8, 'down']]}, ['D', 'D', 'C', 'B']), ('control 11', {'floors': 14, 'cars': [{'id': 'A', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 3, 'dir': 'up'}], 'calls': [[9, 'down'], [9, 'up'], [10, 'down'], [11, 'down']]}, ['A', 'A', 'A', 'A']), ('boundary: car level with the call while moving', {'floors': 10, 'cars': [{'id': 'A', 'floor': 5, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['B']), ('control 34', {'floors': 14, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'C', 'floor': 13, 'dir': 'down'}, {'id': 'D', 'floor': 4, 'dir': 'down'}], 'calls': [[7, 'up'], [9, 'up']]}, ['A', 'C']), ('control 37', {'floors': 12, 'cars': [{'id': 'B', 'floor': 11, 'dir': 'down'}, {'id': 'C', 'floor': 10, 'dir': 'down'}], 'calls': [[7, 'down'], [10, 'up'], [11, 'down']]}, ['C', 'B', 'B']), ('control 40', {'floors': 8, 'cars': [{'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 3, 'dir': 'idle'}, {'id': 'B', 'floor': 6, 'dir': 'down'}, {'id': 'C', 'floor': 2, 'dir': 'up'}], 'calls': [[5, 'down']]}, ['B'])], [('sampled regression 55', {'floors': 11, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'C', 'floor': 4, 'dir': 'idle'}, {'id': 'B', 'floor': 7, 'dir': 'up'}], 'calls': [[6, 'down'], [4, 'up']]}, ['C', 'A']), ('boundary: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 76', {'floors': 8, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'down'}, {'id': 'B', 'floor': 6, 'dir': 'idle'}, {'id': 'C', 'floor': 4, 'dir': 'up'}], 'calls': [[3, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('control 45', {'floors': 16, 'cars': [{'id': 'D', 'floor': 4, 'dir': 'up'}, {'id': 'C', 'floor': 10, 'dir': 'idle'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[10, 'down'], [15, 'down']]}, ['C', 'C']), ('control 48', {'floors': 10, 'cars': [{'id': 'B', 'floor': 1, 'dir': 'down'}, {'id': 'C', 'floor': 5, 'dir': 'down'}, {'id': 'D', 'floor': 1, 'dir': 'up'}, {'id': 'A', 'floor': 9, 'dir': 'down'}], 'calls': [[3, 'up'], [1, 'down'], [3, 'up']]}, ['D', 'C', 'D']), ('control 51', {'floors': 14, 'cars': [{'id': 'C', 'floor': 3, 'dir': 'idle'}, {'id': 'D', 'floor': 7, 'dir': 'up'}, {'id': 'A', 'floor': 0, 'dir': 'up'}], 'calls': [[8, 'up'], [0, 'up'], [0, 'up'], [8, 'down']]}, ['D', 'C', 'C', 'D'])]]
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 |
|---|---|---|---|
| sampled regression 1 | ['D', 'D', 'C', 'B'] | ['D', 'D', 'C', 'B'] | Passed |
| boundary: opposite-direction approach | ['B'] | ['B'] | Passed |
| sampled regression 46 | ['A', 'D', 'A', 'B'] | ['A', 'D', 'A', 'B'] | Passed |
| control 5 | ['D', 'A', 'B', 'A'] | ['D', 'A', 'B', 'A'] | Passed |
| boundary: car level with the call while moving | ['B'] | ['B'] | Passed |
| control 4 | ['D', 'D'] | ['D', 'D'] | Passed |
| control 7 | ['A', 'A'] | ['A', 'A'] | Passed |
| control 10 | ['D'] | ['D'] | Passed |
SHA-256 / 2e2a3bb95a4a92815da339439a4a26bb62385fea11aee03ba84eb74b94ab4aae
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:54.669425+00:00.
Case digest / ab7071d0c3617e3cc10e46e3596800d5f3e5ae67623375c5f19e65462fcd64a1