FAILURE MAP
← Case archive

FA-67626 / Elevator dispatch scheduling / Open access

Figure of suitability hall call allocation: same-direction bonus · case 01

A car approaching in the call direction gains no advantage.

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

ROOT CAUSE

The same-direction bonus is granted to every up-travelling car regardless of the call direction.

VERIFIED REPAIR

Give N+2-d to a car approaching in the call direction.

Unsuccessful approach: Inverting the test rewards cars that will pass the passenger by.

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 + 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'] == 'up':
                    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 = [[('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('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: 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']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 77', {'floors': 13, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}, {'id': 'A', 'floor': 4, 'dir': 'down'}], 'calls': [[2, 'up'], [11, 'up'], [9, 'up'], [12, 'down']]}, ['C', 'C', 'C', 'A']), ('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']), ('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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 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: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: idle versus same-direction car', {'floors': 12, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('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']), ('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']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 32', {'floors': 16, 'cars': [{'id': 'A', 'floor': 15, 'dir': 'up'}, {'id': 'D', 'floor': 14, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}], 'calls': [[15, 'down'], [14, 'up'], [2, 'down']]}, ['A', 'C', 'C']), ('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 fixtureActualExpectedOutcome
regression: opposite-direction approach['A']['B']Failed
boundary: same-direction bonus['A']['A']Passed
sampled regression 55['A', 'A']['C', 'A']Failed
boundary: car level with the call while moving['B']['B']Passed
boundary: equal scores['A']['A']Passed
control 1['D', 'D', 'C', 'B']['D', 'D', 'C', 'B']Passed
control 4['D', 'D']['D', 'D']Passed
control 7['A', 'A']['A', 'A']Passed

SHA-256 / ab0fcad3398026183fa4e84cdac6cd538b29fbfd6fe41c04345f12be4d7475bd

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 + 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 = [[('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('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: 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']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 77', {'floors': 13, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}, {'id': 'A', 'floor': 4, 'dir': 'down'}], 'calls': [[2, 'up'], [11, 'up'], [9, 'up'], [12, 'down']]}, ['C', 'C', 'C', 'A']), ('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']), ('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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 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: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: idle versus same-direction car', {'floors': 12, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('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']), ('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']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 32', {'floors': 16, 'cars': [{'id': 'A', 'floor': 15, 'dir': 'up'}, {'id': 'D', 'floor': 14, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}], 'calls': [[15, 'down'], [14, 'up'], [2, 'down']]}, ['A', 'C', 'C']), ('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 fixtureActualExpectedOutcome
regression: opposite-direction approach['A']['B']Failed
boundary: same-direction bonus['B']['A']Failed
sampled regression 55['A', 'C']['C', 'A']Failed
boundary: car level with the call while moving['B']['B']Passed
boundary: equal scores['A']['A']Passed
control 1['D', 'D', 'C', 'B']['D', 'D', 'C', 'B']Passed
control 4['D', 'D']['D', 'D']Passed
control 7['A', 'A']['A', 'A']Passed

SHA-256 / 89d930b2bb67a79efd546f49a50ad4838684b1cfed6922229743532787a0e56e

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 = [[('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('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: 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']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('control 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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('sampled regression 77', {'floors': 13, 'cars': [{'id': 'B', 'floor': 8, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}, {'id': 'A', 'floor': 4, 'dir': 'down'}], 'calls': [[2, 'up'], [11, 'up'], [9, 'up'], [12, 'down']]}, ['C', 'C', 'C', 'A']), ('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']), ('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 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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 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: car moving away', {'floors': 10, 'cars': [{'id': 'A', 'floor': 6, 'dir': 'up'}, {'id': 'B', 'floor': 9, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: idle versus same-direction car', {'floors': 12, 'cars': [{'id': 'A', 'floor': 3, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('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']), ('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']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('boundary: equal scores', {'floors': 10, 'cars': [{'id': 'B', 'floor': 3, 'dir': 'idle'}, {'id': 'A', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'up']]}, ['A']), ('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'])], [('regression: opposite-direction approach', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 7, 'dir': 'idle'}], 'calls': [[5, 'down']]}, ['B']), ('boundary: same-direction bonus', {'floors': 10, 'cars': [{'id': 'A', 'floor': 2, 'dir': 'up'}, {'id': 'B', 'floor': 8, 'dir': 'down'}], 'calls': [[5, 'up']]}, ['A']), ('sampled regression 32', {'floors': 16, 'cars': [{'id': 'A', 'floor': 15, 'dir': 'up'}, {'id': 'D', 'floor': 14, 'dir': 'down'}, {'id': 'C', 'floor': 0, 'dir': 'up'}], 'calls': [[15, 'down'], [14, 'up'], [2, 'down']]}, ['A', 'C', 'C']), ('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 fixtureActualExpectedOutcome
regression: opposite-direction approach['B']['B']Passed
boundary: same-direction bonus['A']['A']Passed
sampled regression 55['C', 'A']['C', 'A']Passed
boundary: car level with the call while moving['B']['B']Passed
boundary: equal scores['A']['A']Passed
control 1['D', 'D', 'C', 'B']['D', 'D', 'C', 'B']Passed
control 4['D', 'D']['D', 'D']Passed
control 7['A', 'A']['A', 'A']Passed

SHA-256 / 5f3d1010d67c45d0be55be2c2480af80d90eab8f07b14fe5b4f571d3bc418385

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.624332+00:00.

Case digest / a158da47a505b98f22f628736aef2541419b6af7cc5148b3f7cef5aeb70601f7