FAILURE MAP
← Case archive

FA-66631 / Airline fare rule evaluation / Open access

Connection time measured from the inbound departure · case 01

Long-haul flights followed by short connections are counted as stopovers.

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

ROOT CAUSE

The gap subtracts the inbound departure instead of its arrival, adding the flight time.

VERIFIED REPAIR

Measure from inbound arrival to onward departure.

Unsuccessful approach: Measuring arrival to arrival includes the onward flight time.

Case contract

Input {'segments':[[departure, arrival ISO local, domestic flag]],'max_stopovers','max_transfers'}. At each connection the gap from the inbound arrival to the next departure is a stopover when it exceeds 4 h if both segments are domestic, otherwise 24 h (a gap equal to the limit is not a stopover). Every connection point is a transfer. Return [stopovers, transfers, failures in order STOPOVERS, TRANSFERS].

Why this case matters

Fare rules cap stopovers and transfers separately; whether a connection is a stopover depends on the connection time and the domestic/international context.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    segs = x['segments']
    stops = 0
    for (d0, a0, dom0), (d1, a1, dom1) in zip(segs, segs[1:]):
        gap = (datetime.datetime.fromisoformat(d1) - datetime.datetime.fromisoformat(d0)).total_seconds() / 3600
        limit = 4 if (dom0 and dom1) else 24
        if gap > limit: stops += 1
    transfers = len(segs) - 1
    fails = []
    if stops > x['max_stopovers']: fails.append('STOPOVERS')
    if transfers > x['max_transfers']: fails.append('TRANSFERS')
    return [stops, transfers, fails]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:01', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:01', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2029-07-06T05:00', '2029-07-06T16:00', False], ['2029-07-06T19:00', '2029-07-06T20:30', False], ['2029-07-07T00:30', '2029-07-07T14:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [0, 2, []]], ['sampled case 2', {'segments': [['2029-04-03T21:30', '2029-04-04T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 0, []]], ['sampled case 3', {'segments': [['2028-08-09T11:30', '2028-08-09T19:00', False], ['2028-08-09T20:30', '2028-08-10T07:00', False], ['2028-08-10T12:00', '2028-08-10T18:30', True], ['2028-08-10T20:00', '2028-08-11T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 3, []]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:02', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:02', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2028-08-14T16:45', '2028-08-15T03:45', False], ['2028-08-17T03:45', '2028-08-17T17:45', False], ['2028-08-17T22:45', '2028-08-18T09:15', True], ['2028-08-18T13:15', '2028-08-18T22:45', False], ['2028-08-19T18:45', '2028-08-20T06:45', False]], 'max_stopovers': 2, 'max_transfers': 1}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2027-06-01T12:45', '2027-06-01T20:15', True], ['2027-06-01T22:15', '2027-06-02T11:45', True], ['2027-06-03T11:45', '2027-06-03T21:45', True]], 'max_stopovers': 1, 'max_transfers': 2}, [1, 2, []]], ['sampled case 3', {'segments': [['2027-07-21T03:00', '2027-07-21T07:00', False], ['2027-07-22T03:00', '2027-07-22T08:30', False], ['2027-07-22T09:30', '2027-07-22T16:30', False], ['2027-07-22T17:30', '2027-07-22T23:00', False], ['2027-07-23T19:00', '2027-07-24T00:00', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:03', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-06T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [2, 3, []]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:03', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-15T21:15', '2027-02-15T23:15', True], ['2027-02-16T07:45', '2027-02-16T18:45', True], ['2027-02-17T02:45', '2027-02-17T13:45', False], ['2027-02-17T22:15', '2027-02-18T00:45', False], ['2027-02-18T20:45', '2027-02-19T02:15', False]], 'max_stopovers': 1, 'max_transfers': 3}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2029-05-25T20:00', '2029-05-26T01:00', True], ['2029-05-27T02:00', '2029-05-27T07:00', False], ['2029-05-28T08:30', '2029-05-28T17:00', False], ['2029-05-28T19:00', '2029-05-29T07:30', False], ['2029-05-29T09:30', '2029-05-29T13:00', False]], 'max_stopovers': 1, 'max_transfers': 3}, [2, 4, ['STOPOVERS', 'TRANSFERS']]], ['sampled case 3', {'segments': [['2028-09-07T21:45', '2028-09-08T03:15', True], ['2028-09-08T23:15', '2028-09-09T11:15', True], ['2028-09-10T11:15', '2028-09-10T14:45', False], ['2028-09-12T14:45', '2028-09-13T04:45', True], ['2028-09-13T05:45', '2028-09-13T20:15', True]], 'max_stopovers': 0, 'max_transfers': 2}, [2, 4, ['STOPOVERS', 'TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:04', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:04', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-11-27T17:15', '2027-11-27T23:45', False], ['2027-11-28T01:45', '2027-11-28T11:45', False]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 1, []]], ['sampled case 2', {'segments': [['2029-03-09T18:00', '2029-03-10T02:00', True], ['2029-03-10T03:00', '2029-03-10T12:00', True]], 'max_stopovers': 1, 'max_transfers': 2}, [0, 1, []]], ['sampled case 3', {'segments': [['2029-03-20T20:00', '2029-03-20T23:30', True], ['2029-03-21T02:30', '2029-03-21T12:00', False], ['2029-03-23T12:00', '2029-03-23T16:00', False], ['2029-03-23T21:00', '2029-03-24T01:30', False], ['2029-03-24T02:30', '2029-03-24T12:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [1, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:05', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:05', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-17T17:30', '2027-02-17T20:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [0, 0, []]], ['sampled case 2', {'segments': [['2029-07-05T21:30', '2029-07-06T01:30', False], ['2029-07-06T02:30', '2029-07-06T07:30', True], ['2029-07-06T09:00', '2029-07-06T23:00', True], ['2029-07-08T00:30', '2029-07-08T15:00', True], ['2029-07-08T18:30', '2029-07-09T04:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [1, 4, ['TRANSFERS']]], ['sampled case 3', {'segments': [['2027-06-10T18:15', '2027-06-10T19:15', False], ['2027-06-10T22:45', '2027-06-11T12:15', True]], 'max_stopovers': 0, 'max_transfers': 3}, [0, 1, []]]]]
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
international 24h exactly[1, 1, ['STOPOVERS']][0, 1, []]Failed
domestic five hour connection[1, 1, ['STOPOVERS']][1, 1, ['STOPOVERS']]Passed
mixed connection 6h[0, 1, []][0, 1, []]Passed
long flight short connection[1, 2, ['TRANSFERS']][1, 2, ['TRANSFERS']]Passed
three stopovers[3, 3, ['STOPOVERS']][3, 3, ['STOPOVERS']]Passed
nonstop[0, 0, []][0, 0, []]Passed
sampled case 1[0, 2, []][0, 2, []]Passed
sampled case 2[0, 0, []][0, 0, []]Passed
sampled case 3[1, 3, []][0, 3, []]Failed

SHA-256 / 05afef84b133785ac822c5204155b619a81f2889132b2016cc284d0396cc430b

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    segs = x['segments']
    stops = 0
    for (d0, a0, dom0), (d1, a1, dom1) in zip(segs, segs[1:]):
        gap = (datetime.datetime.fromisoformat(a1) - datetime.datetime.fromisoformat(a0)).total_seconds() / 3600
        limit = 4 if (dom0 and dom1) else 24
        if gap > limit: stops += 1
    transfers = len(segs) - 1
    fails = []
    if stops > x['max_stopovers']: fails.append('STOPOVERS')
    if transfers > x['max_transfers']: fails.append('TRANSFERS')
    return [stops, transfers, fails]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:01', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:01', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2029-07-06T05:00', '2029-07-06T16:00', False], ['2029-07-06T19:00', '2029-07-06T20:30', False], ['2029-07-07T00:30', '2029-07-07T14:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [0, 2, []]], ['sampled case 2', {'segments': [['2029-04-03T21:30', '2029-04-04T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 0, []]], ['sampled case 3', {'segments': [['2028-08-09T11:30', '2028-08-09T19:00', False], ['2028-08-09T20:30', '2028-08-10T07:00', False], ['2028-08-10T12:00', '2028-08-10T18:30', True], ['2028-08-10T20:00', '2028-08-11T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 3, []]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:02', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:02', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2028-08-14T16:45', '2028-08-15T03:45', False], ['2028-08-17T03:45', '2028-08-17T17:45', False], ['2028-08-17T22:45', '2028-08-18T09:15', True], ['2028-08-18T13:15', '2028-08-18T22:45', False], ['2028-08-19T18:45', '2028-08-20T06:45', False]], 'max_stopovers': 2, 'max_transfers': 1}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2027-06-01T12:45', '2027-06-01T20:15', True], ['2027-06-01T22:15', '2027-06-02T11:45', True], ['2027-06-03T11:45', '2027-06-03T21:45', True]], 'max_stopovers': 1, 'max_transfers': 2}, [1, 2, []]], ['sampled case 3', {'segments': [['2027-07-21T03:00', '2027-07-21T07:00', False], ['2027-07-22T03:00', '2027-07-22T08:30', False], ['2027-07-22T09:30', '2027-07-22T16:30', False], ['2027-07-22T17:30', '2027-07-22T23:00', False], ['2027-07-23T19:00', '2027-07-24T00:00', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:03', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-06T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [2, 3, []]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:03', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-15T21:15', '2027-02-15T23:15', True], ['2027-02-16T07:45', '2027-02-16T18:45', True], ['2027-02-17T02:45', '2027-02-17T13:45', False], ['2027-02-17T22:15', '2027-02-18T00:45', False], ['2027-02-18T20:45', '2027-02-19T02:15', False]], 'max_stopovers': 1, 'max_transfers': 3}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2029-05-25T20:00', '2029-05-26T01:00', True], ['2029-05-27T02:00', '2029-05-27T07:00', False], ['2029-05-28T08:30', '2029-05-28T17:00', False], ['2029-05-28T19:00', '2029-05-29T07:30', False], ['2029-05-29T09:30', '2029-05-29T13:00', False]], 'max_stopovers': 1, 'max_transfers': 3}, [2, 4, ['STOPOVERS', 'TRANSFERS']]], ['sampled case 3', {'segments': [['2028-09-07T21:45', '2028-09-08T03:15', True], ['2028-09-08T23:15', '2028-09-09T11:15', True], ['2028-09-10T11:15', '2028-09-10T14:45', False], ['2028-09-12T14:45', '2028-09-13T04:45', True], ['2028-09-13T05:45', '2028-09-13T20:15', True]], 'max_stopovers': 0, 'max_transfers': 2}, [2, 4, ['STOPOVERS', 'TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:04', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:04', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-11-27T17:15', '2027-11-27T23:45', False], ['2027-11-28T01:45', '2027-11-28T11:45', False]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 1, []]], ['sampled case 2', {'segments': [['2029-03-09T18:00', '2029-03-10T02:00', True], ['2029-03-10T03:00', '2029-03-10T12:00', True]], 'max_stopovers': 1, 'max_transfers': 2}, [0, 1, []]], ['sampled case 3', {'segments': [['2029-03-20T20:00', '2029-03-20T23:30', True], ['2029-03-21T02:30', '2029-03-21T12:00', False], ['2029-03-23T12:00', '2029-03-23T16:00', False], ['2029-03-23T21:00', '2029-03-24T01:30', False], ['2029-03-24T02:30', '2029-03-24T12:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [1, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:05', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:05', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-17T17:30', '2027-02-17T20:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [0, 0, []]], ['sampled case 2', {'segments': [['2029-07-05T21:30', '2029-07-06T01:30', False], ['2029-07-06T02:30', '2029-07-06T07:30', True], ['2029-07-06T09:00', '2029-07-06T23:00', True], ['2029-07-08T00:30', '2029-07-08T15:00', True], ['2029-07-08T18:30', '2029-07-09T04:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [1, 4, ['TRANSFERS']]], ['sampled case 3', {'segments': [['2027-06-10T18:15', '2027-06-10T19:15', False], ['2027-06-10T22:45', '2027-06-11T12:15', True]], 'max_stopovers': 0, 'max_transfers': 3}, [0, 1, []]]]]
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
international 24h exactly[1, 1, ['STOPOVERS']][0, 1, []]Failed
domestic five hour connection[1, 1, ['STOPOVERS']][1, 1, ['STOPOVERS']]Passed
mixed connection 6h[0, 1, []][0, 1, []]Passed
long flight short connection[1, 2, ['TRANSFERS']][1, 2, ['TRANSFERS']]Passed
three stopovers[3, 3, ['STOPOVERS']][3, 3, ['STOPOVERS']]Passed
nonstop[0, 0, []][0, 0, []]Passed
sampled case 1[0, 2, []][0, 2, []]Passed
sampled case 2[0, 0, []][0, 0, []]Passed
sampled case 3[1, 3, []][0, 3, []]Failed

SHA-256 / a55b772be4f43ae23c043a2abc6ac1993a81ae66426c23f89c8d611b2ad642a9

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(x):
    segs = x['segments']
    stops = 0
    for (d0, a0, dom0), (d1, a1, dom1) in zip(segs, segs[1:]):
        gap = (datetime.datetime.fromisoformat(d1) - datetime.datetime.fromisoformat(a0)).total_seconds() / 3600
        limit = 4 if (dom0 and dom1) else 24
        if gap > limit: stops += 1
    transfers = len(segs) - 1
    fails = []
    if stops > x['max_stopovers']: fails.append('STOPOVERS')
    if transfers > x['max_transfers']: fails.append('TRANSFERS')
    return [stops, transfers, fails]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:01', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:01', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2029-07-06T05:00', '2029-07-06T16:00', False], ['2029-07-06T19:00', '2029-07-06T20:30', False], ['2029-07-07T00:30', '2029-07-07T14:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [0, 2, []]], ['sampled case 2', {'segments': [['2029-04-03T21:30', '2029-04-04T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 0, []]], ['sampled case 3', {'segments': [['2028-08-09T11:30', '2028-08-09T19:00', False], ['2028-08-09T20:30', '2028-08-10T07:00', False], ['2028-08-10T12:00', '2028-08-10T18:30', True], ['2028-08-10T20:00', '2028-08-11T07:30', True]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 3, []]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:02', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:02', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2028-08-14T16:45', '2028-08-15T03:45', False], ['2028-08-17T03:45', '2028-08-17T17:45', False], ['2028-08-17T22:45', '2028-08-18T09:15', True], ['2028-08-18T13:15', '2028-08-18T22:45', False], ['2028-08-19T18:45', '2028-08-20T06:45', False]], 'max_stopovers': 2, 'max_transfers': 1}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2027-06-01T12:45', '2027-06-01T20:15', True], ['2027-06-01T22:15', '2027-06-02T11:45', True], ['2027-06-03T11:45', '2027-06-03T21:45', True]], 'max_stopovers': 1, 'max_transfers': 2}, [1, 2, []]], ['sampled case 3', {'segments': [['2027-07-21T03:00', '2027-07-21T07:00', False], ['2027-07-22T03:00', '2027-07-22T08:30', False], ['2027-07-22T09:30', '2027-07-22T16:30', False], ['2027-07-22T17:30', '2027-07-22T23:00', False], ['2027-07-23T19:00', '2027-07-24T00:00', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:03', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-06T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [2, 3, []]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:03', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-15T21:15', '2027-02-15T23:15', True], ['2027-02-16T07:45', '2027-02-16T18:45', True], ['2027-02-17T02:45', '2027-02-17T13:45', False], ['2027-02-17T22:15', '2027-02-18T00:45', False], ['2027-02-18T20:45', '2027-02-19T02:15', False]], 'max_stopovers': 1, 'max_transfers': 3}, [1, 4, ['TRANSFERS']]], ['sampled case 2', {'segments': [['2029-05-25T20:00', '2029-05-26T01:00', True], ['2029-05-27T02:00', '2029-05-27T07:00', False], ['2029-05-28T08:30', '2029-05-28T17:00', False], ['2029-05-28T19:00', '2029-05-29T07:30', False], ['2029-05-29T09:30', '2029-05-29T13:00', False]], 'max_stopovers': 1, 'max_transfers': 3}, [2, 4, ['STOPOVERS', 'TRANSFERS']]], ['sampled case 3', {'segments': [['2028-09-07T21:45', '2028-09-08T03:15', True], ['2028-09-08T23:15', '2028-09-09T11:15', True], ['2028-09-10T11:15', '2028-09-10T14:45', False], ['2028-09-12T14:45', '2028-09-13T04:45', True], ['2028-09-13T05:45', '2028-09-13T20:15', True]], 'max_stopovers': 0, 'max_transfers': 2}, [2, 4, ['STOPOVERS', 'TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:04', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 1}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-07T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:04', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-11-27T17:15', '2027-11-27T23:45', False], ['2027-11-28T01:45', '2027-11-28T11:45', False]], 'max_stopovers': 2, 'max_transfers': 3}, [0, 1, []]], ['sampled case 2', {'segments': [['2029-03-09T18:00', '2029-03-10T02:00', True], ['2029-03-10T03:00', '2029-03-10T12:00', True]], 'max_stopovers': 1, 'max_transfers': 2}, [0, 1, []]], ['sampled case 3', {'segments': [['2029-03-20T20:00', '2029-03-20T23:30', True], ['2029-03-21T02:30', '2029-03-21T12:00', False], ['2029-03-23T12:00', '2029-03-23T16:00', False], ['2029-03-23T21:00', '2029-03-24T01:30', False], ['2029-03-24T02:30', '2029-03-24T12:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [1, 4, ['TRANSFERS']]]], [['international 24h exactly', {'segments': [['2027-05-01T10:00', '2027-05-01T18:00', False], ['2027-05-02T18:00', '2027-05-02T23:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['domestic five hour connection', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T14:05', '2027-05-01T16:00', True]], 'max_stopovers': 0, 'max_transfers': 1}, [1, 1, ['STOPOVERS']]], ['mixed connection 6h', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', True], ['2027-05-01T15:00', '2027-05-02T07:00', False]], 'max_stopovers': 0, 'max_transfers': 2}, [0, 1, []]], ['long flight short connection', {'segments': [['2027-05-01T07:00', '2027-05-02T01:00', False], ['2027-05-02T03:00', '2027-05-02T09:00', False], ['2027-05-03T10:00', '2027-05-03T12:00', False]], 'max_stopovers': 1, 'max_transfers': 1}, [1, 2, ['TRANSFERS']]], ['three stopovers', {'segments': [['2027-05-01T07:00', '2027-05-01T09:00', False], ['2027-05-03T07:00', '2027-05-03T09:00', False], ['2027-05-05T07:00', '2027-05-05T09:00', False], ['2027-05-08T07:00', '2027-05-09T09:00', False]], 'max_stopovers': 2, 'max_transfers': 3}, [3, 3, ['STOPOVERS']]], ['nonstop', {'segments': [['2027-05-01T07:00', '2027-05-01T09:05', False]], 'max_stopovers': 0, 'max_transfers': 0}, [0, 0, []]], ['sampled case 1', {'segments': [['2027-02-17T17:30', '2027-02-17T20:00', False]], 'max_stopovers': 1, 'max_transfers': 0}, [0, 0, []]], ['sampled case 2', {'segments': [['2029-07-05T21:30', '2029-07-06T01:30', False], ['2029-07-06T02:30', '2029-07-06T07:30', True], ['2029-07-06T09:00', '2029-07-06T23:00', True], ['2029-07-08T00:30', '2029-07-08T15:00', True], ['2029-07-08T18:30', '2029-07-09T04:30', False]], 'max_stopovers': 2, 'max_transfers': 2}, [1, 4, ['TRANSFERS']]], ['sampled case 3', {'segments': [['2027-06-10T18:15', '2027-06-10T19:15', False], ['2027-06-10T22:45', '2027-06-11T12:15', True]], 'max_stopovers': 0, 'max_transfers': 3}, [0, 1, []]]]]
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
international 24h exactly[0, 1, []][0, 1, []]Passed
domestic five hour connection[1, 1, ['STOPOVERS']][1, 1, ['STOPOVERS']]Passed
mixed connection 6h[0, 1, []][0, 1, []]Passed
long flight short connection[1, 2, ['TRANSFERS']][1, 2, ['TRANSFERS']]Passed
three stopovers[3, 3, ['STOPOVERS']][3, 3, ['STOPOVERS']]Passed
nonstop[0, 0, []][0, 0, []]Passed
sampled case 1[0, 2, []][0, 2, []]Passed
sampled case 2[0, 0, []][0, 0, []]Passed
sampled case 3[0, 3, []][0, 3, []]Passed

SHA-256 / 361ff64de704576f00c7d2548a65e4a5ebf2e21724ff42bf13b4edf28aa252be

Verification & scope

A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard conformance. 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:45.525634+00:00.

Case digest / fa80e79b622171edbc8762bfb6b7e79841111b5a69c3f5d7c3d4b51d32a01b5e