FAILURE MAP
← Case archive

FA-84281 / Sports scoring and tiebreakers / Open access

Disqualified athletes listed as non-finishers · case 01

A disqualified athlete appears in the results as DNF.

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

ROOT CAUSE

The DQ check is missing so DQ rows fall into the DNF branch handling.

VERIFIED REPAIR

Omit DQ rows entirely.

Unsuccessful approach: Listing DQ athletes as finishers with the last place still publishes them.

Case contract

Sprint results. results rows are [name, time] where time is seconds with up to three decimals, or "DNF"/"DQ". Times are rounded up to the next hundredth for publication. Rank by rounded time then name; equal rounded times share the place and the next place is skipped (1, 2, 2, 4). DNF athletes follow the finishers in name order with place None and time "DNF"; DQ athletes are omitted. Return [place, name, time "S.hh"] rows.

Why this case matters

Result feeds publish hundredths from fully automatic timing and must rank ties consistently.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(results):
    fin = []
    dnf = []
    for name, t in results:
        if t in ('DNF', 'DQ'):
            dnf.append(name)
            continue
        whole, _, frac = t.partition('.')
        thous = int(whole) * 1000 + int((frac + '000')[:3])
        hund = -(-thous // 10)
        fin.append((hund, name))
    fin.sort()
    out = []
    for i, (h, name) in enumerate(fin):
        place = i + 1 if i == 0 or fin[i - 1][0] != h else out[-1][0]
        out.append([place, name, '%d.%02d' % (h // 100, h % 100)])
    for name in sorted(dnf):
        out.append([None, name, 'DNF'])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
    try:
        return solve(*args)
    except Exception as exc:
        return 'raised ' + type(exc).__name__
cases = [[('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Eli', '10.3'],
     ['Ade', '10.334'],
     ['Dee', '10.350'],
     ['Cy', '10.334'],
     ['Bo', 'DQ'],
     ['Fay', '10.319']],),
   [[1, 'Eli', '10.30'],
    [2, 'Fay', '10.32'],
    [3, 'Ade', '10.34'],
    [3, 'Cy', '10.34'],
    [5, 'Dee', '10.35']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', '11.371'], ['Cy', '11.370'], ['Dee', '11.385'], ['Bo', '11.384']],),
   [[1, 'Cy', '11.37'],
    [2, 'Fay', '11.38'],
    [3, 'Bo', '11.39'],
    [3, 'Dee', '11.39'],
    [None, 'Eli', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '11.191'], ['Eli', '11.212'], ['Dee', '11.20'], ['Cy', '11.192']],),
   [[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '9.89'], ['Cy', '9.899'], ['Dee', 'DQ'], ['Fay', '9.918']],),
   [[1, 'Ade', '9.89'], [2, 'Cy', '9.90'], [3, 'Fay', '9.92']]),
  ('variant scenario 1',
   ([['Ade', '10.372'], ['Dee', '10.400'], ['Fay', '10.370'], ['Bo', '10.39']],),
   [[1, 'Fay', '10.37'], [2, 'Ade', '10.38'], [3, 'Bo', '10.39'], [4, 'Dee', '10.40']]),
  ('variant scenario 2',
   ([['Dee', '11.459'], ['Ade', '11.47'], ['Bo', '11.476']],),
   [[1, 'Dee', '11.46'], [2, 'Ade', '11.47'], [3, 'Bo', '11.48']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', 'DQ'], ['Bo', 'DQ'], ['Fay', '10.410'], ['Ade', '10.393'], ['Dee', '10.413']],),
   [[1, 'Ade', '10.40'], [2, 'Fay', '10.41'], [3, 'Dee', '10.42']]),
  ('variant scenario 1',
   ([['Fay', '10.316'], ['Cy', '10.319'], ['Dee', '10.288']],),
   [[1, 'Dee', '10.29'], [2, 'Cy', '10.32'], [2, 'Fay', '10.32']]),
  ('variant scenario 2',
   ([['Eli', '10.480'],
     ['Fay', '10.471'],
     ['Cy', '10.464'],
     ['Dee', '10.489'],
     ['Bo', '10.461'],
     ['Ade', '10.464']],),
   [[1, 'Ade', '10.47'],
    [1, 'Bo', '10.47'],
    [1, 'Cy', '10.47'],
    [4, 'Eli', '10.48'],
    [4, 'Fay', '10.48'],
    [6, 'Dee', '10.49']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', '11.288'], ['Eli', 'DQ'], ['Dee', '11.295'], ['Fay', 'DQ'], ['Ade', '11.275']],),
   [[1, 'Ade', '11.28'], [2, 'Cy', '11.29'], [3, 'Dee', '11.30']]),
  ('variant scenario 1',
   ([['Bo', '11.010'],
     ['Ade', '10.979'],
     ['Fay', '11.00'],
     ['Eli', '11.005'],
     ['Dee', '10.985'],
     ['Cy', '10.98']],),
   [[1, 'Ade', '10.98'],
    [1, 'Cy', '10.98'],
    [3, 'Dee', '10.99'],
    [4, 'Fay', '11.00'],
    [5, 'Bo', '11.01'],
    [5, 'Eli', '11.01']]),
  ('variant scenario 2',
   ([['Eli', '11.514'], ['Bo', '11.50'], ['Fay', '11.506'], ['Dee', '11.52']],),
   [[1, 'Bo', '11.50'], [2, 'Fay', '11.51'], [3, 'Dee', '11.52'], [3, 'Eli', '11.52']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '11.2'], ['Fay', '11.28'], ['Bo', 'DQ']],),
   [[1, 'Ade', '11.20'], [2, 'Fay', '11.28']]),
  ('variant scenario 1',
   ([['Dee', '11.400'], ['Bo', '11.37'], ['Cy', 'DNF'], ['Ade', '11.391']],),
   [[1, 'Bo', '11.37'], [2, 'Ade', '11.40'], [2, 'Dee', '11.40'], [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Fay', '11.318'], ['Cy', '11.334'], ['Eli', '11.314'], ['Dee', 'DNF']],),
   [[1, 'Eli', '11.32'], [1, 'Fay', '11.32'], [3, 'Cy', '11.34'], [None, 'Dee', 'DNF']])]]
for label, args, expected in cases[N - 1]:
    check(label, run(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
control distinct times[[1, 'Bo', '10.12'], [2, 'Ade', '10.15']][[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]Passed
boundary thousandth rounds up[[1, 'Cy', '10.00']][[1, 'Cy', '10.00']]Passed
boundary shared place skips next[[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']][[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]Passed
control dnf and dq[[1, 'Dee', '11.00'], [None, 'Eli', 'DNF'], [None, 'Fay', 'DNF']][[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]Failed
regression: disqualification[[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35'], [None, 'Bo', 'DNF']][[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35']]Failed
variant scenario 1[[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']][[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']]Passed
variant scenario 2[[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']][[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']]Passed

SHA-256 / 9ff88914b9d53a62b426461e33b14a099354827d243ba3548adb548c9d908032

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(results):
    fin = []
    dnf = []
    for name, t in results:
        if t == 'DQ':
            fin.append((10 ** 9, name))
            continue
        if t == 'DNF':
            dnf.append(name)
            continue
        whole, _, frac = t.partition('.')
        thous = int(whole) * 1000 + int((frac + '000')[:3])
        hund = -(-thous // 10)
        fin.append((hund, name))
    fin.sort()
    out = []
    for i, (h, name) in enumerate(fin):
        place = i + 1 if i == 0 or fin[i - 1][0] != h else out[-1][0]
        out.append([place, name, '%d.%02d' % (h // 100, h % 100)])
    for name in sorted(dnf):
        out.append([None, name, 'DNF'])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
    try:
        return solve(*args)
    except Exception as exc:
        return 'raised ' + type(exc).__name__
cases = [[('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Eli', '10.3'],
     ['Ade', '10.334'],
     ['Dee', '10.350'],
     ['Cy', '10.334'],
     ['Bo', 'DQ'],
     ['Fay', '10.319']],),
   [[1, 'Eli', '10.30'],
    [2, 'Fay', '10.32'],
    [3, 'Ade', '10.34'],
    [3, 'Cy', '10.34'],
    [5, 'Dee', '10.35']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', '11.371'], ['Cy', '11.370'], ['Dee', '11.385'], ['Bo', '11.384']],),
   [[1, 'Cy', '11.37'],
    [2, 'Fay', '11.38'],
    [3, 'Bo', '11.39'],
    [3, 'Dee', '11.39'],
    [None, 'Eli', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '11.191'], ['Eli', '11.212'], ['Dee', '11.20'], ['Cy', '11.192']],),
   [[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '9.89'], ['Cy', '9.899'], ['Dee', 'DQ'], ['Fay', '9.918']],),
   [[1, 'Ade', '9.89'], [2, 'Cy', '9.90'], [3, 'Fay', '9.92']]),
  ('variant scenario 1',
   ([['Ade', '10.372'], ['Dee', '10.400'], ['Fay', '10.370'], ['Bo', '10.39']],),
   [[1, 'Fay', '10.37'], [2, 'Ade', '10.38'], [3, 'Bo', '10.39'], [4, 'Dee', '10.40']]),
  ('variant scenario 2',
   ([['Dee', '11.459'], ['Ade', '11.47'], ['Bo', '11.476']],),
   [[1, 'Dee', '11.46'], [2, 'Ade', '11.47'], [3, 'Bo', '11.48']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', 'DQ'], ['Bo', 'DQ'], ['Fay', '10.410'], ['Ade', '10.393'], ['Dee', '10.413']],),
   [[1, 'Ade', '10.40'], [2, 'Fay', '10.41'], [3, 'Dee', '10.42']]),
  ('variant scenario 1',
   ([['Fay', '10.316'], ['Cy', '10.319'], ['Dee', '10.288']],),
   [[1, 'Dee', '10.29'], [2, 'Cy', '10.32'], [2, 'Fay', '10.32']]),
  ('variant scenario 2',
   ([['Eli', '10.480'],
     ['Fay', '10.471'],
     ['Cy', '10.464'],
     ['Dee', '10.489'],
     ['Bo', '10.461'],
     ['Ade', '10.464']],),
   [[1, 'Ade', '10.47'],
    [1, 'Bo', '10.47'],
    [1, 'Cy', '10.47'],
    [4, 'Eli', '10.48'],
    [4, 'Fay', '10.48'],
    [6, 'Dee', '10.49']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', '11.288'], ['Eli', 'DQ'], ['Dee', '11.295'], ['Fay', 'DQ'], ['Ade', '11.275']],),
   [[1, 'Ade', '11.28'], [2, 'Cy', '11.29'], [3, 'Dee', '11.30']]),
  ('variant scenario 1',
   ([['Bo', '11.010'],
     ['Ade', '10.979'],
     ['Fay', '11.00'],
     ['Eli', '11.005'],
     ['Dee', '10.985'],
     ['Cy', '10.98']],),
   [[1, 'Ade', '10.98'],
    [1, 'Cy', '10.98'],
    [3, 'Dee', '10.99'],
    [4, 'Fay', '11.00'],
    [5, 'Bo', '11.01'],
    [5, 'Eli', '11.01']]),
  ('variant scenario 2',
   ([['Eli', '11.514'], ['Bo', '11.50'], ['Fay', '11.506'], ['Dee', '11.52']],),
   [[1, 'Bo', '11.50'], [2, 'Fay', '11.51'], [3, 'Dee', '11.52'], [3, 'Eli', '11.52']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '11.2'], ['Fay', '11.28'], ['Bo', 'DQ']],),
   [[1, 'Ade', '11.20'], [2, 'Fay', '11.28']]),
  ('variant scenario 1',
   ([['Dee', '11.400'], ['Bo', '11.37'], ['Cy', 'DNF'], ['Ade', '11.391']],),
   [[1, 'Bo', '11.37'], [2, 'Ade', '11.40'], [2, 'Dee', '11.40'], [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Fay', '11.318'], ['Cy', '11.334'], ['Eli', '11.314'], ['Dee', 'DNF']],),
   [[1, 'Eli', '11.32'], [1, 'Fay', '11.32'], [3, 'Cy', '11.34'], [None, 'Dee', 'DNF']])]]
for label, args, expected in cases[N - 1]:
    check(label, run(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
control distinct times[[1, 'Bo', '10.12'], [2, 'Ade', '10.15']][[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]Passed
boundary thousandth rounds up[[1, 'Cy', '10.00']][[1, 'Cy', '10.00']]Passed
boundary shared place skips next[[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']][[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]Passed
control dnf and dq[[1, 'Dee', '11.00'], [2, 'Fay', '10000000.00'], [None, 'Eli', 'DNF']][[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]Failed
regression: disqualification[[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35'], [6, 'Bo', '10000000.00']][[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35']]Failed
variant scenario 1[[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']][[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']]Passed
variant scenario 2[[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']][[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']]Passed

SHA-256 / 78730dbbf37d8ea1cae675ed8d7580d826907ccfcfdf9117b189c2589e3a9227

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(results):
    fin = []
    dnf = []
    for name, t in results:
        if t == 'DQ':
            continue
        if t == 'DNF':
            dnf.append(name)
            continue
        whole, _, frac = t.partition('.')
        thous = int(whole) * 1000 + int((frac + '000')[:3])
        hund = -(-thous // 10)
        fin.append((hund, name))
    fin.sort()
    out = []
    for i, (h, name) in enumerate(fin):
        place = i + 1 if i == 0 or fin[i - 1][0] != h else out[-1][0]
        out.append([place, name, '%d.%02d' % (h // 100, h % 100)])
    for name in sorted(dnf):
        out.append([None, name, 'DNF'])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
    try:
        return solve(*args)
    except Exception as exc:
        return 'raised ' + type(exc).__name__
cases = [[('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Eli', '10.3'],
     ['Ade', '10.334'],
     ['Dee', '10.350'],
     ['Cy', '10.334'],
     ['Bo', 'DQ'],
     ['Fay', '10.319']],),
   [[1, 'Eli', '10.30'],
    [2, 'Fay', '10.32'],
    [3, 'Ade', '10.34'],
    [3, 'Cy', '10.34'],
    [5, 'Dee', '10.35']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', '11.371'], ['Cy', '11.370'], ['Dee', '11.385'], ['Bo', '11.384']],),
   [[1, 'Cy', '11.37'],
    [2, 'Fay', '11.38'],
    [3, 'Bo', '11.39'],
    [3, 'Dee', '11.39'],
    [None, 'Eli', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '11.191'], ['Eli', '11.212'], ['Dee', '11.20'], ['Cy', '11.192']],),
   [[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '9.89'], ['Cy', '9.899'], ['Dee', 'DQ'], ['Fay', '9.918']],),
   [[1, 'Ade', '9.89'], [2, 'Cy', '9.90'], [3, 'Fay', '9.92']]),
  ('variant scenario 1',
   ([['Ade', '10.372'], ['Dee', '10.400'], ['Fay', '10.370'], ['Bo', '10.39']],),
   [[1, 'Fay', '10.37'], [2, 'Ade', '10.38'], [3, 'Bo', '10.39'], [4, 'Dee', '10.40']]),
  ('variant scenario 2',
   ([['Dee', '11.459'], ['Ade', '11.47'], ['Bo', '11.476']],),
   [[1, 'Dee', '11.46'], [2, 'Ade', '11.47'], [3, 'Bo', '11.48']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', 'DQ'], ['Bo', 'DQ'], ['Fay', '10.410'], ['Ade', '10.393'], ['Dee', '10.413']],),
   [[1, 'Ade', '10.40'], [2, 'Fay', '10.41'], [3, 'Dee', '10.42']]),
  ('variant scenario 1',
   ([['Fay', '10.316'], ['Cy', '10.319'], ['Dee', '10.288']],),
   [[1, 'Dee', '10.29'], [2, 'Cy', '10.32'], [2, 'Fay', '10.32']]),
  ('variant scenario 2',
   ([['Eli', '10.480'],
     ['Fay', '10.471'],
     ['Cy', '10.464'],
     ['Dee', '10.489'],
     ['Bo', '10.461'],
     ['Ade', '10.464']],),
   [[1, 'Ade', '10.47'],
    [1, 'Bo', '10.47'],
    [1, 'Cy', '10.47'],
    [4, 'Eli', '10.48'],
    [4, 'Fay', '10.48'],
    [6, 'Dee', '10.49']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Cy', '11.288'], ['Eli', 'DQ'], ['Dee', '11.295'], ['Fay', 'DQ'], ['Ade', '11.275']],),
   [[1, 'Ade', '11.28'], [2, 'Cy', '11.29'], [3, 'Dee', '11.30']]),
  ('variant scenario 1',
   ([['Bo', '11.010'],
     ['Ade', '10.979'],
     ['Fay', '11.00'],
     ['Eli', '11.005'],
     ['Dee', '10.985'],
     ['Cy', '10.98']],),
   [[1, 'Ade', '10.98'],
    [1, 'Cy', '10.98'],
    [3, 'Dee', '10.99'],
    [4, 'Fay', '11.00'],
    [5, 'Bo', '11.01'],
    [5, 'Eli', '11.01']]),
  ('variant scenario 2',
   ([['Eli', '11.514'], ['Bo', '11.50'], ['Fay', '11.506'], ['Dee', '11.52']],),
   [[1, 'Bo', '11.50'], [2, 'Fay', '11.51'], [3, 'Dee', '11.52'], [3, 'Eli', '11.52']])],
 [('control distinct times',
   ([['Bo', '10.12'], ['Ade', '10.15']],),
   [[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]),
  ('boundary thousandth rounds up', ([['Cy', '9.991']],), [[1, 'Cy', '10.00']]),
  ('boundary shared place skips next',
   ([['Ade', '10.101'], ['Bo', '10.11'], ['Cy', '10.2']],),
   [[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]),
  ('control dnf and dq',
   ([['Eli', 'DNF'], ['Dee', '11.0'], ['Fay', 'DQ']],),
   [[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]),
  ('regression: disqualification',
   ([['Ade', '11.2'], ['Fay', '11.28'], ['Bo', 'DQ']],),
   [[1, 'Ade', '11.20'], [2, 'Fay', '11.28']]),
  ('variant scenario 1',
   ([['Dee', '11.400'], ['Bo', '11.37'], ['Cy', 'DNF'], ['Ade', '11.391']],),
   [[1, 'Bo', '11.37'], [2, 'Ade', '11.40'], [2, 'Dee', '11.40'], [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Fay', '11.318'], ['Cy', '11.334'], ['Eli', '11.314'], ['Dee', 'DNF']],),
   [[1, 'Eli', '11.32'], [1, 'Fay', '11.32'], [3, 'Cy', '11.34'], [None, 'Dee', 'DNF']])]]
for label, args, expected in cases[N - 1]:
    check(label, run(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
control distinct times[[1, 'Bo', '10.12'], [2, 'Ade', '10.15']][[1, 'Bo', '10.12'], [2, 'Ade', '10.15']]Passed
boundary thousandth rounds up[[1, 'Cy', '10.00']][[1, 'Cy', '10.00']]Passed
boundary shared place skips next[[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']][[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]Passed
control dnf and dq[[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']][[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]Passed
regression: disqualification[[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35']][[1, 'Eli', '10.30'], [2, 'Fay', '10.32'], [3, 'Ade', '10.34'], [3, 'Cy', '10.34'], [5, 'Dee', '10.35']]Passed
variant scenario 1[[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']][[1, 'Cy', '11.37'], [2, 'Fay', '11.38'], [3, 'Bo', '11.39'], [3, 'Dee', '11.39'], [None, 'Eli', 'DNF']]Passed
variant scenario 2[[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']][[1, 'Bo', '11.20'], [1, 'Cy', '11.20'], [1, 'Dee', '11.20'], [4, 'Eli', '11.22']]Passed

SHA-256 / ae1a26a9920a1b93286ebde3b1ca2b86f4b9f04d3017e3f832669e46775b9bba

Verification & scope

Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any governing body rulebook or operator house rules. 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:50:29.306657+00:00.

Case digest / 00635e1c2d7111e12ed4a45774244edf60fd43c55e284c11c9964ea327d216f3