FA-67781 / Elevator dispatch scheduling / Open access
Hall button registration and cancellation: terminal button validity · case 01
Non-existent terminal buttons register calls that no car will answer.
ROOT CAUSE
Presses of the missing terminal buttons are accepted.
VERIFIED REPAIR
Ignore up at the top floor and down at the bottom floor.
Unsuccessful approach: Rejecting only the top floor still accepts a down call at the lobby.
Case contract
Hall buttons exist on floors 0..floors-1, except no up button at the top floor and no down button at the bottom floor; other presses are ignored. A registered call lights. A car arriving at a floor serves calls matching its direction; an idle car or a car arriving at a terminal floor (where it must reverse) serves both directions. Log lit/ignored and served:<dirs> (sorted), and list pending calls sorted.
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):
top = x['floors'] - 1
calls = set()
out = []
for kind, f, d in x['events']:
if kind == 'press':
if not (0 <= f <= top) :
out.append('ignored')
continue
calls.add((f, d))
out.append('lit')
else:
both = d == 'idle' or f in (0, top)
served = sorted(c for c in calls if c[0] == f and (both or c[1] == d))
for c in served:
calls.discard(c)
out.append('served:' + ','.join(c[1] for c in served))
return {'log': out, 'pending': sorted([list(c) for c in calls])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 11', {'floors': 9, 'events': [['arrive', 2, 'down'], ['arrive', 5, 'idle'], ['press', 8, 'down'], ['press', 9, 'up'], ['press', 5, 'down'], ['press', 4, 'down'], ['press', 8, 'up'], ['press', 9, 'down']]}, {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]}), ('sampled regression 4', {'floors': 6, 'events': [['arrive', 2, 'up'], ['press', 1, 'up'], ['press', 5, 'down'], ['press', 1, 'down'], ['arrive', 4, 'up'], ['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 0, 'idle'], ['arrive', 5, 'down'], ['press', 0, 'down']]}, {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('control 1', {'floors': 5, 'events': [['press', -1, 'down'], ['press', 4, 'down'], ['press', 4, 'down'], ['arrive', 3, 'idle'], ['press', 0, 'up'], ['press', 1, 'down'], ['press', 2, 'up'], ['arrive', 4, 'up']]}, {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]}), ('control 7', {'floors': 5, 'events': [['arrive', 4, 'idle'], ['press', 3, 'down'], ['arrive', 2, 'down'], ['arrive', 3, 'idle'], ['arrive', 3, 'up'], ['press', 1, 'down']]}, {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]}), ('control 10', {'floors': 10, 'events': [['press', 7, 'down'], ['press', 3, 'up'], ['press', 3, 'up']]}, {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('sampled regression 12', {'floors': 7, 'events': [['press', 5, 'up'], ['press', 6, 'down'], ['arrive', 2, 'idle'], ['arrive', 5, 'down'], ['press', 6, 'up']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored'], 'pending': [[5, 'up'], [6, 'down']]}), ('sampled regression 15', {'floors': 10, 'events': [['press', 9, 'up'], ['arrive', 5, 'down'], ['arrive', 9, 'up'], ['press', 0, 'down'], ['press', 10, 'down'], ['press', 2, 'down']]}, {'log': ['ignored', 'served:', 'served:', 'ignored', 'ignored', 'lit'], 'pending': [[2, 'down']]}), ('sampled regression 18', {'floors': 9, 'events': [['press', 5, 'down'], ['press', 1, 'down'], ['press', 7, 'down'], ['arrive', 0, 'up'], ['arrive', 3, 'up'], ['press', 7, 'up'], ['press', 5, 'up'], ['press', 8, 'up'], ['arrive', 8, 'up']]}, {'log': ['lit', 'lit', 'lit', 'served:', 'served:', 'lit', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down'], [5, 'down'], [5, 'up'], [7, 'down'], [7, 'up']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 36', {'floors': 9, 'events': [['press', 5, 'down'], ['press', -1, 'down'], ['press', 0, 'down']]}, {'log': ['lit', 'ignored', 'ignored'], 'pending': [[5, 'down']]}), ('sampled regression 54', {'floors': 9, 'events': [['press', 3, 'down'], ['press', 7, 'down'], ['arrive', 2, 'idle'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 1, 'down'], ['arrive', 4, 'down'], ['press', 8, 'up'], ['press', 0, 'down'], ['press', 3, 'down']]}, {'log': ['lit', 'lit', 'served:', 'lit', 'served:', 'lit', 'served:down', 'ignored', 'ignored', 'lit'], 'pending': [[1, 'down'], [3, 'down'], [7, 'down']]}), ('boundary: down car at the lobby reverses', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'down']]}, {'log': ['lit', 'served:up'], 'pending': []}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('sampled regression 29', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'idle'], ['press', 5, 'up'], ['press', 6, 'down'], ['press', 0, 'up'], ['arrive', 5, 'down']]}, {'log': ['lit', 'served:up', 'ignored', 'ignored', 'lit', 'served:'], 'pending': [[0, 'up']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 56', {'floors': 5, 'events': [['arrive', 3, 'down'], ['press', 2, 'up'], ['press', 0, 'down'], ['press', 4, 'down'], ['arrive', 0, 'up'], ['press', 0, 'down'], ['arrive', 1, 'down'], ['press', 4, 'up'], ['press', 5, 'down'], ['arrive', 4, 'up']]}, {'log': ['served:', 'lit', 'ignored', 'lit', 'served:', 'ignored', 'served:', 'ignored', 'ignored', 'served:down'], 'pending': [[2, 'up']]}), ('sampled regression 61', {'floors': 7, 'events': [['arrive', 5, 'up'], ['press', 0, 'down'], ['press', 6, 'up'], ['press', 0, 'down'], ['arrive', 6, 'down'], ['arrive', 2, 'down'], ['press', 3, 'up'], ['press', 0, 'down']]}, {'log': ['served:', 'ignored', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'ignored'], 'pending': [[3, 'up']]}), ('boundary: passing car in the other direction', {'floors': 6, 'events': [['press', 2, 'down'], ['arrive', 2, 'up']]}, {'log': ['lit', 'served:'], 'pending': [[2, 'down']]}), ('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('sampled regression 34', {'floors': 5, 'events': [['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 3, 'idle'], ['arrive', 1, 'idle'], ['arrive', 0, 'down'], ['arrive', 2, 'down'], ['arrive', 1, 'down'], ['press', 1, 'down'], ['press', 4, 'up'], ['arrive', 3, 'down']]}, {'log': ['served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down']]}), ('control 37', {'floors': 7, 'events': [['arrive', 4, 'up'], ['press', 1, 'up'], ['arrive', 2, 'down'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 4, 'down']]}, {'log': ['served:', 'lit', 'served:', 'lit', 'served:', 'lit'], 'pending': [[1, 'up'], [4, 'down']]}), ('control 40', {'floors': 9, 'events': [['arrive', 1, 'idle'], ['press', 7, 'down'], ['arrive', 0, 'down'], ['press', -1, 'up']]}, {'log': ['served:', 'lit', 'served:', 'ignored'], 'pending': [[7, 'down']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 67', {'floors': 5, 'events': [['arrive', 1, 'idle'], ['press', 4, 'up'], ['press', 5, 'up'], ['press', 1, 'down'], ['press', 1, 'up'], ['press', 2, 'up'], ['arrive', 3, 'idle']]}, {'log': ['served:', 'ignored', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[1, 'down'], [1, 'up'], [2, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('control 45', {'floors': 5, 'events': [['arrive', 4, 'up'], ['arrive', 2, 'up'], ['press', -1, 'up'], ['press', 4, 'down'], ['press', 3, 'up'], ['press', 4, 'down'], ['arrive', 2, 'up']]}, {'log': ['served:', 'served:', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[3, 'up'], [4, 'down']]}), ('control 48', {'floors': 9, 'events': [['arrive', 8, 'idle'], ['press', 2, 'down'], ['press', 2, 'down'], ['press', 9, 'down'], ['press', -1, 'up'], ['arrive', 0, 'idle'], ['press', 8, 'down']]}, {'log': ['served:', 'lit', 'lit', 'ignored', 'ignored', 'served:', 'lit'], 'pending': [[2, 'down'], [8, 'down']]}), ('control 51', {'floors': 7, 'events': [['press', 7, 'down'], ['press', 4, 'down'], ['press', 6, 'down']]}, {'log': ['ignored', 'lit', 'lit'], 'pending': [[4, 'down'], [6, 'down']]})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: up button at the top floor | {'log': ['lit', 'lit'], 'pending': [[5, 'down'], [5, 'up']]} | {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]} | Failed |
| regression: down button at the lobby | {'log': ['lit', 'lit'], 'pending': [[0, 'down'], [0, 'up']]} | {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]} | Failed |
| sampled regression 11 | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'lit', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down'], [8, 'up']]} | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]} | Failed |
| sampled regression 4 | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'lit'], 'pending': [[0, 'down'], [1, 'down'], [1, 'up']]} | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]} | Failed |
| boundary: idle car serves both lamps | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | Passed |
| control 1 | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | Passed |
| control 7 | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | Passed |
| control 10 | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | Passed |
SHA-256 / 0b8ce941a46c2df28a994754906971b0435fdbb68d2ad3b064d111fd0d78ede5
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
top = x['floors'] - 1
calls = set()
out = []
for kind, f, d in x['events']:
if kind == 'press':
if not (0 <= f <= top) or (f == top and d == 'up'):
out.append('ignored')
continue
calls.add((f, d))
out.append('lit')
else:
both = d == 'idle' or f in (0, top)
served = sorted(c for c in calls if c[0] == f and (both or c[1] == d))
for c in served:
calls.discard(c)
out.append('served:' + ','.join(c[1] for c in served))
return {'log': out, 'pending': sorted([list(c) for c in calls])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 11', {'floors': 9, 'events': [['arrive', 2, 'down'], ['arrive', 5, 'idle'], ['press', 8, 'down'], ['press', 9, 'up'], ['press', 5, 'down'], ['press', 4, 'down'], ['press', 8, 'up'], ['press', 9, 'down']]}, {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]}), ('sampled regression 4', {'floors': 6, 'events': [['arrive', 2, 'up'], ['press', 1, 'up'], ['press', 5, 'down'], ['press', 1, 'down'], ['arrive', 4, 'up'], ['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 0, 'idle'], ['arrive', 5, 'down'], ['press', 0, 'down']]}, {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('control 1', {'floors': 5, 'events': [['press', -1, 'down'], ['press', 4, 'down'], ['press', 4, 'down'], ['arrive', 3, 'idle'], ['press', 0, 'up'], ['press', 1, 'down'], ['press', 2, 'up'], ['arrive', 4, 'up']]}, {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]}), ('control 7', {'floors': 5, 'events': [['arrive', 4, 'idle'], ['press', 3, 'down'], ['arrive', 2, 'down'], ['arrive', 3, 'idle'], ['arrive', 3, 'up'], ['press', 1, 'down']]}, {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]}), ('control 10', {'floors': 10, 'events': [['press', 7, 'down'], ['press', 3, 'up'], ['press', 3, 'up']]}, {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('sampled regression 12', {'floors': 7, 'events': [['press', 5, 'up'], ['press', 6, 'down'], ['arrive', 2, 'idle'], ['arrive', 5, 'down'], ['press', 6, 'up']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored'], 'pending': [[5, 'up'], [6, 'down']]}), ('sampled regression 15', {'floors': 10, 'events': [['press', 9, 'up'], ['arrive', 5, 'down'], ['arrive', 9, 'up'], ['press', 0, 'down'], ['press', 10, 'down'], ['press', 2, 'down']]}, {'log': ['ignored', 'served:', 'served:', 'ignored', 'ignored', 'lit'], 'pending': [[2, 'down']]}), ('sampled regression 18', {'floors': 9, 'events': [['press', 5, 'down'], ['press', 1, 'down'], ['press', 7, 'down'], ['arrive', 0, 'up'], ['arrive', 3, 'up'], ['press', 7, 'up'], ['press', 5, 'up'], ['press', 8, 'up'], ['arrive', 8, 'up']]}, {'log': ['lit', 'lit', 'lit', 'served:', 'served:', 'lit', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down'], [5, 'down'], [5, 'up'], [7, 'down'], [7, 'up']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 36', {'floors': 9, 'events': [['press', 5, 'down'], ['press', -1, 'down'], ['press', 0, 'down']]}, {'log': ['lit', 'ignored', 'ignored'], 'pending': [[5, 'down']]}), ('sampled regression 54', {'floors': 9, 'events': [['press', 3, 'down'], ['press', 7, 'down'], ['arrive', 2, 'idle'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 1, 'down'], ['arrive', 4, 'down'], ['press', 8, 'up'], ['press', 0, 'down'], ['press', 3, 'down']]}, {'log': ['lit', 'lit', 'served:', 'lit', 'served:', 'lit', 'served:down', 'ignored', 'ignored', 'lit'], 'pending': [[1, 'down'], [3, 'down'], [7, 'down']]}), ('boundary: down car at the lobby reverses', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'down']]}, {'log': ['lit', 'served:up'], 'pending': []}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('sampled regression 29', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'idle'], ['press', 5, 'up'], ['press', 6, 'down'], ['press', 0, 'up'], ['arrive', 5, 'down']]}, {'log': ['lit', 'served:up', 'ignored', 'ignored', 'lit', 'served:'], 'pending': [[0, 'up']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 56', {'floors': 5, 'events': [['arrive', 3, 'down'], ['press', 2, 'up'], ['press', 0, 'down'], ['press', 4, 'down'], ['arrive', 0, 'up'], ['press', 0, 'down'], ['arrive', 1, 'down'], ['press', 4, 'up'], ['press', 5, 'down'], ['arrive', 4, 'up']]}, {'log': ['served:', 'lit', 'ignored', 'lit', 'served:', 'ignored', 'served:', 'ignored', 'ignored', 'served:down'], 'pending': [[2, 'up']]}), ('sampled regression 61', {'floors': 7, 'events': [['arrive', 5, 'up'], ['press', 0, 'down'], ['press', 6, 'up'], ['press', 0, 'down'], ['arrive', 6, 'down'], ['arrive', 2, 'down'], ['press', 3, 'up'], ['press', 0, 'down']]}, {'log': ['served:', 'ignored', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'ignored'], 'pending': [[3, 'up']]}), ('boundary: passing car in the other direction', {'floors': 6, 'events': [['press', 2, 'down'], ['arrive', 2, 'up']]}, {'log': ['lit', 'served:'], 'pending': [[2, 'down']]}), ('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('sampled regression 34', {'floors': 5, 'events': [['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 3, 'idle'], ['arrive', 1, 'idle'], ['arrive', 0, 'down'], ['arrive', 2, 'down'], ['arrive', 1, 'down'], ['press', 1, 'down'], ['press', 4, 'up'], ['arrive', 3, 'down']]}, {'log': ['served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down']]}), ('control 37', {'floors': 7, 'events': [['arrive', 4, 'up'], ['press', 1, 'up'], ['arrive', 2, 'down'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 4, 'down']]}, {'log': ['served:', 'lit', 'served:', 'lit', 'served:', 'lit'], 'pending': [[1, 'up'], [4, 'down']]}), ('control 40', {'floors': 9, 'events': [['arrive', 1, 'idle'], ['press', 7, 'down'], ['arrive', 0, 'down'], ['press', -1, 'up']]}, {'log': ['served:', 'lit', 'served:', 'ignored'], 'pending': [[7, 'down']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 67', {'floors': 5, 'events': [['arrive', 1, 'idle'], ['press', 4, 'up'], ['press', 5, 'up'], ['press', 1, 'down'], ['press', 1, 'up'], ['press', 2, 'up'], ['arrive', 3, 'idle']]}, {'log': ['served:', 'ignored', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[1, 'down'], [1, 'up'], [2, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('control 45', {'floors': 5, 'events': [['arrive', 4, 'up'], ['arrive', 2, 'up'], ['press', -1, 'up'], ['press', 4, 'down'], ['press', 3, 'up'], ['press', 4, 'down'], ['arrive', 2, 'up']]}, {'log': ['served:', 'served:', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[3, 'up'], [4, 'down']]}), ('control 48', {'floors': 9, 'events': [['arrive', 8, 'idle'], ['press', 2, 'down'], ['press', 2, 'down'], ['press', 9, 'down'], ['press', -1, 'up'], ['arrive', 0, 'idle'], ['press', 8, 'down']]}, {'log': ['served:', 'lit', 'lit', 'ignored', 'ignored', 'served:', 'lit'], 'pending': [[2, 'down'], [8, 'down']]}), ('control 51', {'floors': 7, 'events': [['press', 7, 'down'], ['press', 4, 'down'], ['press', 6, 'down']]}, {'log': ['ignored', 'lit', 'lit'], 'pending': [[4, 'down'], [6, 'down']]})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: up button at the top floor | {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]} | {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]} | Passed |
| regression: down button at the lobby | {'log': ['lit', 'lit'], 'pending': [[0, 'down'], [0, 'up']]} | {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]} | Failed |
| sampled regression 11 | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]} | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]} | Passed |
| sampled regression 4 | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'lit'], 'pending': [[0, 'down'], [1, 'down'], [1, 'up']]} | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]} | Failed |
| boundary: idle car serves both lamps | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | Passed |
| control 1 | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | Passed |
| control 7 | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | Passed |
| control 10 | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | Passed |
SHA-256 / bb128feaf618a80b6f1998fc4d9d0ca5a8ddfa0f39198d6916fbc4e761adeb95
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
top = x['floors'] - 1
calls = set()
out = []
for kind, f, d in x['events']:
if kind == 'press':
if not (0 <= f <= top) or (f == top and d == 'up') or (f == 0 and d == 'down'):
out.append('ignored')
continue
calls.add((f, d))
out.append('lit')
else:
both = d == 'idle' or f in (0, top)
served = sorted(c for c in calls if c[0] == f and (both or c[1] == d))
for c in served:
calls.discard(c)
out.append('served:' + ','.join(c[1] for c in served))
return {'log': out, 'pending': sorted([list(c) for c in calls])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 11', {'floors': 9, 'events': [['arrive', 2, 'down'], ['arrive', 5, 'idle'], ['press', 8, 'down'], ['press', 9, 'up'], ['press', 5, 'down'], ['press', 4, 'down'], ['press', 8, 'up'], ['press', 9, 'down']]}, {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]}), ('sampled regression 4', {'floors': 6, 'events': [['arrive', 2, 'up'], ['press', 1, 'up'], ['press', 5, 'down'], ['press', 1, 'down'], ['arrive', 4, 'up'], ['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 0, 'idle'], ['arrive', 5, 'down'], ['press', 0, 'down']]}, {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('control 1', {'floors': 5, 'events': [['press', -1, 'down'], ['press', 4, 'down'], ['press', 4, 'down'], ['arrive', 3, 'idle'], ['press', 0, 'up'], ['press', 1, 'down'], ['press', 2, 'up'], ['arrive', 4, 'up']]}, {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]}), ('control 7', {'floors': 5, 'events': [['arrive', 4, 'idle'], ['press', 3, 'down'], ['arrive', 2, 'down'], ['arrive', 3, 'idle'], ['arrive', 3, 'up'], ['press', 1, 'down']]}, {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]}), ('control 10', {'floors': 10, 'events': [['press', 7, 'down'], ['press', 3, 'up'], ['press', 3, 'up']]}, {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('sampled regression 12', {'floors': 7, 'events': [['press', 5, 'up'], ['press', 6, 'down'], ['arrive', 2, 'idle'], ['arrive', 5, 'down'], ['press', 6, 'up']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored'], 'pending': [[5, 'up'], [6, 'down']]}), ('sampled regression 15', {'floors': 10, 'events': [['press', 9, 'up'], ['arrive', 5, 'down'], ['arrive', 9, 'up'], ['press', 0, 'down'], ['press', 10, 'down'], ['press', 2, 'down']]}, {'log': ['ignored', 'served:', 'served:', 'ignored', 'ignored', 'lit'], 'pending': [[2, 'down']]}), ('sampled regression 18', {'floors': 9, 'events': [['press', 5, 'down'], ['press', 1, 'down'], ['press', 7, 'down'], ['arrive', 0, 'up'], ['arrive', 3, 'up'], ['press', 7, 'up'], ['press', 5, 'up'], ['press', 8, 'up'], ['arrive', 8, 'up']]}, {'log': ['lit', 'lit', 'lit', 'served:', 'served:', 'lit', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down'], [5, 'down'], [5, 'up'], [7, 'down'], [7, 'up']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 36', {'floors': 9, 'events': [['press', 5, 'down'], ['press', -1, 'down'], ['press', 0, 'down']]}, {'log': ['lit', 'ignored', 'ignored'], 'pending': [[5, 'down']]}), ('sampled regression 54', {'floors': 9, 'events': [['press', 3, 'down'], ['press', 7, 'down'], ['arrive', 2, 'idle'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 1, 'down'], ['arrive', 4, 'down'], ['press', 8, 'up'], ['press', 0, 'down'], ['press', 3, 'down']]}, {'log': ['lit', 'lit', 'served:', 'lit', 'served:', 'lit', 'served:down', 'ignored', 'ignored', 'lit'], 'pending': [[1, 'down'], [3, 'down'], [7, 'down']]}), ('boundary: down car at the lobby reverses', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'down']]}, {'log': ['lit', 'served:up'], 'pending': []}), ('sampled regression 23', {'floors': 10, 'events': [['press', 5, 'up'], ['press', 1, 'up'], ['arrive', 9, 'up'], ['arrive', 9, 'idle'], ['press', 9, 'up'], ['press', 9, 'up'], ['arrive', 1, 'down'], ['arrive', 9, 'up'], ['press', 4, 'up'], ['press', 4, 'down']]}, {'log': ['lit', 'lit', 'served:', 'served:', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'lit'], 'pending': [[1, 'up'], [4, 'down'], [4, 'up'], [5, 'up']]}), ('sampled regression 26', {'floors': 5, 'events': [['press', 4, 'down'], ['press', 0, 'down'], ['arrive', 0, 'up'], ['press', 3, 'up'], ['press', 3, 'up'], ['press', 0, 'up'], ['arrive', 4, 'idle'], ['arrive', 0, 'down'], ['press', 4, 'down']]}, {'log': ['lit', 'ignored', 'served:', 'lit', 'lit', 'lit', 'served:down', 'served:up', 'lit'], 'pending': [[3, 'up'], [4, 'down']]}), ('sampled regression 29', {'floors': 6, 'events': [['press', 0, 'up'], ['arrive', 0, 'idle'], ['press', 5, 'up'], ['press', 6, 'down'], ['press', 0, 'up'], ['arrive', 5, 'down']]}, {'log': ['lit', 'served:up', 'ignored', 'ignored', 'lit', 'served:'], 'pending': [[0, 'up']]})], [('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 56', {'floors': 5, 'events': [['arrive', 3, 'down'], ['press', 2, 'up'], ['press', 0, 'down'], ['press', 4, 'down'], ['arrive', 0, 'up'], ['press', 0, 'down'], ['arrive', 1, 'down'], ['press', 4, 'up'], ['press', 5, 'down'], ['arrive', 4, 'up']]}, {'log': ['served:', 'lit', 'ignored', 'lit', 'served:', 'ignored', 'served:', 'ignored', 'ignored', 'served:down'], 'pending': [[2, 'up']]}), ('sampled regression 61', {'floors': 7, 'events': [['arrive', 5, 'up'], ['press', 0, 'down'], ['press', 6, 'up'], ['press', 0, 'down'], ['arrive', 6, 'down'], ['arrive', 2, 'down'], ['press', 3, 'up'], ['press', 0, 'down']]}, {'log': ['served:', 'ignored', 'ignored', 'ignored', 'served:', 'served:', 'lit', 'ignored'], 'pending': [[3, 'up']]}), ('boundary: passing car in the other direction', {'floors': 6, 'events': [['press', 2, 'down'], ['arrive', 2, 'up']]}, {'log': ['lit', 'served:'], 'pending': [[2, 'down']]}), ('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('sampled regression 34', {'floors': 5, 'events': [['arrive', 3, 'up'], ['arrive', 0, 'idle'], ['arrive', 3, 'idle'], ['arrive', 1, 'idle'], ['arrive', 0, 'down'], ['arrive', 2, 'down'], ['arrive', 1, 'down'], ['press', 1, 'down'], ['press', 4, 'up'], ['arrive', 3, 'down']]}, {'log': ['served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'served:', 'lit', 'ignored', 'served:'], 'pending': [[1, 'down']]}), ('control 37', {'floors': 7, 'events': [['arrive', 4, 'up'], ['press', 1, 'up'], ['arrive', 2, 'down'], ['press', 4, 'down'], ['arrive', 0, 'idle'], ['press', 4, 'down']]}, {'log': ['served:', 'lit', 'served:', 'lit', 'served:', 'lit'], 'pending': [[1, 'up'], [4, 'down']]}), ('control 40', {'floors': 9, 'events': [['arrive', 1, 'idle'], ['press', 7, 'down'], ['arrive', 0, 'down'], ['press', -1, 'up']]}, {'log': ['served:', 'lit', 'served:', 'ignored'], 'pending': [[7, 'down']]})], [('regression: up button at the top floor', {'floors': 6, 'events': [['press', 5, 'up'], ['press', 5, 'down']]}, {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]}), ('regression: down button at the lobby', {'floors': 6, 'events': [['press', 0, 'down'], ['press', 0, 'up']]}, {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]}), ('sampled regression 67', {'floors': 5, 'events': [['arrive', 1, 'idle'], ['press', 4, 'up'], ['press', 5, 'up'], ['press', 1, 'down'], ['press', 1, 'up'], ['press', 2, 'up'], ['arrive', 3, 'idle']]}, {'log': ['served:', 'ignored', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[1, 'down'], [1, 'up'], [2, 'up']]}), ('boundary: idle car serves both lamps', {'floors': 6, 'events': [['press', 3, 'up'], ['press', 3, 'down'], ['arrive', 3, 'idle']]}, {'log': ['lit', 'lit', 'served:down,up'], 'pending': []}), ('boundary: up car at the top floor reverses', {'floors': 6, 'events': [['press', 5, 'down'], ['arrive', 5, 'up']]}, {'log': ['lit', 'served:down'], 'pending': []}), ('control 45', {'floors': 5, 'events': [['arrive', 4, 'up'], ['arrive', 2, 'up'], ['press', -1, 'up'], ['press', 4, 'down'], ['press', 3, 'up'], ['press', 4, 'down'], ['arrive', 2, 'up']]}, {'log': ['served:', 'served:', 'ignored', 'lit', 'lit', 'lit', 'served:'], 'pending': [[3, 'up'], [4, 'down']]}), ('control 48', {'floors': 9, 'events': [['arrive', 8, 'idle'], ['press', 2, 'down'], ['press', 2, 'down'], ['press', 9, 'down'], ['press', -1, 'up'], ['arrive', 0, 'idle'], ['press', 8, 'down']]}, {'log': ['served:', 'lit', 'lit', 'ignored', 'ignored', 'served:', 'lit'], 'pending': [[2, 'down'], [8, 'down']]}), ('control 51', {'floors': 7, 'events': [['press', 7, 'down'], ['press', 4, 'down'], ['press', 6, 'down']]}, {'log': ['ignored', 'lit', 'lit'], 'pending': [[4, 'down'], [6, 'down']]})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: up button at the top floor | {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]} | {'log': ['ignored', 'lit'], 'pending': [[5, 'down']]} | Passed |
| regression: down button at the lobby | {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]} | {'log': ['ignored', 'lit'], 'pending': [[0, 'up']]} | Passed |
| sampled regression 11 | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]} | {'log': ['served:', 'served:', 'lit', 'ignored', 'lit', 'lit', 'ignored', 'ignored'], 'pending': [[4, 'down'], [5, 'down'], [8, 'down']]} | Passed |
| sampled regression 4 | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]} | {'log': ['served:', 'lit', 'lit', 'lit', 'served:', 'served:', 'served:', 'served:', 'served:down', 'ignored'], 'pending': [[1, 'down'], [1, 'up']]} | Passed |
| boundary: idle car serves both lamps | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | {'log': ['lit', 'lit', 'served:down,up'], 'pending': []} | Passed |
| control 1 | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | {'log': ['ignored', 'lit', 'lit', 'served:', 'lit', 'lit', 'lit', 'served:down'], 'pending': [[0, 'up'], [1, 'down'], [2, 'up']]} | Passed |
| control 7 | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | {'log': ['served:', 'lit', 'served:', 'served:down', 'served:', 'lit'], 'pending': [[1, 'down']]} | Passed |
| control 10 | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | {'log': ['lit', 'lit', 'lit'], 'pending': [[3, 'up'], [7, 'down']]} | Passed |
SHA-256 / 29f3314559a03a5b228c540d28aff8768e4323ceabcdf8fc628cd11b2298f4b8
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.949381+00:00.
Case digest / 5d62cdf40d07ea6cfa917afeaaee36a57d461f2d5007178c6832856dd3e9eb59