FAILURE MAP
← Case archive

FA-84326 / Sports scoring and tiebreakers / Open access

Point deductions applied to the wrong fighter · case 01

A fighter penalised for fouls gains ground on the cards.

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

ROOT CAUSE

Each fighter's total is reduced by the opponent's deductions.

VERIFIED REPAIR

Subtract each fighter's own deductions from that fighter's totals.

Unsuccessful approach: Ignoring deductions entirely still misstates close cards.

Case contract

Ten-point-must decision. cards is three judge cards, each a list of [a_points, b_points] per round; deductions is [a_deducted, b_deducted] applied to every judge's totals. Each judge favours the higher total or scores a draw. Two or more judges for one fighter: "unanimous decision" if the other two agree, "split decision" if one judge favours the opponent, "majority decision" if one judge scores a draw. Otherwise: three draws "unanimous draw", two draws "majority draw", else "split draw". Return [result, winner or None, ["a-b" totals per judge]].

Why this case matters

Fight-result feeds classify decisions from judges' cards after deductions.

1 / The failure

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

N = 1
observations = []
def solve(cards, deductions):
    verdicts = []
    strs = []
    for card in cards:
        ta = sum(r[0] for r in card) - deductions[1]
        tb = sum(r[1] for r in card) - deductions[0]
        verdicts.append('A' if ta > tb else ('B' if tb > ta else 'D'))
        strs.append('%d-%d' % (ta, tb))
    a = verdicts.count('A')
    b = verdicts.count('B')
    d = verdicts.count('D')
    if a >= 2 or b >= 2:
        w = 'A' if a >= 2 else 'B'
        loser_votes = b if w == 'A' else a
        if loser_votes == 1:
            kind = 'split decision'
        elif d == 1:
            kind = 'majority decision'
        else:
            kind = 'unanimous decision'
        return [kind, w, strs]
    if d == 3:
        kind = 'unanimous draw'
    elif d == 2:
        kind = 'majority draw'
    else:
        kind = 'split draw'
    return [kind, None, strs]
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 unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 9], [10, 10], [10, 10], [8, 10], [9, 10], [10, 9]],
     [[10, 9], [10, 9], [8, 10], [10, 8], [9, 10], [8, 10]],
     [[10, 9], [10, 9], [10, 10], [10, 9], [8, 10], [10, 8]]],
    [0, 1]),
   ['majority draw', None, ['57-57', '55-55', '58-54']]),
  ('variant scenario 1',
   ([[[9, 10], [10, 9], [10, 9], [8, 10], [10, 10], [10, 8]],
     [[10, 8], [9, 10], [10, 9], [8, 10], [8, 10], [10, 9]],
     [[10, 8], [8, 10], [10, 8], [10, 10], [10, 8], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-56', '55-56', '58-52']]),
  ('variant scenario 2',
   ([[[10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 10],
      [10, 8],
      [10, 8],
      [10, 8],
      [9, 10],
      [10, 8],
      [10, 10],
      [10, 9]],
     [[8, 10],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [8, 10],
      [8, 10],
      [8, 10],
      [10, 9],
      [10, 8],
      [10, 10]],
     [[10, 9],
      [9, 10],
      [10, 9],
      [10, 9],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['split decision', 'A', ['119-106', '108-113', '115-110']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 8],
      [10, 9]],
     [[10, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['unanimous decision', 'A', ['110-109', '118-107', '117-107']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 10], [10, 8], [9, 10], [10, 10], [10, 10]],
     [[10, 10], [10, 9], [10, 9], [10, 8], [10, 10], [10, 9]],
     [[10, 10], [10, 8], [10, 9], [10, 8], [10, 10], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['59-57', '60-55', '60-54']]),
  ('variant scenario 2',
   ([[[9, 10],
      [8, 10],
      [9, 10],
      [10, 10],
      [10, 8],
      [10, 9],
      [10, 10],
      [10, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [8, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [10, 8],
      [10, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [8, 10]]],
    [0, 0]),
   ['unanimous decision', 'B', ['114-115', '112-116', '109-113']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8], [10, 8], [10, 9], [10, 10], [10, 9], [8, 10]],
     [[10, 9], [10, 8], [10, 9], [10, 8], [9, 10], [10, 9]],
     [[10, 8], [10, 10], [10, 8], [8, 10], [9, 10], [10, 10]]],
    [2, 0]),
   ['split decision', 'A', ['56-54', '57-53', '55-56']]),
  ('variant scenario 1',
   ([[[10, 8], [10, 9], [8, 10], [10, 10], [9, 10], [10, 10]],
     [[10, 10], [10, 8], [10, 8], [10, 10], [9, 10], [10, 10]],
     [[9, 10], [10, 8], [8, 10], [10, 8], [10, 9], [10, 8]]],
    [0, 0]),
   ['majority decision', 'A', ['57-57', '59-56', '57-53']]),
  ('variant scenario 2',
   ([[[10, 9], [9, 10], [8, 10], [10, 10]],
     [[10, 8], [10, 9], [10, 8], [10, 9]],
     [[9, 10], [9, 10], [10, 9], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['37-39', '40-34', '38-37']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[9, 10], [10, 10], [10, 10], [10, 8]],
     [[10, 9], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [8, 10], [8, 10], [8, 10]]],
    [1, 0]),
   ['majority decision', 'B', ['38-38', '35-37', '33-39']]),
  ('variant scenario 1',
   ([[[8, 10], [10, 8], [10, 8], [10, 9]],
     [[8, 10], [9, 10], [10, 8], [10, 9]],
     [[8, 10], [10, 8], [8, 10], [9, 10]]],
    [0, 0]),
   ['split draw', None, ['38-35', '37-37', '35-38']]),
  ('variant scenario 2',
   ([[[10, 8], [10, 9], [9, 10], [10, 10]],
     [[10, 9], [9, 10], [10, 9], [8, 10]],
     [[8, 10], [10, 10], [10, 9], [10, 9]]],
    [1, 0]),
   ['split decision', 'B', ['38-37', '36-38', '37-38']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [9, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [10, 9],
      [9, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 8],
      [10, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [10, 9]],
     [[10, 10],
      [10, 9],
      [8, 10],
      [10, 10],
      [10, 8],
      [9, 10],
      [10, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 9]]],
    [0, 1]),
   ['majority draw', None, ['112-112', '111-113', '114-114']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 8], [10, 8], [8, 10], [9, 10], [10, 8]],
     [[10, 8], [10, 10], [10, 9], [8, 10], [10, 10], [10, 10]],
     [[9, 10], [8, 10], [10, 9], [8, 10], [8, 10], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-53', '58-57', '53-57']]),
  ('variant scenario 2',
   ([[[10, 10], [10, 8], [10, 8], [10, 9]],
     [[10, 10], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [9, 10], [8, 10], [10, 10]]],
    [0, 0]),
   ['split decision', 'B', ['40-35', '36-38', '37-39']])]]
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 unanimous['unanimous decision', 'A', ['30-27', '30-27', '30-27']]['unanimous decision', 'A', ['30-27', '30-27', '30-27']]Passed
boundary split decision['split decision', 'A', ['29-28', '29-28', '28-29']]['split decision', 'A', ['29-28', '29-28', '28-29']]Passed
boundary deduction creates draw['unanimous decision', 'A', ['20-16', '20-16', '19-17']]['majority draw', None, ['18-18', '18-18', '17-19']]Failed
control split draw['split draw', None, ['10-9', '9-10', '10-10']]['split draw', None, ['10-9', '9-10', '10-10']]Passed
control unanimous draw['unanimous draw', None, ['10-10', '10-10', '10-10']]['unanimous draw', None, ['10-10', '10-10', '10-10']]Passed
regression: deduction owner['split decision', 'B', ['56-58', '54-56', '57-55']]['majority draw', None, ['57-57', '55-55', '58-54']]Failed
variant scenario 1['split decision', 'A', ['57-56', '55-56', '58-52']]['split decision', 'A', ['57-56', '55-56', '58-52']]Passed
variant scenario 2['split decision', 'A', ['118-107', '107-114', '114-111']]['split decision', 'A', ['119-106', '108-113', '115-110']]Failed

SHA-256 / fd316df9328fa4511f3f296ade42c819ac53dcc6c3028852f9f6eca95305ba39

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(cards, deductions):
    verdicts = []
    strs = []
    for card in cards:
        ta = sum(r[0] for r in card)
        tb = sum(r[1] for r in card)
        verdicts.append('A' if ta > tb else ('B' if tb > ta else 'D'))
        strs.append('%d-%d' % (ta, tb))
    a = verdicts.count('A')
    b = verdicts.count('B')
    d = verdicts.count('D')
    if a >= 2 or b >= 2:
        w = 'A' if a >= 2 else 'B'
        loser_votes = b if w == 'A' else a
        if loser_votes == 1:
            kind = 'split decision'
        elif d == 1:
            kind = 'majority decision'
        else:
            kind = 'unanimous decision'
        return [kind, w, strs]
    if d == 3:
        kind = 'unanimous draw'
    elif d == 2:
        kind = 'majority draw'
    else:
        kind = 'split draw'
    return [kind, None, strs]
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 unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 9], [10, 10], [10, 10], [8, 10], [9, 10], [10, 9]],
     [[10, 9], [10, 9], [8, 10], [10, 8], [9, 10], [8, 10]],
     [[10, 9], [10, 9], [10, 10], [10, 9], [8, 10], [10, 8]]],
    [0, 1]),
   ['majority draw', None, ['57-57', '55-55', '58-54']]),
  ('variant scenario 1',
   ([[[9, 10], [10, 9], [10, 9], [8, 10], [10, 10], [10, 8]],
     [[10, 8], [9, 10], [10, 9], [8, 10], [8, 10], [10, 9]],
     [[10, 8], [8, 10], [10, 8], [10, 10], [10, 8], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-56', '55-56', '58-52']]),
  ('variant scenario 2',
   ([[[10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 10],
      [10, 8],
      [10, 8],
      [10, 8],
      [9, 10],
      [10, 8],
      [10, 10],
      [10, 9]],
     [[8, 10],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [8, 10],
      [8, 10],
      [8, 10],
      [10, 9],
      [10, 8],
      [10, 10]],
     [[10, 9],
      [9, 10],
      [10, 9],
      [10, 9],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['split decision', 'A', ['119-106', '108-113', '115-110']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 8],
      [10, 9]],
     [[10, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['unanimous decision', 'A', ['110-109', '118-107', '117-107']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 10], [10, 8], [9, 10], [10, 10], [10, 10]],
     [[10, 10], [10, 9], [10, 9], [10, 8], [10, 10], [10, 9]],
     [[10, 10], [10, 8], [10, 9], [10, 8], [10, 10], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['59-57', '60-55', '60-54']]),
  ('variant scenario 2',
   ([[[9, 10],
      [8, 10],
      [9, 10],
      [10, 10],
      [10, 8],
      [10, 9],
      [10, 10],
      [10, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [8, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [10, 8],
      [10, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [8, 10]]],
    [0, 0]),
   ['unanimous decision', 'B', ['114-115', '112-116', '109-113']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8], [10, 8], [10, 9], [10, 10], [10, 9], [8, 10]],
     [[10, 9], [10, 8], [10, 9], [10, 8], [9, 10], [10, 9]],
     [[10, 8], [10, 10], [10, 8], [8, 10], [9, 10], [10, 10]]],
    [2, 0]),
   ['split decision', 'A', ['56-54', '57-53', '55-56']]),
  ('variant scenario 1',
   ([[[10, 8], [10, 9], [8, 10], [10, 10], [9, 10], [10, 10]],
     [[10, 10], [10, 8], [10, 8], [10, 10], [9, 10], [10, 10]],
     [[9, 10], [10, 8], [8, 10], [10, 8], [10, 9], [10, 8]]],
    [0, 0]),
   ['majority decision', 'A', ['57-57', '59-56', '57-53']]),
  ('variant scenario 2',
   ([[[10, 9], [9, 10], [8, 10], [10, 10]],
     [[10, 8], [10, 9], [10, 8], [10, 9]],
     [[9, 10], [9, 10], [10, 9], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['37-39', '40-34', '38-37']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[9, 10], [10, 10], [10, 10], [10, 8]],
     [[10, 9], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [8, 10], [8, 10], [8, 10]]],
    [1, 0]),
   ['majority decision', 'B', ['38-38', '35-37', '33-39']]),
  ('variant scenario 1',
   ([[[8, 10], [10, 8], [10, 8], [10, 9]],
     [[8, 10], [9, 10], [10, 8], [10, 9]],
     [[8, 10], [10, 8], [8, 10], [9, 10]]],
    [0, 0]),
   ['split draw', None, ['38-35', '37-37', '35-38']]),
  ('variant scenario 2',
   ([[[10, 8], [10, 9], [9, 10], [10, 10]],
     [[10, 9], [9, 10], [10, 9], [8, 10]],
     [[8, 10], [10, 10], [10, 9], [10, 9]]],
    [1, 0]),
   ['split decision', 'B', ['38-37', '36-38', '37-38']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [9, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [10, 9],
      [9, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 8],
      [10, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [10, 9]],
     [[10, 10],
      [10, 9],
      [8, 10],
      [10, 10],
      [10, 8],
      [9, 10],
      [10, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 9]]],
    [0, 1]),
   ['majority draw', None, ['112-112', '111-113', '114-114']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 8], [10, 8], [8, 10], [9, 10], [10, 8]],
     [[10, 8], [10, 10], [10, 9], [8, 10], [10, 10], [10, 10]],
     [[9, 10], [8, 10], [10, 9], [8, 10], [8, 10], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-53', '58-57', '53-57']]),
  ('variant scenario 2',
   ([[[10, 10], [10, 8], [10, 8], [10, 9]],
     [[10, 10], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [9, 10], [8, 10], [10, 10]]],
    [0, 0]),
   ['split decision', 'B', ['40-35', '36-38', '37-39']])]]
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 unanimous['unanimous decision', 'A', ['30-27', '30-27', '30-27']]['unanimous decision', 'A', ['30-27', '30-27', '30-27']]Passed
boundary split decision['split decision', 'A', ['29-28', '29-28', '28-29']]['split decision', 'A', ['29-28', '29-28', '28-29']]Passed
boundary deduction creates draw['majority decision', 'A', ['20-18', '20-18', '19-19']]['majority draw', None, ['18-18', '18-18', '17-19']]Failed
control split draw['split draw', None, ['10-9', '9-10', '10-10']]['split draw', None, ['10-9', '9-10', '10-10']]Passed
control unanimous draw['unanimous draw', None, ['10-10', '10-10', '10-10']]['unanimous draw', None, ['10-10', '10-10', '10-10']]Passed
regression: deduction owner['split decision', 'B', ['57-58', '55-56', '58-55']]['majority draw', None, ['57-57', '55-55', '58-54']]Failed
variant scenario 1['split decision', 'A', ['57-56', '55-56', '58-52']]['split decision', 'A', ['57-56', '55-56', '58-52']]Passed
variant scenario 2['split decision', 'A', ['119-107', '108-114', '115-111']]['split decision', 'A', ['119-106', '108-113', '115-110']]Failed

SHA-256 / eed8b8d9d39674ca0854c869b2769ca568923e8848e6db7bd669c894a39cc82c

3 / The verified repair

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

N = 1
observations = []
def solve(cards, deductions):
    verdicts = []
    strs = []
    for card in cards:
        ta = sum(r[0] for r in card) - deductions[0]
        tb = sum(r[1] for r in card) - deductions[1]
        verdicts.append('A' if ta > tb else ('B' if tb > ta else 'D'))
        strs.append('%d-%d' % (ta, tb))
    a = verdicts.count('A')
    b = verdicts.count('B')
    d = verdicts.count('D')
    if a >= 2 or b >= 2:
        w = 'A' if a >= 2 else 'B'
        loser_votes = b if w == 'A' else a
        if loser_votes == 1:
            kind = 'split decision'
        elif d == 1:
            kind = 'majority decision'
        else:
            kind = 'unanimous decision'
        return [kind, w, strs]
    if d == 3:
        kind = 'unanimous draw'
    elif d == 2:
        kind = 'majority draw'
    else:
        kind = 'split draw'
    return [kind, None, strs]
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 unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 9], [10, 10], [10, 10], [8, 10], [9, 10], [10, 9]],
     [[10, 9], [10, 9], [8, 10], [10, 8], [9, 10], [8, 10]],
     [[10, 9], [10, 9], [10, 10], [10, 9], [8, 10], [10, 8]]],
    [0, 1]),
   ['majority draw', None, ['57-57', '55-55', '58-54']]),
  ('variant scenario 1',
   ([[[9, 10], [10, 9], [10, 9], [8, 10], [10, 10], [10, 8]],
     [[10, 8], [9, 10], [10, 9], [8, 10], [8, 10], [10, 9]],
     [[10, 8], [8, 10], [10, 8], [10, 10], [10, 8], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-56', '55-56', '58-52']]),
  ('variant scenario 2',
   ([[[10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 10],
      [10, 8],
      [10, 8],
      [10, 8],
      [9, 10],
      [10, 8],
      [10, 10],
      [10, 9]],
     [[8, 10],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [8, 10],
      [8, 10],
      [8, 10],
      [10, 9],
      [10, 8],
      [10, 10]],
     [[10, 9],
      [9, 10],
      [10, 9],
      [10, 9],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['split decision', 'A', ['119-106', '108-113', '115-110']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 8],
      [10, 9]],
     [[10, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 9],
      [10, 9],
      [10, 8],
      [10, 8]]],
    [0, 1]),
   ['unanimous decision', 'A', ['110-109', '118-107', '117-107']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 10], [10, 8], [9, 10], [10, 10], [10, 10]],
     [[10, 10], [10, 9], [10, 9], [10, 8], [10, 10], [10, 9]],
     [[10, 10], [10, 8], [10, 9], [10, 8], [10, 10], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['59-57', '60-55', '60-54']]),
  ('variant scenario 2',
   ([[[9, 10],
      [8, 10],
      [9, 10],
      [10, 10],
      [10, 8],
      [10, 9],
      [10, 10],
      [10, 10],
      [10, 10],
      [10, 9],
      [10, 9],
      [8, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [10, 10],
      [10, 9],
      [10, 10],
      [9, 10],
      [10, 8],
      [10, 9],
      [10, 10]],
     [[8, 10],
      [9, 10],
      [9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [10, 8],
      [10, 10],
      [10, 9],
      [10, 8],
      [8, 10],
      [8, 10]]],
    [0, 0]),
   ['unanimous decision', 'B', ['114-115', '112-116', '109-113']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8], [10, 8], [10, 9], [10, 10], [10, 9], [8, 10]],
     [[10, 9], [10, 8], [10, 9], [10, 8], [9, 10], [10, 9]],
     [[10, 8], [10, 10], [10, 8], [8, 10], [9, 10], [10, 10]]],
    [2, 0]),
   ['split decision', 'A', ['56-54', '57-53', '55-56']]),
  ('variant scenario 1',
   ([[[10, 8], [10, 9], [8, 10], [10, 10], [9, 10], [10, 10]],
     [[10, 10], [10, 8], [10, 8], [10, 10], [9, 10], [10, 10]],
     [[9, 10], [10, 8], [8, 10], [10, 8], [10, 9], [10, 8]]],
    [0, 0]),
   ['majority decision', 'A', ['57-57', '59-56', '57-53']]),
  ('variant scenario 2',
   ([[[10, 9], [9, 10], [8, 10], [10, 10]],
     [[10, 8], [10, 9], [10, 8], [10, 9]],
     [[9, 10], [9, 10], [10, 9], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['37-39', '40-34', '38-37']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[9, 10], [10, 10], [10, 10], [10, 8]],
     [[10, 9], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [8, 10], [8, 10], [8, 10]]],
    [1, 0]),
   ['majority decision', 'B', ['38-38', '35-37', '33-39']]),
  ('variant scenario 1',
   ([[[8, 10], [10, 8], [10, 8], [10, 9]],
     [[8, 10], [9, 10], [10, 8], [10, 9]],
     [[8, 10], [10, 8], [8, 10], [9, 10]]],
    [0, 0]),
   ['split draw', None, ['38-35', '37-37', '35-38']]),
  ('variant scenario 2',
   ([[[10, 8], [10, 9], [9, 10], [10, 10]],
     [[10, 9], [9, 10], [10, 9], [8, 10]],
     [[8, 10], [10, 10], [10, 9], [10, 9]]],
    [1, 0]),
   ['split decision', 'B', ['38-37', '36-38', '37-38']])],
 [('control unanimous',
   ([[[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]], [[10, 9], [10, 9], [10, 9]]],
    [0, 0]),
   ['unanimous decision', 'A', ['30-27', '30-27', '30-27']]),
  ('boundary split decision',
   ([[[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [10, 9]], [[10, 9], [9, 10], [9, 10]]],
    [0, 0]),
   ['split decision', 'A', ['29-28', '29-28', '28-29']]),
  ('boundary deduction creates draw',
   ([[[10, 9], [10, 9]], [[10, 9], [10, 9]], [[10, 9], [9, 10]]], [2, 0]),
   ['majority draw', None, ['18-18', '18-18', '17-19']]),
  ('control split draw',
   ([[[10, 9]], [[9, 10]], [[10, 10]]], [0, 0]),
   ['split draw', None, ['10-9', '9-10', '10-10']]),
  ('control unanimous draw',
   ([[[10, 10]], [[10, 10]], [[10, 10]]], [0, 0]),
   ['unanimous draw', None, ['10-10', '10-10', '10-10']]),
  ('regression: deduction owner',
   ([[[10, 8],
      [9, 10],
      [10, 9],
      [8, 10],
      [9, 10],
      [10, 9],
      [9, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [8, 10],
      [10, 8]],
     [[9, 10],
      [8, 10],
      [9, 10],
      [10, 8],
      [8, 10],
      [8, 10],
      [10, 8],
      [10, 10],
      [10, 10],
      [10, 9],
      [9, 10],
      [10, 9]],
     [[10, 10],
      [10, 9],
      [8, 10],
      [10, 10],
      [10, 8],
      [9, 10],
      [10, 10],
      [9, 10],
      [9, 10],
      [9, 10],
      [10, 9],
      [10, 9]]],
    [0, 1]),
   ['majority draw', None, ['112-112', '111-113', '114-114']]),
  ('variant scenario 1',
   ([[[10, 9], [10, 8], [10, 8], [8, 10], [9, 10], [10, 8]],
     [[10, 8], [10, 10], [10, 9], [8, 10], [10, 10], [10, 10]],
     [[9, 10], [8, 10], [10, 9], [8, 10], [8, 10], [10, 8]]],
    [0, 0]),
   ['split decision', 'A', ['57-53', '58-57', '53-57']]),
  ('variant scenario 2',
   ([[[10, 10], [10, 8], [10, 8], [10, 9]],
     [[10, 10], [10, 8], [8, 10], [8, 10]],
     [[10, 9], [9, 10], [8, 10], [10, 10]]],
    [0, 0]),
   ['split decision', 'B', ['40-35', '36-38', '37-39']])]]
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 unanimous['unanimous decision', 'A', ['30-27', '30-27', '30-27']]['unanimous decision', 'A', ['30-27', '30-27', '30-27']]Passed
boundary split decision['split decision', 'A', ['29-28', '29-28', '28-29']]['split decision', 'A', ['29-28', '29-28', '28-29']]Passed
boundary deduction creates draw['majority draw', None, ['18-18', '18-18', '17-19']]['majority draw', None, ['18-18', '18-18', '17-19']]Passed
control split draw['split draw', None, ['10-9', '9-10', '10-10']]['split draw', None, ['10-9', '9-10', '10-10']]Passed
control unanimous draw['unanimous draw', None, ['10-10', '10-10', '10-10']]['unanimous draw', None, ['10-10', '10-10', '10-10']]Passed
regression: deduction owner['majority draw', None, ['57-57', '55-55', '58-54']]['majority draw', None, ['57-57', '55-55', '58-54']]Passed
variant scenario 1['split decision', 'A', ['57-56', '55-56', '58-52']]['split decision', 'A', ['57-56', '55-56', '58-52']]Passed
variant scenario 2['split decision', 'A', ['119-106', '108-113', '115-110']]['split decision', 'A', ['119-106', '108-113', '115-110']]Passed

SHA-256 / 555e21872c647de3e2c962a2d1f6dc6a25c94b166a4b93d24caaae3fbcf69954

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

Case digest / 5bfdd6b6bd655354b84af8a361ee9e9c17525dd57fd19290d92f64057cc62b5c