FAILURE MAP
← Case archive

FA-79911 / Typography line breaking / Open access

Pattern-based hyphenation: word-end anchor padding · case 01

Patterns anchored at the end of a word never fire.

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

ROOT CAUSE

Only the leading dot is added when padding the word, so end-anchored patterns like "4ing." cannot match.

VERIFIED REPAIR

Pad the word with a dot on both sides before matching.

Unsuccessful approach: Padding the original-case word instead of the lowercased one breaks matching for capitalised words.

Case contract

Input [word, patterns, exceptions, lefthyphenmin, righthyphenmin]. An exception (hyphenated, lowercase) matching the lowercased word dictates the hyphens and keeps the word's own letters. Otherwise the lowercased word is padded with dots, every substring pattern contributes its digits and the maximum digit per gap wins; odd values allow a hyphen. A hyphen before letter i needs i>=lefthyphenmin and len-i>=righthyphenmin. Return the word with "-" inserted.

Why this case matters

Line breaking decides where paragraphs wrap on screen and in print; a wrong decision point shifts every following line.

1 / The failure

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

N = 1
observations = []
def solve(x):
    word, patterns, exceptions, lmin, rmin = x
    low = word.lower()
    for e in exceptions:
        if e.replace('-', '') == low:
            out, count = '', 0
            for c in e:
                if c == '-':
                    out += '-'
                else:
                    out += word[count]
                    count += 1
            return out
    table = {}
    for p in patterns:
        letters = ''
        vals = [0]
        for c in p:
            if c.isdigit():
                vals[-1] = int(c)
            else:
                letters += c
                vals.append(0)
        table[letters] = vals
    dotted = '.' + low
    score = [0] * (len(dotted) + 1)
    for s in range(len(dotted)):
        for e in range(s + 1, len(dotted) + 1):
            vals = table.get(dotted[s:e])
            if vals:
                for k, v in enumerate(vals):
                    score[s + k] = max(score[s + k], v)
    points = [i for i in range(1, len(word)) if score[i + 1] % 2 == 1 and i >= lmin and len(word) - i >= rmin]
    out = ''
    for i, c in enumerate(word):
        if i in points:
            out += '-'
        out += c
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: word-end anchor padding', ['understand', ['1p', 'l1l', 'x1c', 'o2n', '5nd.', 'he2n', '1m', 'n1g', 'li1', 'b2l', 'm1m', 'r1r', '1ca', 'hena4', 'om1', 'gr2', '1q', 'n2at', 'pu2', 'ex1', 'e1c', 't1t', 'c2ce', '.un1', 'p2h', 'hy3ph', '1ble', '4ing.', 'ter1', '3ty.', '1tio', 'con1', 'hen5at', '1na', 'ment1', 'at1', '.ta4', 's1s'], ['ex-cep-tion', 'ta-ble', 'mis-sis-sip-pi'], 1, 2], 'un-dersta-nd'), ('regression: word-end anchor padding', ['understand', ['e2x', 'l1l', '5nd.', 'x1c', 'an1d', '1m', '1tio', 'he2n', 'ca1t', '1ca', 'c2ce', 'e1c', 's1s', 'p2h', 'o2n', 't1t', '2io', 'gr2', 'con1', 'n2at'], [], 1, 2], 'understa-nd'), ('partial-repair probe', ['Recreation', ['o2n', '.re1', 't1t', '4ing.', 'l1l', 'm1m', 'gr2', 'li1', 'ter1', '2io'], ['ta-ble', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 3], 'Re-creation'), ('partial-repair probe', ['Unexpected', ['n1g', 'hen5at', 'hy3ph', 'p2h', 'r1r', 's1s', 'at1', '1m', 'c2ce', 'b2l', '1ble', '.un1', 'l1l', 'he2n', 'io3n.', 'om1', '1ca', 'pu2', 'o2n', 'n2at', 'e2x', 'x1c', 't1t', '.re1', '1tio', 'ex1', 'con1', 'gr2', '4ing.', 'e1c', 'ca1t', 'ment1', 'ter1', 'a2n', '1na'], [], 1, 2], 'Un-ex-pe-cted'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['battle', ['.un1', 't1t', '1q', '3ty.', 'ter1', 'ca1t', 'e1c', 'at1', 'ment1', 'li1', '1ble', '2mp', '1ca', 'c2ce', 'e2x', 'r1r', '4ing.', 'hen5at', 'pu2', 'x1c', 'om1', '5nd.', 'n2at', 'l1l', '.re1', 'ex1', 'gr2', 'con1'], ['ta-ble'], 1, 3], 'bat-tle'), ('control layout', ['Commitment', ['.ta4', 'gr2', 'om1', 't1t', 'e1c', 'a2n', '1q', '1ble', '1tio', 'hen5at', '2mp'], [], 3, 1], 'Com-mitment')], [('regression: word-end anchor padding', ['Recreation', ['hy3ph', 'x1c', 'gr2', 'hena4', 'c2ce', 'an1d', 'a1b', '1ca', '1na', '2io', 'e2x', 's1s', 'n2at', 'ment1', 'io3n.', 'pu2', 'at1', 'b2l'], ['ex-cep-tion', 'pro-ject', 'ta-ble'], 3, 1], 'Recreatio-n'), ('regression: word-end anchor padding', ['understand', ['c2ce', 'n2at', 'a2n', 'ca1t', 'b2l', 'a1b', '1ca', 'hy3ph', 'e2x', 't1t', 'r1r', '1q', 'p2h', 'ex1', 'con1', 'he2n', 'x1c', 'hena4', 'om1', 's1s', 'li1', 'at1', 'an1d', 'e1c', 'hen5at', '1na', '.re1', '4ing.', '1ble', 'io3n.', '3ty.', '2io', '2mp', '5nd.', '1m', '1tio', 'ment1', 'l1l', 'ter1', 'n1g', 'm1m'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 2, 1], 'understa-n-d'), ('partial-repair probe', ['Categories', ['ter1', 'r1r', 'hy3ph', '1ble', 'a2n', '1ca', '1tio', 'hena4', 's1s', '2io', 'pu2', 'n2at', 'x1c', 'con1', 'at1', 't1t', 'n1g', 'li1', '.un1', 'ca1t', '1p', 'io3n.', '1q', '2mp', '1m', 'hen5at', 'an1d', 'ex1', 'b2l', 'p2h', '3ty.', 'ment1'], [], 1, 3], 'Ca-t-egories'), ('partial-repair probe', ['Table', ['1m', '1ca', 'x1c', 'gr2', 's1s', '1q', '1na', '4ing.', 'con1', 'e2x', 'om1', 'at1', '.ta4', 'a1b', 'n1g', 'r1r', 'li1', 'l1l', 'he2n', '2io', 'pu2', 'ex1', 'hen5at', '3ty.', 'ca1t', 'b2l', 'o2n'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 1, 2], 'Table'), ('left minimum boundary', ['excellent', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 3], 'ex-cel-lent'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('control layout', ['Mississippi', ['1ca', 'io3n.', '1m', 'pu2', 'gr2', 'b2l', 'n2at', '3ty.', 's1s', 'l1l', 'o2n', 'he2n', '.un1', '.re1', '2mp', 'e2x', 'hy3ph', 'at1', 'ter1', 'm1m', '1ble', 'hen5at', 'con1', 'ment1', 'ex1', '1na', 'p2h', 'e1c', 'hena4', 't1t', 'a1b', 'r1r'], ['mis-sis-sip-pi', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Mis-sis-sip-pi'), ('control layout', ['Pentagon', ['1na', 'e2x', 'hy3ph', 'a1b', 'ca1t', '2mp', 'x1c', 'io3n.', '.un1'], ['ta-ble', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Pentagon')], [('regression: word-end anchor padding', ['understand', ['2io', 'con1', 'an1d', 'm1m', '5nd.', 'hy3ph', 'ment1', 'ter1'], [], 3, 1], 'understa-n-d'), ('regression: word-end anchor padding', ['hyphenation', ['1ble', '1ca', 'hy3ph', 'gr2', '5nd.', 'at1', '1tio', 'n2at', 'ex1', 'x1c', '1na', 'ter1', 'b2l', 'e1c', 't1t', '1q', 'li1', '.ta4', 'm1m', 's1s', 'e2x', 'con1', '2mp', 'r1r', 'hena4', '.re1', '2io', 'c2ce', 'om1', 'p2h', '1p', 'ca1t', 'l1l', 'o2n', 'pu2', 'n1g', 'a1b', 'io3n.', '1m', 'ment1'], ['mis-sis-sip-pi', 'ta-ble'], 1, 1], 'hy-phe-natio-n'), ('partial-repair probe', ['Table', ['ex1', 'n2at', 'hen5at', 'n1g', 'an1d', 'b2l', '.re1', 'om1', 'x1c', '.ta4', 'li1', 'io3n.', '1ble', 'hy3ph', '2mp', '4ing.', 'ment1', 'ca1t', '2io', 'a2n', 'ter1', 'a1b', 'gr2', '1na', 'p2h', 'he2n', 'con1', 'l1l', 'hena4', '5nd.', '1ca', 'pu2', 'e2x', 'at1', 'm1m', '3ty.'], ['ex-cep-tion'], 1, 2], 'Table'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('word-final pattern ing.', ['running', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 2], 'running'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['excellent', ['2io', '1ble', 'li1', 'l1l', 'x1c', 'hena4', 'con1', 'at1', '3ty.', 'p2h', 'an1d', 'pu2', 'o2n', 'gr2', 'hen5at'], ['pro-ject'], 1, 3], 'ex-cel-lent'), ('control layout', ['excellent', ['ter1', '.re1', 'e1c', 'e2x', 's1s', 't1t', '3ty.', 'hen5at', '1ble', 'm1m', '4ing.', '2mp', 'n1g', 'a2n', 'o2n', 'io3n.', '1na', 'ment1', 'li1', '1p', 'gr2', 'a1b', 'c2ce', '5nd.', 'om1', 'l1l', 'pu2', '.un1', 'he2n', '.ta4', '1m'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 1, 3], 'excel-lent')], [('regression: word-end anchor padding', ['hyphenation', ['e1c', '5nd.', 'e2x', '.ta4', '3ty.', 'hy3ph', 'om1', 'he2n', 'n1g', '1q', 'x1c', '1ca', 't1t', 'b2l', 'a1b', 'm1m', 'pu2', 'ter1', 'hen5at', '4ing.', '.re1', 'p2h', '1ble', 'li1', 'gr2', 'r1r', '.un1', '2io', '1na', '1tio', 'ca1t', 'io3n.', 'n2at', '1p', 'an1d', 'o2n', '2mp', 'c2ce', 'ment1', 's1s', 'con1'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 1, 1], 'hy-phen-a-tio-n'), ('regression: word-end anchor padding', ['understand', ['.ta4', '3ty.', 'he2n', 'ter1', 'pu2', 'at1', '5nd.', 'r1r', 'con1', 'x1c', 'c2ce', 'b2l', '1tio', 'n2at', '1ble', 'm1m', 'gr2', 'hy3ph', '1m', 't1t', 's1s', '.re1', '2io', '1p', 'li1', 'ex1', '1na', 'a1b', '2mp', 'hen5at', 'p2h', '.un1', 'l1l', 'e1c', 'a2n', 'ca1t', 'e2x', 'io3n.', '1ca', 'an1d'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 2, 1], 'un-dersta-n-d'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('partial-repair probe', ['Exception', ['he2n', '.re1', '3ty.', 'e2x', 'n2at', 'e1c', '2mp', '1m', '.ta4', '2io', 'a1b', 'hen5at', '1ble', 'ex1', 'at1', 'an1d', 'ca1t', 'io3n.'], ['gram-mar', 'mis-sis-sip-pi'], 1, 2], 'Ex-ception'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['Commitment', ['1m', '2mp', 'r1r', 'io3n.', 'gr2', 'at1', 't1t', '3ty.', '.ta4', '1q', '2io', 'p2h', 's1s', '1ca', 'a2n', 'li1', 'b2l', '.re1', '1na', 'o2n', 'con1', '5nd.'], [], 2, 3], 'Co-m-mit-ment'), ('control layout', ['computer', ['4ing.', 'ex1', '1na', 'om1', 'l1l', '5nd.', 'e1c', 'o2n', 'con1'], ['mis-sis-sip-pi', 'pro-ject', 'ta-ble'], 2, 3], 'com-puter')], [('regression: word-end anchor padding', ['hyphenation', ['1na', '5nd.', 'ment1', 'r1r', 'p2h', 'e1c', 'ter1', 'n2at', 'ca1t', '1q', '4ing.', 'a2n', 'hena4', 't1t', '1m', '.un1', '.re1', 'b2l', 'hen5at', 'io3n.', '3ty.', 'x1c', 'c2ce', 'ex1', '1ble', 'pu2', '1tio', 'l1l', '1ca', 'm1m', 'an1d', 'hy3ph', 'o2n', 'he2n', 'li1', 'om1', 'a1b', 'e2x', '.ta4', 'gr2', 'at1', 'n1g'], ['ex-cep-tion'], 1, 1], 'hy-phen-at-io-n'), ('regression: word-end anchor padding', ['Exception', ['at1', '1q', '1ble', 'm1m', '2io', 'he2n', 'hen5at', 'x1c', 'ter1', '.ta4', 'e2x', '4ing.', 'an1d', '1p', 'a1b', 't1t', 'n1g', 'gr2', '3ty.', 'io3n.', 'om1', 'hena4', '.un1', '2mp', 'n2at', '1tio', 'hy3ph', 'ca1t', '1m', 'l1l', 's1s', 'r1r', 'c2ce', 'e1c', 'ex1', '5nd.', '1ca', '.re1', 'li1', 'pu2', 'a2n', 'p2h', 'ment1', 'o2n'], [], 2, 1], 'Ex-ce-p-tio-n'), ('partial-repair probe', ['Unexpected', ['c2ce', '1na', '1tio', 'om1', 'at1', '.un1', '1ca', 'io3n.', '1p', '1ble', 'x1c'], ['mis-sis-sip-pi'], 1, 1], 'Un-ex-pected'), ('partial-repair probe', ['Unexpected', ['1na', 'p2h', 'n2at', 'a1b', 'pu2', '1ca', 'n1g', 'e1c', '1m', 'c2ce', '.un1', 'e2x', 'li1', 's1s', '1q', 'm1m', 'a2n'], [], 1, 2], 'Un-expe-cted'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['Unexpected', ['hena4', 'a1b', 'at1', 'con1', 'hen5at', 'li1', 'gr2', '1m', 'x1c', '2io', 'ca1t', '1tio', 'c2ce', 'io3n.', 'n2at', '1ble', '.re1', '2mp', 'r1r', 'e1c', 'b2l', 'ter1', '1p', 'e2x', 'ment1', '1ca', 'm1m', 'an1d', 'he2n', 'ex1', 's1s', '5nd.', '.ta4', 'n1g', '1na', 'pu2'], [], 3, 3], 'Unex-pe-cted'), ('control layout', ['hyphenation', ['e1c', '1ca', 'ter1', 'at1', 's1s', 'ex1', 'con1', '1tio', '2io', '2mp', '1na', 'm1m', 'pu2', 'ment1', '1q', 'l1l', 't1t', 'he2n', 'n2at', '1p', 'li1', 'o2n', 'om1', 'hy3ph'], [], 2, 1], 'hy-phena-tion')]]
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
regression: word-end anchor paddingun-derstandun-dersta-ndFailed
regression: word-end anchor paddingunderstandundersta-ndFailed
partial-repair probeRe-creationRe-creationPassed
partial-repair probeUn-ex-pe-ctedUn-ex-pe-ctedPassed
lowercase exceptionpro-jectpro-jectPassed
capitalised exceptionTa-bleTa-blePassed
control layoutbat-tlebat-tlePassed
control layoutCom-mitmentCom-mitmentPassed

SHA-256 / 381be436e5ec17d027131ae68d0bbcc29ec6cb3ff306147fb5673772d6243536

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    word, patterns, exceptions, lmin, rmin = x
    low = word.lower()
    for e in exceptions:
        if e.replace('-', '') == low:
            out, count = '', 0
            for c in e:
                if c == '-':
                    out += '-'
                else:
                    out += word[count]
                    count += 1
            return out
    table = {}
    for p in patterns:
        letters = ''
        vals = [0]
        for c in p:
            if c.isdigit():
                vals[-1] = int(c)
            else:
                letters += c
                vals.append(0)
        table[letters] = vals
    dotted = '.' + word + '.'
    score = [0] * (len(dotted) + 1)
    for s in range(len(dotted)):
        for e in range(s + 1, len(dotted) + 1):
            vals = table.get(dotted[s:e])
            if vals:
                for k, v in enumerate(vals):
                    score[s + k] = max(score[s + k], v)
    points = [i for i in range(1, len(word)) if score[i + 1] % 2 == 1 and i >= lmin and len(word) - i >= rmin]
    out = ''
    for i, c in enumerate(word):
        if i in points:
            out += '-'
        out += c
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: word-end anchor padding', ['understand', ['1p', 'l1l', 'x1c', 'o2n', '5nd.', 'he2n', '1m', 'n1g', 'li1', 'b2l', 'm1m', 'r1r', '1ca', 'hena4', 'om1', 'gr2', '1q', 'n2at', 'pu2', 'ex1', 'e1c', 't1t', 'c2ce', '.un1', 'p2h', 'hy3ph', '1ble', '4ing.', 'ter1', '3ty.', '1tio', 'con1', 'hen5at', '1na', 'ment1', 'at1', '.ta4', 's1s'], ['ex-cep-tion', 'ta-ble', 'mis-sis-sip-pi'], 1, 2], 'un-dersta-nd'), ('regression: word-end anchor padding', ['understand', ['e2x', 'l1l', '5nd.', 'x1c', 'an1d', '1m', '1tio', 'he2n', 'ca1t', '1ca', 'c2ce', 'e1c', 's1s', 'p2h', 'o2n', 't1t', '2io', 'gr2', 'con1', 'n2at'], [], 1, 2], 'understa-nd'), ('partial-repair probe', ['Recreation', ['o2n', '.re1', 't1t', '4ing.', 'l1l', 'm1m', 'gr2', 'li1', 'ter1', '2io'], ['ta-ble', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 3], 'Re-creation'), ('partial-repair probe', ['Unexpected', ['n1g', 'hen5at', 'hy3ph', 'p2h', 'r1r', 's1s', 'at1', '1m', 'c2ce', 'b2l', '1ble', '.un1', 'l1l', 'he2n', 'io3n.', 'om1', '1ca', 'pu2', 'o2n', 'n2at', 'e2x', 'x1c', 't1t', '.re1', '1tio', 'ex1', 'con1', 'gr2', '4ing.', 'e1c', 'ca1t', 'ment1', 'ter1', 'a2n', '1na'], [], 1, 2], 'Un-ex-pe-cted'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['battle', ['.un1', 't1t', '1q', '3ty.', 'ter1', 'ca1t', 'e1c', 'at1', 'ment1', 'li1', '1ble', '2mp', '1ca', 'c2ce', 'e2x', 'r1r', '4ing.', 'hen5at', 'pu2', 'x1c', 'om1', '5nd.', 'n2at', 'l1l', '.re1', 'ex1', 'gr2', 'con1'], ['ta-ble'], 1, 3], 'bat-tle'), ('control layout', ['Commitment', ['.ta4', 'gr2', 'om1', 't1t', 'e1c', 'a2n', '1q', '1ble', '1tio', 'hen5at', '2mp'], [], 3, 1], 'Com-mitment')], [('regression: word-end anchor padding', ['Recreation', ['hy3ph', 'x1c', 'gr2', 'hena4', 'c2ce', 'an1d', 'a1b', '1ca', '1na', '2io', 'e2x', 's1s', 'n2at', 'ment1', 'io3n.', 'pu2', 'at1', 'b2l'], ['ex-cep-tion', 'pro-ject', 'ta-ble'], 3, 1], 'Recreatio-n'), ('regression: word-end anchor padding', ['understand', ['c2ce', 'n2at', 'a2n', 'ca1t', 'b2l', 'a1b', '1ca', 'hy3ph', 'e2x', 't1t', 'r1r', '1q', 'p2h', 'ex1', 'con1', 'he2n', 'x1c', 'hena4', 'om1', 's1s', 'li1', 'at1', 'an1d', 'e1c', 'hen5at', '1na', '.re1', '4ing.', '1ble', 'io3n.', '3ty.', '2io', '2mp', '5nd.', '1m', '1tio', 'ment1', 'l1l', 'ter1', 'n1g', 'm1m'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 2, 1], 'understa-n-d'), ('partial-repair probe', ['Categories', ['ter1', 'r1r', 'hy3ph', '1ble', 'a2n', '1ca', '1tio', 'hena4', 's1s', '2io', 'pu2', 'n2at', 'x1c', 'con1', 'at1', 't1t', 'n1g', 'li1', '.un1', 'ca1t', '1p', 'io3n.', '1q', '2mp', '1m', 'hen5at', 'an1d', 'ex1', 'b2l', 'p2h', '3ty.', 'ment1'], [], 1, 3], 'Ca-t-egories'), ('partial-repair probe', ['Table', ['1m', '1ca', 'x1c', 'gr2', 's1s', '1q', '1na', '4ing.', 'con1', 'e2x', 'om1', 'at1', '.ta4', 'a1b', 'n1g', 'r1r', 'li1', 'l1l', 'he2n', '2io', 'pu2', 'ex1', 'hen5at', '3ty.', 'ca1t', 'b2l', 'o2n'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 1, 2], 'Table'), ('left minimum boundary', ['excellent', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 3], 'ex-cel-lent'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('control layout', ['Mississippi', ['1ca', 'io3n.', '1m', 'pu2', 'gr2', 'b2l', 'n2at', '3ty.', 's1s', 'l1l', 'o2n', 'he2n', '.un1', '.re1', '2mp', 'e2x', 'hy3ph', 'at1', 'ter1', 'm1m', '1ble', 'hen5at', 'con1', 'ment1', 'ex1', '1na', 'p2h', 'e1c', 'hena4', 't1t', 'a1b', 'r1r'], ['mis-sis-sip-pi', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Mis-sis-sip-pi'), ('control layout', ['Pentagon', ['1na', 'e2x', 'hy3ph', 'a1b', 'ca1t', '2mp', 'x1c', 'io3n.', '.un1'], ['ta-ble', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Pentagon')], [('regression: word-end anchor padding', ['understand', ['2io', 'con1', 'an1d', 'm1m', '5nd.', 'hy3ph', 'ment1', 'ter1'], [], 3, 1], 'understa-n-d'), ('regression: word-end anchor padding', ['hyphenation', ['1ble', '1ca', 'hy3ph', 'gr2', '5nd.', 'at1', '1tio', 'n2at', 'ex1', 'x1c', '1na', 'ter1', 'b2l', 'e1c', 't1t', '1q', 'li1', '.ta4', 'm1m', 's1s', 'e2x', 'con1', '2mp', 'r1r', 'hena4', '.re1', '2io', 'c2ce', 'om1', 'p2h', '1p', 'ca1t', 'l1l', 'o2n', 'pu2', 'n1g', 'a1b', 'io3n.', '1m', 'ment1'], ['mis-sis-sip-pi', 'ta-ble'], 1, 1], 'hy-phe-natio-n'), ('partial-repair probe', ['Table', ['ex1', 'n2at', 'hen5at', 'n1g', 'an1d', 'b2l', '.re1', 'om1', 'x1c', '.ta4', 'li1', 'io3n.', '1ble', 'hy3ph', '2mp', '4ing.', 'ment1', 'ca1t', '2io', 'a2n', 'ter1', 'a1b', 'gr2', '1na', 'p2h', 'he2n', 'con1', 'l1l', 'hena4', '5nd.', '1ca', 'pu2', 'e2x', 'at1', 'm1m', '3ty.'], ['ex-cep-tion'], 1, 2], 'Table'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('word-final pattern ing.', ['running', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 2], 'running'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['excellent', ['2io', '1ble', 'li1', 'l1l', 'x1c', 'hena4', 'con1', 'at1', '3ty.', 'p2h', 'an1d', 'pu2', 'o2n', 'gr2', 'hen5at'], ['pro-ject'], 1, 3], 'ex-cel-lent'), ('control layout', ['excellent', ['ter1', '.re1', 'e1c', 'e2x', 's1s', 't1t', '3ty.', 'hen5at', '1ble', 'm1m', '4ing.', '2mp', 'n1g', 'a2n', 'o2n', 'io3n.', '1na', 'ment1', 'li1', '1p', 'gr2', 'a1b', 'c2ce', '5nd.', 'om1', 'l1l', 'pu2', '.un1', 'he2n', '.ta4', '1m'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 1, 3], 'excel-lent')], [('regression: word-end anchor padding', ['hyphenation', ['e1c', '5nd.', 'e2x', '.ta4', '3ty.', 'hy3ph', 'om1', 'he2n', 'n1g', '1q', 'x1c', '1ca', 't1t', 'b2l', 'a1b', 'm1m', 'pu2', 'ter1', 'hen5at', '4ing.', '.re1', 'p2h', '1ble', 'li1', 'gr2', 'r1r', '.un1', '2io', '1na', '1tio', 'ca1t', 'io3n.', 'n2at', '1p', 'an1d', 'o2n', '2mp', 'c2ce', 'ment1', 's1s', 'con1'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 1, 1], 'hy-phen-a-tio-n'), ('regression: word-end anchor padding', ['understand', ['.ta4', '3ty.', 'he2n', 'ter1', 'pu2', 'at1', '5nd.', 'r1r', 'con1', 'x1c', 'c2ce', 'b2l', '1tio', 'n2at', '1ble', 'm1m', 'gr2', 'hy3ph', '1m', 't1t', 's1s', '.re1', '2io', '1p', 'li1', 'ex1', '1na', 'a1b', '2mp', 'hen5at', 'p2h', '.un1', 'l1l', 'e1c', 'a2n', 'ca1t', 'e2x', 'io3n.', '1ca', 'an1d'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 2, 1], 'un-dersta-n-d'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('partial-repair probe', ['Exception', ['he2n', '.re1', '3ty.', 'e2x', 'n2at', 'e1c', '2mp', '1m', '.ta4', '2io', 'a1b', 'hen5at', '1ble', 'ex1', 'at1', 'an1d', 'ca1t', 'io3n.'], ['gram-mar', 'mis-sis-sip-pi'], 1, 2], 'Ex-ception'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['Commitment', ['1m', '2mp', 'r1r', 'io3n.', 'gr2', 'at1', 't1t', '3ty.', '.ta4', '1q', '2io', 'p2h', 's1s', '1ca', 'a2n', 'li1', 'b2l', '.re1', '1na', 'o2n', 'con1', '5nd.'], [], 2, 3], 'Co-m-mit-ment'), ('control layout', ['computer', ['4ing.', 'ex1', '1na', 'om1', 'l1l', '5nd.', 'e1c', 'o2n', 'con1'], ['mis-sis-sip-pi', 'pro-ject', 'ta-ble'], 2, 3], 'com-puter')], [('regression: word-end anchor padding', ['hyphenation', ['1na', '5nd.', 'ment1', 'r1r', 'p2h', 'e1c', 'ter1', 'n2at', 'ca1t', '1q', '4ing.', 'a2n', 'hena4', 't1t', '1m', '.un1', '.re1', 'b2l', 'hen5at', 'io3n.', '3ty.', 'x1c', 'c2ce', 'ex1', '1ble', 'pu2', '1tio', 'l1l', '1ca', 'm1m', 'an1d', 'hy3ph', 'o2n', 'he2n', 'li1', 'om1', 'a1b', 'e2x', '.ta4', 'gr2', 'at1', 'n1g'], ['ex-cep-tion'], 1, 1], 'hy-phen-at-io-n'), ('regression: word-end anchor padding', ['Exception', ['at1', '1q', '1ble', 'm1m', '2io', 'he2n', 'hen5at', 'x1c', 'ter1', '.ta4', 'e2x', '4ing.', 'an1d', '1p', 'a1b', 't1t', 'n1g', 'gr2', '3ty.', 'io3n.', 'om1', 'hena4', '.un1', '2mp', 'n2at', '1tio', 'hy3ph', 'ca1t', '1m', 'l1l', 's1s', 'r1r', 'c2ce', 'e1c', 'ex1', '5nd.', '1ca', '.re1', 'li1', 'pu2', 'a2n', 'p2h', 'ment1', 'o2n'], [], 2, 1], 'Ex-ce-p-tio-n'), ('partial-repair probe', ['Unexpected', ['c2ce', '1na', '1tio', 'om1', 'at1', '.un1', '1ca', 'io3n.', '1p', '1ble', 'x1c'], ['mis-sis-sip-pi'], 1, 1], 'Un-ex-pected'), ('partial-repair probe', ['Unexpected', ['1na', 'p2h', 'n2at', 'a1b', 'pu2', '1ca', 'n1g', 'e1c', '1m', 'c2ce', '.un1', 'e2x', 'li1', 's1s', '1q', 'm1m', 'a2n'], [], 1, 2], 'Un-expe-cted'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['Unexpected', ['hena4', 'a1b', 'at1', 'con1', 'hen5at', 'li1', 'gr2', '1m', 'x1c', '2io', 'ca1t', '1tio', 'c2ce', 'io3n.', 'n2at', '1ble', '.re1', '2mp', 'r1r', 'e1c', 'b2l', 'ter1', '1p', 'e2x', 'ment1', '1ca', 'm1m', 'an1d', 'he2n', 'ex1', 's1s', '5nd.', '.ta4', 'n1g', '1na', 'pu2'], [], 3, 3], 'Unex-pe-cted'), ('control layout', ['hyphenation', ['e1c', '1ca', 'ter1', 'at1', 's1s', 'ex1', 'con1', '1tio', '2io', '2mp', '1na', 'm1m', 'pu2', 'ment1', '1q', 'l1l', 't1t', 'he2n', 'n2at', '1p', 'li1', 'o2n', 'om1', 'hy3ph'], [], 2, 1], 'hy-phena-tion')]]
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
regression: word-end anchor paddingun-dersta-ndun-dersta-ndPassed
regression: word-end anchor paddingundersta-ndundersta-ndPassed
partial-repair probeRecreationRe-creationFailed
partial-repair probeUnex-pe-ctedUn-ex-pe-ctedFailed
lowercase exceptionpro-jectpro-jectPassed
capitalised exceptionTa-bleTa-blePassed
control layoutbat-tlebat-tlePassed
control layoutCom-mitmentCom-mitmentPassed

SHA-256 / 885bef7fe68c9d4a9ac96659619dffe85c9abd01e7de1f87a69c8f0ca0b3c5a3

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    word, patterns, exceptions, lmin, rmin = x
    low = word.lower()
    for e in exceptions:
        if e.replace('-', '') == low:
            out, count = '', 0
            for c in e:
                if c == '-':
                    out += '-'
                else:
                    out += word[count]
                    count += 1
            return out
    table = {}
    for p in patterns:
        letters = ''
        vals = [0]
        for c in p:
            if c.isdigit():
                vals[-1] = int(c)
            else:
                letters += c
                vals.append(0)
        table[letters] = vals
    dotted = '.' + low + '.'
    score = [0] * (len(dotted) + 1)
    for s in range(len(dotted)):
        for e in range(s + 1, len(dotted) + 1):
            vals = table.get(dotted[s:e])
            if vals:
                for k, v in enumerate(vals):
                    score[s + k] = max(score[s + k], v)
    points = [i for i in range(1, len(word)) if score[i + 1] % 2 == 1 and i >= lmin and len(word) - i >= rmin]
    out = ''
    for i, c in enumerate(word):
        if i in points:
            out += '-'
        out += c
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: word-end anchor padding', ['understand', ['1p', 'l1l', 'x1c', 'o2n', '5nd.', 'he2n', '1m', 'n1g', 'li1', 'b2l', 'm1m', 'r1r', '1ca', 'hena4', 'om1', 'gr2', '1q', 'n2at', 'pu2', 'ex1', 'e1c', 't1t', 'c2ce', '.un1', 'p2h', 'hy3ph', '1ble', '4ing.', 'ter1', '3ty.', '1tio', 'con1', 'hen5at', '1na', 'ment1', 'at1', '.ta4', 's1s'], ['ex-cep-tion', 'ta-ble', 'mis-sis-sip-pi'], 1, 2], 'un-dersta-nd'), ('regression: word-end anchor padding', ['understand', ['e2x', 'l1l', '5nd.', 'x1c', 'an1d', '1m', '1tio', 'he2n', 'ca1t', '1ca', 'c2ce', 'e1c', 's1s', 'p2h', 'o2n', 't1t', '2io', 'gr2', 'con1', 'n2at'], [], 1, 2], 'understa-nd'), ('partial-repair probe', ['Recreation', ['o2n', '.re1', 't1t', '4ing.', 'l1l', 'm1m', 'gr2', 'li1', 'ter1', '2io'], ['ta-ble', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 3], 'Re-creation'), ('partial-repair probe', ['Unexpected', ['n1g', 'hen5at', 'hy3ph', 'p2h', 'r1r', 's1s', 'at1', '1m', 'c2ce', 'b2l', '1ble', '.un1', 'l1l', 'he2n', 'io3n.', 'om1', '1ca', 'pu2', 'o2n', 'n2at', 'e2x', 'x1c', 't1t', '.re1', '1tio', 'ex1', 'con1', 'gr2', '4ing.', 'e1c', 'ca1t', 'ment1', 'ter1', 'a2n', '1na'], [], 1, 2], 'Un-ex-pe-cted'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['battle', ['.un1', 't1t', '1q', '3ty.', 'ter1', 'ca1t', 'e1c', 'at1', 'ment1', 'li1', '1ble', '2mp', '1ca', 'c2ce', 'e2x', 'r1r', '4ing.', 'hen5at', 'pu2', 'x1c', 'om1', '5nd.', 'n2at', 'l1l', '.re1', 'ex1', 'gr2', 'con1'], ['ta-ble'], 1, 3], 'bat-tle'), ('control layout', ['Commitment', ['.ta4', 'gr2', 'om1', 't1t', 'e1c', 'a2n', '1q', '1ble', '1tio', 'hen5at', '2mp'], [], 3, 1], 'Com-mitment')], [('regression: word-end anchor padding', ['Recreation', ['hy3ph', 'x1c', 'gr2', 'hena4', 'c2ce', 'an1d', 'a1b', '1ca', '1na', '2io', 'e2x', 's1s', 'n2at', 'ment1', 'io3n.', 'pu2', 'at1', 'b2l'], ['ex-cep-tion', 'pro-ject', 'ta-ble'], 3, 1], 'Recreatio-n'), ('regression: word-end anchor padding', ['understand', ['c2ce', 'n2at', 'a2n', 'ca1t', 'b2l', 'a1b', '1ca', 'hy3ph', 'e2x', 't1t', 'r1r', '1q', 'p2h', 'ex1', 'con1', 'he2n', 'x1c', 'hena4', 'om1', 's1s', 'li1', 'at1', 'an1d', 'e1c', 'hen5at', '1na', '.re1', '4ing.', '1ble', 'io3n.', '3ty.', '2io', '2mp', '5nd.', '1m', '1tio', 'ment1', 'l1l', 'ter1', 'n1g', 'm1m'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 2, 1], 'understa-n-d'), ('partial-repair probe', ['Categories', ['ter1', 'r1r', 'hy3ph', '1ble', 'a2n', '1ca', '1tio', 'hena4', 's1s', '2io', 'pu2', 'n2at', 'x1c', 'con1', 'at1', 't1t', 'n1g', 'li1', '.un1', 'ca1t', '1p', 'io3n.', '1q', '2mp', '1m', 'hen5at', 'an1d', 'ex1', 'b2l', 'p2h', '3ty.', 'ment1'], [], 1, 3], 'Ca-t-egories'), ('partial-repair probe', ['Table', ['1m', '1ca', 'x1c', 'gr2', 's1s', '1q', '1na', '4ing.', 'con1', 'e2x', 'om1', 'at1', '.ta4', 'a1b', 'n1g', 'r1r', 'li1', 'l1l', 'he2n', '2io', 'pu2', 'ex1', 'hen5at', '3ty.', 'ca1t', 'b2l', 'o2n'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 1, 2], 'Table'), ('left minimum boundary', ['excellent', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 3], 'ex-cel-lent'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('control layout', ['Mississippi', ['1ca', 'io3n.', '1m', 'pu2', 'gr2', 'b2l', 'n2at', '3ty.', 's1s', 'l1l', 'o2n', 'he2n', '.un1', '.re1', '2mp', 'e2x', 'hy3ph', 'at1', 'ter1', 'm1m', '1ble', 'hen5at', 'con1', 'ment1', 'ex1', '1na', 'p2h', 'e1c', 'hena4', 't1t', 'a1b', 'r1r'], ['mis-sis-sip-pi', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Mis-sis-sip-pi'), ('control layout', ['Pentagon', ['1na', 'e2x', 'hy3ph', 'a1b', 'ca1t', '2mp', 'x1c', 'io3n.', '.un1'], ['ta-ble', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Pentagon')], [('regression: word-end anchor padding', ['understand', ['2io', 'con1', 'an1d', 'm1m', '5nd.', 'hy3ph', 'ment1', 'ter1'], [], 3, 1], 'understa-n-d'), ('regression: word-end anchor padding', ['hyphenation', ['1ble', '1ca', 'hy3ph', 'gr2', '5nd.', 'at1', '1tio', 'n2at', 'ex1', 'x1c', '1na', 'ter1', 'b2l', 'e1c', 't1t', '1q', 'li1', '.ta4', 'm1m', 's1s', 'e2x', 'con1', '2mp', 'r1r', 'hena4', '.re1', '2io', 'c2ce', 'om1', 'p2h', '1p', 'ca1t', 'l1l', 'o2n', 'pu2', 'n1g', 'a1b', 'io3n.', '1m', 'ment1'], ['mis-sis-sip-pi', 'ta-ble'], 1, 1], 'hy-phe-natio-n'), ('partial-repair probe', ['Table', ['ex1', 'n2at', 'hen5at', 'n1g', 'an1d', 'b2l', '.re1', 'om1', 'x1c', '.ta4', 'li1', 'io3n.', '1ble', 'hy3ph', '2mp', '4ing.', 'ment1', 'ca1t', '2io', 'a2n', 'ter1', 'a1b', 'gr2', '1na', 'p2h', 'he2n', 'con1', 'l1l', 'hena4', '5nd.', '1ca', 'pu2', 'e2x', 'at1', 'm1m', '3ty.'], ['ex-cep-tion'], 1, 2], 'Table'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('word-final pattern ing.', ['running', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 2, 2], 'running'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['excellent', ['2io', '1ble', 'li1', 'l1l', 'x1c', 'hena4', 'con1', 'at1', '3ty.', 'p2h', 'an1d', 'pu2', 'o2n', 'gr2', 'hen5at'], ['pro-ject'], 1, 3], 'ex-cel-lent'), ('control layout', ['excellent', ['ter1', '.re1', 'e1c', 'e2x', 's1s', 't1t', '3ty.', 'hen5at', '1ble', 'm1m', '4ing.', '2mp', 'n1g', 'a2n', 'o2n', 'io3n.', '1na', 'ment1', 'li1', '1p', 'gr2', 'a1b', 'c2ce', '5nd.', 'om1', 'l1l', 'pu2', '.un1', 'he2n', '.ta4', '1m'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 1, 3], 'excel-lent')], [('regression: word-end anchor padding', ['hyphenation', ['e1c', '5nd.', 'e2x', '.ta4', '3ty.', 'hy3ph', 'om1', 'he2n', 'n1g', '1q', 'x1c', '1ca', 't1t', 'b2l', 'a1b', 'm1m', 'pu2', 'ter1', 'hen5at', '4ing.', '.re1', 'p2h', '1ble', 'li1', 'gr2', 'r1r', '.un1', '2io', '1na', '1tio', 'ca1t', 'io3n.', 'n2at', '1p', 'an1d', 'o2n', '2mp', 'c2ce', 'ment1', 's1s', 'con1'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 1, 1], 'hy-phen-a-tio-n'), ('regression: word-end anchor padding', ['understand', ['.ta4', '3ty.', 'he2n', 'ter1', 'pu2', 'at1', '5nd.', 'r1r', 'con1', 'x1c', 'c2ce', 'b2l', '1tio', 'n2at', '1ble', 'm1m', 'gr2', 'hy3ph', '1m', 't1t', 's1s', '.re1', '2io', '1p', 'li1', 'ex1', '1na', 'a1b', '2mp', 'hen5at', 'p2h', '.un1', 'l1l', 'e1c', 'a2n', 'ca1t', 'e2x', 'io3n.', '1ca', 'an1d'], ['ex-cep-tion', 'gram-mar', 'mis-sis-sip-pi'], 2, 1], 'un-dersta-n-d'), ('partial-repair probe', ['Categories', ['p2h', '.ta4', 'n1g', 'gr2', 'r1r', 'b2l', '3ty.', '1m', '4ing.', 'li1', 'ca1t', '2mp', '5nd.', 'm1m', 's1s', 'o2n', '.re1', 'con1', 't1t', 'om1', '1q', 'hena4', 'an1d', 'ex1', 'a1b', '.un1', '1tio', '1na', 'io3n.'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 2, 2], 'Ca-tegories'), ('partial-repair probe', ['Exception', ['he2n', '.re1', '3ty.', 'e2x', 'n2at', 'e1c', '2mp', '1m', '.ta4', '2io', 'a1b', 'hen5at', '1ble', 'ex1', 'at1', 'an1d', 'ca1t', 'io3n.'], ['gram-mar', 'mis-sis-sip-pi'], 1, 2], 'Ex-ception'), ('right minimum boundary', ['category', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], [], 1, 3], 'ca-t-egory'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('control layout', ['Commitment', ['1m', '2mp', 'r1r', 'io3n.', 'gr2', 'at1', 't1t', '3ty.', '.ta4', '1q', '2io', 'p2h', 's1s', '1ca', 'a2n', 'li1', 'b2l', '.re1', '1na', 'o2n', 'con1', '5nd.'], [], 2, 3], 'Co-m-mit-ment'), ('control layout', ['computer', ['4ing.', 'ex1', '1na', 'om1', 'l1l', '5nd.', 'e1c', 'o2n', 'con1'], ['mis-sis-sip-pi', 'pro-ject', 'ta-ble'], 2, 3], 'com-puter')], [('regression: word-end anchor padding', ['hyphenation', ['1na', '5nd.', 'ment1', 'r1r', 'p2h', 'e1c', 'ter1', 'n2at', 'ca1t', '1q', '4ing.', 'a2n', 'hena4', 't1t', '1m', '.un1', '.re1', 'b2l', 'hen5at', 'io3n.', '3ty.', 'x1c', 'c2ce', 'ex1', '1ble', 'pu2', '1tio', 'l1l', '1ca', 'm1m', 'an1d', 'hy3ph', 'o2n', 'he2n', 'li1', 'om1', 'a1b', 'e2x', '.ta4', 'gr2', 'at1', 'n1g'], ['ex-cep-tion'], 1, 1], 'hy-phen-at-io-n'), ('regression: word-end anchor padding', ['Exception', ['at1', '1q', '1ble', 'm1m', '2io', 'he2n', 'hen5at', 'x1c', 'ter1', '.ta4', 'e2x', '4ing.', 'an1d', '1p', 'a1b', 't1t', 'n1g', 'gr2', '3ty.', 'io3n.', 'om1', 'hena4', '.un1', '2mp', 'n2at', '1tio', 'hy3ph', 'ca1t', '1m', 'l1l', 's1s', 'r1r', 'c2ce', 'e1c', 'ex1', '5nd.', '1ca', '.re1', 'li1', 'pu2', 'a2n', 'p2h', 'ment1', 'o2n'], [], 2, 1], 'Ex-ce-p-tio-n'), ('partial-repair probe', ['Unexpected', ['c2ce', '1na', '1tio', 'om1', 'at1', '.un1', '1ca', 'io3n.', '1p', '1ble', 'x1c'], ['mis-sis-sip-pi'], 1, 1], 'Un-ex-pected'), ('partial-repair probe', ['Unexpected', ['1na', 'p2h', 'n2at', 'a1b', 'pu2', '1ca', 'n1g', 'e1c', '1m', 'c2ce', '.un1', 'e2x', 'li1', 's1s', '1q', 'm1m', 'a2n'], [], 1, 2], 'Un-expe-cted'), ('capitalised exception', ['Table', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['ta-ble'], 1, 1], 'Ta-ble'), ('lowercase exception', ['project', ['.ta4', 'a1b', 'b2l', '1ble', 'hy3ph', 'he2n', 'hena4', 'hen5at', '1na', 'n2at', '1tio', '2io', 'o2n', 'pu2', 'ter1', '1m', 'ex1', 'e1c', 'c2ce', 'con1', 'ment1', '4ing.', 'n1g', '.re1', 'gr2', '3ty.', 'li1', '1ca', 'ca1t', 'at1', 'io3n.', 'r1r', 'm1m', 'l1l', 't1t', 's1s', 'a2n', 'an1d', '5nd.', '1p', 'p2h', '1q', '.un1', 'e2x', 'x1c', '2mp', 'om1'], ['pro-ject'], 2, 3], 'pro-ject'), ('control layout', ['Unexpected', ['hena4', 'a1b', 'at1', 'con1', 'hen5at', 'li1', 'gr2', '1m', 'x1c', '2io', 'ca1t', '1tio', 'c2ce', 'io3n.', 'n2at', '1ble', '.re1', '2mp', 'r1r', 'e1c', 'b2l', 'ter1', '1p', 'e2x', 'ment1', '1ca', 'm1m', 'an1d', 'he2n', 'ex1', 's1s', '5nd.', '.ta4', 'n1g', '1na', 'pu2'], [], 3, 3], 'Unex-pe-cted'), ('control layout', ['hyphenation', ['e1c', '1ca', 'ter1', 'at1', 's1s', 'ex1', 'con1', '1tio', '2io', '2mp', '1na', 'm1m', 'pu2', 'ment1', '1q', 'l1l', 't1t', 'he2n', 'n2at', '1p', 'li1', 'o2n', 'om1', 'hy3ph'], [], 2, 1], 'hy-phena-tion')]]
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
regression: word-end anchor paddingun-dersta-ndun-dersta-ndPassed
regression: word-end anchor paddingundersta-ndundersta-ndPassed
partial-repair probeRe-creationRe-creationPassed
partial-repair probeUn-ex-pe-ctedUn-ex-pe-ctedPassed
lowercase exceptionpro-jectpro-jectPassed
capitalised exceptionTa-bleTa-blePassed
control layoutbat-tlebat-tlePassed
control layoutCom-mitmentCom-mitmentPassed

SHA-256 / 5c2ed1e2d261e468eb8a115cc31afdc6794ced82a5d0aa4da874cfb154ca4052

Verification & scope

A deterministic toy typesetting model with integer widths and a stipulated rule set; it does not claim conformance to any engine. 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:49:48.940342+00:00.

Case digest / c4917e58b5b8dc29720c77ab1f4a04458ae9f19b91631d0e81e0810ff83e372b