FAILURE MAP
← Case archive

FA-84266 / Sports scoring and tiebreakers / Open access

Timing truncated instead of rounded up · case 01

10.101 is published as 10.10 and ties are split that should be shared.

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

ROOT CAUSE

Thousandths are converted to hundredths with floor division.

VERIFIED REPAIR

Round up to the next hundredth.

Unsuccessful approach: Rounding to the nearest hundredth still publishes 10.104 as 10.10.

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 == '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: round up hundredths',
   ([['Fay', '10.2'], ['Cy', '10.26'], ['Dee', '10.245'], ['Eli', '10.234']],),
   [[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]),
  ('variant scenario 1',
   ([['Fay', '10.24'],
     ['Dee', '10.24'],
     ['Bo', 'DNF'],
     ['Cy', 'DNF'],
     ['Eli', '10.265'],
     ['Ade', '10.']],),
   [[1, 'Ade', '10.00'],
    [2, 'Dee', '10.24'],
    [2, 'Fay', '10.24'],
    [4, 'Eli', '10.27'],
    [None, 'Bo', 'DNF'],
    [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '10.219'], ['Eli', '10.2'], ['Fay', 'DNF']],),
   [[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']])],
 [('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: round up hundredths',
   ([['Dee', '10.666'], ['Ade', '10.674'], ['Fay', '10.676'], ['Eli', '10.66']],),
   [[1, 'Eli', '10.66'], [2, 'Dee', '10.67'], [3, 'Ade', '10.68'], [3, 'Fay', '10.68']]),
  ('variant scenario 1',
   ([['Eli', '9.835'], ['Fay', '9.826'], ['Ade', '9.81'], ['Dee', '9.814']],),
   [[1, 'Ade', '9.81'], [2, 'Dee', '9.82'], [3, 'Fay', '9.83'], [4, 'Eli', '9.84']]),
  ('variant scenario 2',
   ([['Fay', '10.88'], ['Eli', '10.906'], ['Dee', '10.907']],),
   [[1, 'Fay', '10.88'], [2, 'Dee', '10.91'], [2, 'Eli', '10.91']])],
 [('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: round up hundredths',
   ([['Eli', '11.384'], ['Dee', '11.360'], ['Fay', '11.'], ['Bo', '11.377']],),
   [[1, 'Fay', '11.00'], [2, 'Dee', '11.36'], [3, 'Bo', '11.38'], [4, 'Eli', '11.39']]),
  ('variant scenario 1',
   ([['Fay', '11.159'],
     ['Eli', '11.15'],
     ['Cy', '11.167'],
     ['Bo', 'DQ'],
     ['Ade', '11.14'],
     ['Dee', '11.146']],),
   [[1, 'Ade', '11.14'],
    [2, 'Dee', '11.15'],
    [2, 'Eli', '11.15'],
    [4, 'Fay', '11.16'],
    [5, 'Cy', '11.17']]),
  ('variant scenario 2',
   ([['Bo', '10.68'], ['Dee', '10.703'], ['Fay', '10.694'], ['Eli', '10.713']],),
   [[1, 'Bo', '10.68'], [2, 'Fay', '10.70'], [3, 'Dee', '10.71'], [4, 'Eli', '10.72']])],
 [('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: round up hundredths',
   ([['Cy', '11.364'], ['Dee', '11.391'], ['Ade', 'DQ']],),
   [[1, 'Cy', '11.37'], [2, 'Dee', '11.40']]),
  ('variant scenario 1',
   ([['Eli', '9.884'], ['Ade', '9.873'], ['Bo', '9.882'], ['Cy', '9.868'], ['Fay', '9.885']],),
   [[1, 'Cy', '9.87'],
    [2, 'Ade', '9.88'],
    [3, 'Bo', '9.89'],
    [3, 'Eli', '9.89'],
    [3, 'Fay', '9.89']]),
  ('variant scenario 2',
   ([['Dee', '10.455'], ['Fay', '10.47'], ['Bo', '10.471'], ['Ade', '10.469'], ['Cy', 'DQ']],),
   [[1, 'Dee', '10.46'], [2, 'Ade', '10.47'], [2, 'Fay', '10.47'], [4, 'Bo', '10.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: round up hundredths',
   ([['Eli', '11.310'], ['Ade', 'DQ'], ['Fay', '11.34'], ['Dee', '11.323'], ['Cy', 'DNF']],),
   [[1, 'Eli', '11.31'], [2, 'Dee', '11.33'], [3, 'Fay', '11.34'], [None, 'Cy', 'DNF']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', 'DNF'], ['Dee', 'DQ'], ['Ade', '11.155']],),
   [[1, 'Ade', '11.16'], [None, 'Eli', 'DNF'], [None, 'Fay', 'DNF']]),
  ('variant scenario 2',
   ([['Dee', '11.420'], ['Eli', '11.38'], ['Cy', '11.41'], ['Ade', '11.416'], ['Bo', '11.40']],),
   [[1, 'Eli', '11.38'],
    [2, 'Bo', '11.40'],
    [3, 'Cy', '11.41'],
    [4, 'Ade', '11.42'],
    [4, 'Dee', '11.42']])]]
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', '9.99']][[1, 'Cy', '10.00']]Failed
boundary shared place skips next[[1, 'Ade', '10.10'], [2, 'Bo', '10.11'], [3, 'Cy', '10.20']][[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]Failed
control dnf and dq[[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']][[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]Passed
regression: round up hundredths[[1, 'Fay', '10.20'], [2, 'Eli', '10.23'], [3, 'Dee', '10.24'], [4, 'Cy', '10.26']][[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]Failed
variant scenario 1[[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.26'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']][[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.27'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']]Failed
variant scenario 2[[1, 'Eli', '10.20'], [2, 'Bo', '10.21'], [None, 'Fay', 'DNF']][[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']]Failed

SHA-256 / 201d29f41df521a2a6bd9047543857a419c58aa8c8e04f083b0bd802f82e7a14

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':
            continue
        if t == 'DNF':
            dnf.append(name)
            continue
        whole, _, frac = t.partition('.')
        thous = int(whole) * 1000 + int((frac + '000')[:3])
        hund = (thous + 5) // 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: round up hundredths',
   ([['Fay', '10.2'], ['Cy', '10.26'], ['Dee', '10.245'], ['Eli', '10.234']],),
   [[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]),
  ('variant scenario 1',
   ([['Fay', '10.24'],
     ['Dee', '10.24'],
     ['Bo', 'DNF'],
     ['Cy', 'DNF'],
     ['Eli', '10.265'],
     ['Ade', '10.']],),
   [[1, 'Ade', '10.00'],
    [2, 'Dee', '10.24'],
    [2, 'Fay', '10.24'],
    [4, 'Eli', '10.27'],
    [None, 'Bo', 'DNF'],
    [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '10.219'], ['Eli', '10.2'], ['Fay', 'DNF']],),
   [[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']])],
 [('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: round up hundredths',
   ([['Dee', '10.666'], ['Ade', '10.674'], ['Fay', '10.676'], ['Eli', '10.66']],),
   [[1, 'Eli', '10.66'], [2, 'Dee', '10.67'], [3, 'Ade', '10.68'], [3, 'Fay', '10.68']]),
  ('variant scenario 1',
   ([['Eli', '9.835'], ['Fay', '9.826'], ['Ade', '9.81'], ['Dee', '9.814']],),
   [[1, 'Ade', '9.81'], [2, 'Dee', '9.82'], [3, 'Fay', '9.83'], [4, 'Eli', '9.84']]),
  ('variant scenario 2',
   ([['Fay', '10.88'], ['Eli', '10.906'], ['Dee', '10.907']],),
   [[1, 'Fay', '10.88'], [2, 'Dee', '10.91'], [2, 'Eli', '10.91']])],
 [('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: round up hundredths',
   ([['Eli', '11.384'], ['Dee', '11.360'], ['Fay', '11.'], ['Bo', '11.377']],),
   [[1, 'Fay', '11.00'], [2, 'Dee', '11.36'], [3, 'Bo', '11.38'], [4, 'Eli', '11.39']]),
  ('variant scenario 1',
   ([['Fay', '11.159'],
     ['Eli', '11.15'],
     ['Cy', '11.167'],
     ['Bo', 'DQ'],
     ['Ade', '11.14'],
     ['Dee', '11.146']],),
   [[1, 'Ade', '11.14'],
    [2, 'Dee', '11.15'],
    [2, 'Eli', '11.15'],
    [4, 'Fay', '11.16'],
    [5, 'Cy', '11.17']]),
  ('variant scenario 2',
   ([['Bo', '10.68'], ['Dee', '10.703'], ['Fay', '10.694'], ['Eli', '10.713']],),
   [[1, 'Bo', '10.68'], [2, 'Fay', '10.70'], [3, 'Dee', '10.71'], [4, 'Eli', '10.72']])],
 [('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: round up hundredths',
   ([['Cy', '11.364'], ['Dee', '11.391'], ['Ade', 'DQ']],),
   [[1, 'Cy', '11.37'], [2, 'Dee', '11.40']]),
  ('variant scenario 1',
   ([['Eli', '9.884'], ['Ade', '9.873'], ['Bo', '9.882'], ['Cy', '9.868'], ['Fay', '9.885']],),
   [[1, 'Cy', '9.87'],
    [2, 'Ade', '9.88'],
    [3, 'Bo', '9.89'],
    [3, 'Eli', '9.89'],
    [3, 'Fay', '9.89']]),
  ('variant scenario 2',
   ([['Dee', '10.455'], ['Fay', '10.47'], ['Bo', '10.471'], ['Ade', '10.469'], ['Cy', 'DQ']],),
   [[1, 'Dee', '10.46'], [2, 'Ade', '10.47'], [2, 'Fay', '10.47'], [4, 'Bo', '10.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: round up hundredths',
   ([['Eli', '11.310'], ['Ade', 'DQ'], ['Fay', '11.34'], ['Dee', '11.323'], ['Cy', 'DNF']],),
   [[1, 'Eli', '11.31'], [2, 'Dee', '11.33'], [3, 'Fay', '11.34'], [None, 'Cy', 'DNF']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', 'DNF'], ['Dee', 'DQ'], ['Ade', '11.155']],),
   [[1, 'Ade', '11.16'], [None, 'Eli', 'DNF'], [None, 'Fay', 'DNF']]),
  ('variant scenario 2',
   ([['Dee', '11.420'], ['Eli', '11.38'], ['Cy', '11.41'], ['Ade', '11.416'], ['Bo', '11.40']],),
   [[1, 'Eli', '11.38'],
    [2, 'Bo', '11.40'],
    [3, 'Cy', '11.41'],
    [4, 'Ade', '11.42'],
    [4, 'Dee', '11.42']])]]
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', '9.99']][[1, 'Cy', '10.00']]Failed
boundary shared place skips next[[1, 'Ade', '10.10'], [2, 'Bo', '10.11'], [3, 'Cy', '10.20']][[1, 'Ade', '10.11'], [1, 'Bo', '10.11'], [3, 'Cy', '10.20']]Failed
control dnf and dq[[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']][[1, 'Dee', '11.00'], [None, 'Eli', 'DNF']]Passed
regression: round up hundredths[[1, 'Fay', '10.20'], [2, 'Eli', '10.23'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']][[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]Failed
variant scenario 1[[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.27'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']][[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.27'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']]Passed
variant scenario 2[[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']][[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']]Passed

SHA-256 / 508f07681db5e09668ebd28bdf108533d089993c07386e3dedb3c0132052c4ee

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: round up hundredths',
   ([['Fay', '10.2'], ['Cy', '10.26'], ['Dee', '10.245'], ['Eli', '10.234']],),
   [[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]),
  ('variant scenario 1',
   ([['Fay', '10.24'],
     ['Dee', '10.24'],
     ['Bo', 'DNF'],
     ['Cy', 'DNF'],
     ['Eli', '10.265'],
     ['Ade', '10.']],),
   [[1, 'Ade', '10.00'],
    [2, 'Dee', '10.24'],
    [2, 'Fay', '10.24'],
    [4, 'Eli', '10.27'],
    [None, 'Bo', 'DNF'],
    [None, 'Cy', 'DNF']]),
  ('variant scenario 2',
   ([['Bo', '10.219'], ['Eli', '10.2'], ['Fay', 'DNF']],),
   [[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']])],
 [('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: round up hundredths',
   ([['Dee', '10.666'], ['Ade', '10.674'], ['Fay', '10.676'], ['Eli', '10.66']],),
   [[1, 'Eli', '10.66'], [2, 'Dee', '10.67'], [3, 'Ade', '10.68'], [3, 'Fay', '10.68']]),
  ('variant scenario 1',
   ([['Eli', '9.835'], ['Fay', '9.826'], ['Ade', '9.81'], ['Dee', '9.814']],),
   [[1, 'Ade', '9.81'], [2, 'Dee', '9.82'], [3, 'Fay', '9.83'], [4, 'Eli', '9.84']]),
  ('variant scenario 2',
   ([['Fay', '10.88'], ['Eli', '10.906'], ['Dee', '10.907']],),
   [[1, 'Fay', '10.88'], [2, 'Dee', '10.91'], [2, 'Eli', '10.91']])],
 [('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: round up hundredths',
   ([['Eli', '11.384'], ['Dee', '11.360'], ['Fay', '11.'], ['Bo', '11.377']],),
   [[1, 'Fay', '11.00'], [2, 'Dee', '11.36'], [3, 'Bo', '11.38'], [4, 'Eli', '11.39']]),
  ('variant scenario 1',
   ([['Fay', '11.159'],
     ['Eli', '11.15'],
     ['Cy', '11.167'],
     ['Bo', 'DQ'],
     ['Ade', '11.14'],
     ['Dee', '11.146']],),
   [[1, 'Ade', '11.14'],
    [2, 'Dee', '11.15'],
    [2, 'Eli', '11.15'],
    [4, 'Fay', '11.16'],
    [5, 'Cy', '11.17']]),
  ('variant scenario 2',
   ([['Bo', '10.68'], ['Dee', '10.703'], ['Fay', '10.694'], ['Eli', '10.713']],),
   [[1, 'Bo', '10.68'], [2, 'Fay', '10.70'], [3, 'Dee', '10.71'], [4, 'Eli', '10.72']])],
 [('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: round up hundredths',
   ([['Cy', '11.364'], ['Dee', '11.391'], ['Ade', 'DQ']],),
   [[1, 'Cy', '11.37'], [2, 'Dee', '11.40']]),
  ('variant scenario 1',
   ([['Eli', '9.884'], ['Ade', '9.873'], ['Bo', '9.882'], ['Cy', '9.868'], ['Fay', '9.885']],),
   [[1, 'Cy', '9.87'],
    [2, 'Ade', '9.88'],
    [3, 'Bo', '9.89'],
    [3, 'Eli', '9.89'],
    [3, 'Fay', '9.89']]),
  ('variant scenario 2',
   ([['Dee', '10.455'], ['Fay', '10.47'], ['Bo', '10.471'], ['Ade', '10.469'], ['Cy', 'DQ']],),
   [[1, 'Dee', '10.46'], [2, 'Ade', '10.47'], [2, 'Fay', '10.47'], [4, 'Bo', '10.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: round up hundredths',
   ([['Eli', '11.310'], ['Ade', 'DQ'], ['Fay', '11.34'], ['Dee', '11.323'], ['Cy', 'DNF']],),
   [[1, 'Eli', '11.31'], [2, 'Dee', '11.33'], [3, 'Fay', '11.34'], [None, 'Cy', 'DNF']]),
  ('variant scenario 1',
   ([['Eli', 'DNF'], ['Fay', 'DNF'], ['Dee', 'DQ'], ['Ade', '11.155']],),
   [[1, 'Ade', '11.16'], [None, 'Eli', 'DNF'], [None, 'Fay', 'DNF']]),
  ('variant scenario 2',
   ([['Dee', '11.420'], ['Eli', '11.38'], ['Cy', '11.41'], ['Ade', '11.416'], ['Bo', '11.40']],),
   [[1, 'Eli', '11.38'],
    [2, 'Bo', '11.40'],
    [3, 'Cy', '11.41'],
    [4, 'Ade', '11.42'],
    [4, 'Dee', '11.42']])]]
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: round up hundredths[[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']][[1, 'Fay', '10.20'], [2, 'Eli', '10.24'], [3, 'Dee', '10.25'], [4, 'Cy', '10.26']]Passed
variant scenario 1[[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.27'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']][[1, 'Ade', '10.00'], [2, 'Dee', '10.24'], [2, 'Fay', '10.24'], [4, 'Eli', '10.27'], [None, 'Bo', 'DNF'], [None, 'Cy', 'DNF']]Passed
variant scenario 2[[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']][[1, 'Eli', '10.20'], [2, 'Bo', '10.22'], [None, 'Fay', 'DNF']]Passed

SHA-256 / 0bf1ec8d09fd24119fb440f395a2533ba0c88b1bcf855bd6bfd9f3a7d83aaa4e

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

Case digest / 8c8e0474a83d28d892de3de9b7f2237a6a839d0ce92dca4983cf5d61999e1da7