broken_source:
"""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('-', '') == word:
            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 = [[('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'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('regression: exception lookup case', ['Mississippi', ['5nd.', '4ing.', 'om1', '2mp', 'r1r', 'n2at', '2io', '1ca'], ['mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('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'), ('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'), ('control layout', ['Commitment', ['.un1', '4ing.', 's1s', 'io3n.', 'pu2', 'c2ce', '1ca', '1tio', '1ble', 'he2n', 't1t', '1m', '5nd.', '2mp', 'b2l', 'an1d', 'a2n', 'li1', 'at1', 'ca1t', '.ta4', '1q', '2io', 'om1', 'ment1', 'a1b', 'hy3ph', '1na', 'r1r', '3ty.', '1p', 'm1m', 'e1c', 'hena4', 'p2h', 'n2at', 'o2n', 'con1', '.re1'], ['ex-cep-tion', 'ta-ble'], 2, 1], 'Co-m-mit-ment'), ('control layout', ['Paragraph', ['e1c', 'at1', 'ment1', 'gr2', 'a1b', 's1s', 't1t', 'hen5at', '1q', 'om1', 'hena4', '1ble', '5nd.', '1p', 'm1m', '1ca', '3ty.', 'e2x', 'a2n', 'ex1', '.re1', 'n1g', 'ter1', 'he2n', '4ing.', 'r1r', 'con1', '.ta4', 'ca1t', '2io', 'x1c', '.un1', 'li1', '1na', 'l1l', 'an1d', 'pu2', '1m', 'hy3ph', 'b2l', 'io3n.', '2mp', 'n2at', '1tio'], ['ta-ble', 'pro-ject'], 2, 2], 'Paragra-ph'), ('control layout', ['table', ['1ble', 'ment1', 'e2x', 'l1l', 'li1', 'n1g', 'he2n', 't1t', 'o2n', 'at1', '5nd.', 'c2ce', 'hy3ph', '.ta4', 'con1', 'ex1', '2io', 'p2h', '1p', '1na', 'ca1t', 'r1r', 'a2n', 's1s', 'pu2', 'ter1', 'b2l', 'x1c', 'n2at', 'hena4', 'e1c', '.re1', '3ty.', '1m', '1ca', 'gr2', '2mp', '.un1', 'io3n.', 'hen5at', 'm1m'], [], 2, 1], 'table')], [('regression: exception lookup case', ['Table', ['om1', 'ca1t', 'o2n', 'e1c', '2io', '2mp', 'a2n', 'l1l', 'io3n.', 'e2x', 'a1b', 'ter1', '.ta4', 'an1d', 'r1r', 't1t', '1ca', 'pu2', 'n1g', '1tio', '3ty.', '1p', 'at1'], ['ta-ble'], 2, 2], 'Ta-ble'), ('regression: exception lookup case', ['Exception', ['.ta4', '2mp', 'ca1t', 'pu2', 'gr2', 'm1m', 'li1', 't1t', 'p2h', 'b2l', 'hen5at', 'hena4', 'o2n', 'n1g', 'con1', '5nd.', '.re1', '3ty.', 'ment1', 'x1c', '1na', 's1s', 'an1d', 'l1l', 'io3n.', 'c2ce', 'a1b', 'he2n', 'ter1', '1tio', 'n2at', 'a2n', '1ca', 'ex1', '2io', '1ble', 'e2x', '4ing.', 'e1c', '.un1', 'hy3ph', '1p', '1q', 'r1r', 'at1', '1m', 'om1'], ['ex-cep-tion', 'ta-ble', 'gram-mar'], 2, 3], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['2io', 's1s', 'ca1t', '1na', '1ble', 'con1', 'hena4', 'li1', 'm1m', '1q', 'n1g', '1ca', 'he2n', 'hen5at', '1p', '.ta4', 'ter1'], ['gram-mar', 'pro-ject'], 1, 2], 'pro-ject'), ('regression: exception lookup case', ['Exception', ['ex1', '2io', 'io3n.', 'x1c', 'pu2', 'at1', '1m', 'hy3ph', 'om1', 'n2at', '1na', '2mp', '1p', 'n1g', '1tio', '.un1', 'e1c', '.re1', 'c2ce', 'o2n', 'b2l', '1ca', 'l1l'], ['gram-mar', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Ex-cep-tion'), ('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', ['hyphenation', ['hy3ph', 'pu2', '1p', '3ty.', 'p2h', '2io', 'm1m', 'ex1', 'n2at', 'con1', 'a2n', '1na', 'e2x', '.ta4', 'at1', 'hen5at', 'c2ce', 'li1', 'n1g', 'an1d', 'a1b', '1m', '1tio', 'x1c', '5nd.', '4ing.', '.re1', 'hena4', 's1s', '1q'], ['ta-ble'], 3, 3], 'hyphe-n-ation'), ('control layout', ['Pentagon', ['hy3ph', '.re1', 'n1g', 'ex1', 's1s', '5nd.', '.un1', 'ca1t', 'o2n', '1m', 'io3n.', 'an1d', '1ca', 'pu2', '2mp', 'b2l', 'p2h', 'x1c', 'l1l', '2io', 'a2n'], ['ex-cep-tion', 'mis-sis-sip-pi', 'gram-mar'], 1, 3], 'Pentagon')], [('regression: exception lookup case', ['Table', ['om1', 'ca1t', 'o2n', 'e1c', '2io', '2mp', 'a2n', 'l1l', 'io3n.', 'e2x', 'a1b', 'ter1', '.ta4', 'an1d', 'r1r', 't1t', '1ca', 'pu2', 'n1g', '1tio', '3ty.', '1p', 'at1'], ['ta-ble'], 2, 2], 'Ta-ble'), ('regression: exception lookup case', ['Exception', ['ex1', '2io', 'io3n.', 'x1c', 'pu2', 'at1', '1m', 'hy3ph', 'om1', 'n2at', '1na', '2mp', '1p', 'n1g', '1tio', '.un1', 'e1c', '.re1', 'c2ce', 'o2n', 'b2l', '1ca', 'l1l'], ['gram-mar', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['l1l', '1q', 'm1m', '2io', 'x1c', 'ment1', '1ble', 'a2n', 'gr2', 'e1c', 'li1', 'e2x', 's1s', '.un1', '1ca'], ['pro-ject'], 1, 1], 'pro-ject'), ('partial-repair probe', ['project', ['e1c', 'li1', 'b2l', 'r1r', 'at1', '3ty.', 's1s', 'p2h', 'a1b', 'ter1', 't1t', 'hy3ph', 'om1', 'gr2', 'io3n.', 'hena4', 'a2n', '2mp', 'x1c', 'ex1', 'e2x', 'hen5at', '1tio', '.un1', '4ing.', 'n1g', 'pu2', 'ment1', '1q', 'he2n', '.ta4', '1ca'], ['gram-mar', 'ex-cep-tion', 'pro-ject'], 3, 2], 'pro-ject'), ('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', ['computer', ['hy3ph', 'n1g', 'om1', 'ter1', 'pu2', 'l1l', 'e2x', '1na', 'e1c', 'io3n.', 'hen5at', 'ca1t', '1q', '4ing.', 'hena4', 'ex1', '1p', 't1t', 'p2h', '.ta4', '1tio', 'ment1', 'li1', '2mp', 'n2at', 'x1c', 'o2n', 's1s', 'he2n', '1m', 'a2n', 'c2ce', '.un1', 'm1m', 'an1d', 'con1', '1ca', 'gr2', 'a1b', 'b2l', '2io', '.re1', '3ty.', 'r1r', '1ble', '5nd.', 'at1'], ['pro-ject'], 1, 1], 'com-puter'), ('control layout', ['connection', ['1ble', 'p2h', 'ex1', 'hena4', 'an1d', '.ta4', '1na', 'b2l', 'li1', 'gr2', 'e2x', 'at1', 'pu2', 'l1l', 't1t', '3ty.', 'hen5at', 'ment1', '1ca', '.re1', '1p', 'ter1', 'con1', 'he2n', 'c2ce', 'e1c', 'n2at', 'om1', 'ca1t', '4ing.', 'a1b', 'n1g', 'm1m', 'r1r', 'hy3ph'], [], 1, 2], 'con-ne-ction')], [('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'), ('regression: exception lookup case', ['Exception', ['hena4', '1q', 'hy3ph', 'ter1', 'at1', 'e1c', '1na', '5nd.', 'b2l', 'ment1', '1p', '.ta4', 'ca1t', 'ex1', 't1t', 'a2n', '1tio', '4ing.', '2io', 'p2h', 'o2n', 'e2x', 'm1m', 'pu2', 'he2n', 'li1', 'a1b'], ['ex-cep-tion', 'gram-mar'], 1, 2], 'Ex-cep-tion'), ('regression: exception lookup case', ['Table', ['li1', '2io', 'hy3ph', '4ing.', 'at1', 'm1m', 'om1', 'ex1', 'p2h', 'e2x', 'a2n', '1q', '1na', 'n2at', 'r1r', 'hena4', '1p', 'an1d', 'gr2', '3ty.', 'ca1t', 'n1g', 'x1c', 'c2ce', '.re1', 'io3n.', '1m', 'hen5at', 'e1c', 'ter1', 'l1l', 'b2l', 'pu2'], ['ta-ble'], 2, 3], 'Ta-ble'), ('partial-repair probe', ['grammar', ['ex1', 'ter1', 'hy3ph', 'gr2', 's1s', 'e2x', 'c2ce', 'li1', 'a2n', 'ment1', '1ble', '.un1', 'an1d', 'p2h', '1p', 'x1c', 'con1', '5nd.', '2io', 'hena4', 'b2l', '1na', 'om1', 'ca1t', '2mp', '1tio', '1q', 'io3n.', '3ty.'], ['pro-ject', 'ta-ble', 'gram-mar'], 1, 1], 'gram-mar'), ('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'), ('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'), ('control layout', ['hyphenation', ['io3n.', 'ment1', '1p', 'n1g', 'b2l', 'e1c', 'p2h', 'n2at', '2mp', '1na', 'a2n', 'ex1', 'o2n', 'an1d', '3ty.', 'a1b', 'hena4', 'hen5at', 'r1r', 'gr2', 's1s', '1ble', 'he2n', 'e2x', '1ca', '2io', 'x1c', '4ing.', 'm1m', 'con1'], ['ta-ble'], 3, 2], 'hyphen-ation'), ('control layout', ['Unexpected', ['m1m', 'io3n.', '.ta4', 'li1', 'he2n', 'x1c', 'e2x', 'con1', '5nd.', 'a1b', '1ca', '2mp', 'c2ce', 'p2h', 'e1c', '1tio', '2io', '1na', 's1s', '1p', 'hy3ph', 'at1', 'pu2', 'b2l', '.un1', 'om1', 'r1r', 'ex1', 'hen5at', 'ter1', '1q', 'n1g', 'l1l', '.re1', '3ty.', 'an1d', '4ing.', 'n2at', 't1t', 'o2n', 'hena4', '1ble', 'a2n', '1m', 'ca1t', 'gr2'], [], 2, 3], 'Un-ex-pe-cted')], [('regression: exception lookup case', ['Mississippi', ['5nd.', '4ing.', 'om1', '2mp', 'r1r', 'n2at', '2io', '1ca'], ['mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('regression: exception lookup case', ['Exception', ['s1s', 'con1', 'c2ce', 'pu2', 'x1c', '1m', '2mp', 'a1b', 'n2at', '.re1', '.ta4', '3ty.', 'n1g', 'ment1', 'p2h', 'hy3ph', 'ter1', 'hena4', 'b2l'], ['ex-cep-tion'], 2, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['x1c', '1tio', 'io3n.', 'gr2', '2io', 'o2n', 'ment1', '.re1', 'l1l', 'con1', 'n2at', 'hen5at', 'hena4', 'ter1', '.ta4', 'r1r', '1p', '.un1', 'ca1t', 'e1c', 'c2ce', '5nd.', 'b2l', '1na', 'e2x', 'm1m', 'a1b', '2mp', '3ty.', 'p2h', '1m', 't1t', 'an1d', 'n1g', 'pu2', 'ex1'], ['ta-ble', 'ex-cep-tion'], 3, 1], 'ta-ble'), ('partial-repair probe', ['grammar', ['1ble', 'e2x', '2io', 'li1', '.un1', '.re1', '5nd.', '1m', '1p', '1ca', '1na', '1q', '1tio', 'n2at', 'e1c', 'om1', 'at1', 'io3n.', 'ter1', '2mp', '4ing.', 'con1', 'ment1', 'r1r', 'pu2', 'p2h', 'hy3ph', 't1t', 'm1m', 'ex1', 'l1l', 'b2l', 's1s', 'c2ce', 'n1g', 'he2n', 'hena4', 'gr2', '.ta4', 'an1d', 'ca1t', 'o2n', 'x1c', '3ty.', 'a2n'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 3, 3], 'gram-mar'), ('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'), ('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', ['table', ['ca1t', '1ble', 'n2at', 'con1', '.re1', 's1s', 'b2l', 'a2n', 'x1c', 't1t', 'r1r', '5nd.', 'o2n'], ['ex-cep-tion'], 2, 2], 'ta-ble'), ('control layout', ['battle', ['1ca', 'x1c', 'an1d', '1m', 's1s', 'he2n', '5nd.', 'b2l', 'ex1', 'c2ce', 'li1', 't1t', '1na', 'hen5at', 'gr2', 'hy3ph', '1p', 'p2h', '2io', 'r1r', '.re1', 'e2x', 'om1', 'ter1', 'a1b', 'at1', 'io3n.', 'pu2', 'n2at', 'm1m', 'con1', '4ing.', '1ble', '.un1', 'ca1t', 'l1l', '2mp', '3ty.', 'n1g', 'ment1', '1q'], ['ta-ble'], 1, 1], 'bat-tle')]]
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)

source:
"""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 == 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 = [[('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'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('regression: exception lookup case', ['Mississippi', ['5nd.', '4ing.', 'om1', '2mp', 'r1r', 'n2at', '2io', '1ca'], ['mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('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'), ('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'), ('control layout', ['Commitment', ['.un1', '4ing.', 's1s', 'io3n.', 'pu2', 'c2ce', '1ca', '1tio', '1ble', 'he2n', 't1t', '1m', '5nd.', '2mp', 'b2l', 'an1d', 'a2n', 'li1', 'at1', 'ca1t', '.ta4', '1q', '2io', 'om1', 'ment1', 'a1b', 'hy3ph', '1na', 'r1r', '3ty.', '1p', 'm1m', 'e1c', 'hena4', 'p2h', 'n2at', 'o2n', 'con1', '.re1'], ['ex-cep-tion', 'ta-ble'], 2, 1], 'Co-m-mit-ment'), ('control layout', ['Paragraph', ['e1c', 'at1', 'ment1', 'gr2', 'a1b', 's1s', 't1t', 'hen5at', '1q', 'om1', 'hena4', '1ble', '5nd.', '1p', 'm1m', '1ca', '3ty.', 'e2x', 'a2n', 'ex1', '.re1', 'n1g', 'ter1', 'he2n', '4ing.', 'r1r', 'con1', '.ta4', 'ca1t', '2io', 'x1c', '.un1', 'li1', '1na', 'l1l', 'an1d', 'pu2', '1m', 'hy3ph', 'b2l', 'io3n.', '2mp', 'n2at', '1tio'], ['ta-ble', 'pro-ject'], 2, 2], 'Paragra-ph'), ('control layout', ['table', ['1ble', 'ment1', 'e2x', 'l1l', 'li1', 'n1g', 'he2n', 't1t', 'o2n', 'at1', '5nd.', 'c2ce', 'hy3ph', '.ta4', 'con1', 'ex1', '2io', 'p2h', '1p', '1na', 'ca1t', 'r1r', 'a2n', 's1s', 'pu2', 'ter1', 'b2l', 'x1c', 'n2at', 'hena4', 'e1c', '.re1', '3ty.', '1m', '1ca', 'gr2', '2mp', '.un1', 'io3n.', 'hen5at', 'm1m'], [], 2, 1], 'table')], [('regression: exception lookup case', ['Table', ['om1', 'ca1t', 'o2n', 'e1c', '2io', '2mp', 'a2n', 'l1l', 'io3n.', 'e2x', 'a1b', 'ter1', '.ta4', 'an1d', 'r1r', 't1t', '1ca', 'pu2', 'n1g', '1tio', '3ty.', '1p', 'at1'], ['ta-ble'], 2, 2], 'Ta-ble'), ('regression: exception lookup case', ['Exception', ['.ta4', '2mp', 'ca1t', 'pu2', 'gr2', 'm1m', 'li1', 't1t', 'p2h', 'b2l', 'hen5at', 'hena4', 'o2n', 'n1g', 'con1', '5nd.', '.re1', '3ty.', 'ment1', 'x1c', '1na', 's1s', 'an1d', 'l1l', 'io3n.', 'c2ce', 'a1b', 'he2n', 'ter1', '1tio', 'n2at', 'a2n', '1ca', 'ex1', '2io', '1ble', 'e2x', '4ing.', 'e1c', '.un1', 'hy3ph', '1p', '1q', 'r1r', 'at1', '1m', 'om1'], ['ex-cep-tion', 'ta-ble', 'gram-mar'], 2, 3], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['2io', 's1s', 'ca1t', '1na', '1ble', 'con1', 'hena4', 'li1', 'm1m', '1q', 'n1g', '1ca', 'he2n', 'hen5at', '1p', '.ta4', 'ter1'], ['gram-mar', 'pro-ject'], 1, 2], 'pro-ject'), ('regression: exception lookup case', ['Exception', ['ex1', '2io', 'io3n.', 'x1c', 'pu2', 'at1', '1m', 'hy3ph', 'om1', 'n2at', '1na', '2mp', '1p', 'n1g', '1tio', '.un1', 'e1c', '.re1', 'c2ce', 'o2n', 'b2l', '1ca', 'l1l'], ['gram-mar', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Ex-cep-tion'), ('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', ['hyphenation', ['hy3ph', 'pu2', '1p', '3ty.', 'p2h', '2io', 'm1m', 'ex1', 'n2at', 'con1', 'a2n', '1na', 'e2x', '.ta4', 'at1', 'hen5at', 'c2ce', 'li1', 'n1g', 'an1d', 'a1b', '1m', '1tio', 'x1c', '5nd.', '4ing.', '.re1', 'hena4', 's1s', '1q'], ['ta-ble'], 3, 3], 'hyphe-n-ation'), ('control layout', ['Pentagon', ['hy3ph', '.re1', 'n1g', 'ex1', 's1s', '5nd.', '.un1', 'ca1t', 'o2n', '1m', 'io3n.', 'an1d', '1ca', 'pu2', '2mp', 'b2l', 'p2h', 'x1c', 'l1l', '2io', 'a2n'], ['ex-cep-tion', 'mis-sis-sip-pi', 'gram-mar'], 1, 3], 'Pentagon')], [('regression: exception lookup case', ['Table', ['om1', 'ca1t', 'o2n', 'e1c', '2io', '2mp', 'a2n', 'l1l', 'io3n.', 'e2x', 'a1b', 'ter1', '.ta4', 'an1d', 'r1r', 't1t', '1ca', 'pu2', 'n1g', '1tio', '3ty.', '1p', 'at1'], ['ta-ble'], 2, 2], 'Ta-ble'), ('regression: exception lookup case', ['Exception', ['ex1', '2io', 'io3n.', 'x1c', 'pu2', 'at1', '1m', 'hy3ph', 'om1', 'n2at', '1na', '2mp', '1p', 'n1g', '1tio', '.un1', 'e1c', '.re1', 'c2ce', 'o2n', 'b2l', '1ca', 'l1l'], ['gram-mar', 'pro-ject', 'ex-cep-tion'], 3, 1], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['l1l', '1q', 'm1m', '2io', 'x1c', 'ment1', '1ble', 'a2n', 'gr2', 'e1c', 'li1', 'e2x', 's1s', '.un1', '1ca'], ['pro-ject'], 1, 1], 'pro-ject'), ('partial-repair probe', ['project', ['e1c', 'li1', 'b2l', 'r1r', 'at1', '3ty.', 's1s', 'p2h', 'a1b', 'ter1', 't1t', 'hy3ph', 'om1', 'gr2', 'io3n.', 'hena4', 'a2n', '2mp', 'x1c', 'ex1', 'e2x', 'hen5at', '1tio', '.un1', '4ing.', 'n1g', 'pu2', 'ment1', '1q', 'he2n', '.ta4', '1ca'], ['gram-mar', 'ex-cep-tion', 'pro-ject'], 3, 2], 'pro-ject'), ('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', ['computer', ['hy3ph', 'n1g', 'om1', 'ter1', 'pu2', 'l1l', 'e2x', '1na', 'e1c', 'io3n.', 'hen5at', 'ca1t', '1q', '4ing.', 'hena4', 'ex1', '1p', 't1t', 'p2h', '.ta4', '1tio', 'ment1', 'li1', '2mp', 'n2at', 'x1c', 'o2n', 's1s', 'he2n', '1m', 'a2n', 'c2ce', '.un1', 'm1m', 'an1d', 'con1', '1ca', 'gr2', 'a1b', 'b2l', '2io', '.re1', '3ty.', 'r1r', '1ble', '5nd.', 'at1'], ['pro-ject'], 1, 1], 'com-puter'), ('control layout', ['connection', ['1ble', 'p2h', 'ex1', 'hena4', 'an1d', '.ta4', '1na', 'b2l', 'li1', 'gr2', 'e2x', 'at1', 'pu2', 'l1l', 't1t', '3ty.', 'hen5at', 'ment1', '1ca', '.re1', '1p', 'ter1', 'con1', 'he2n', 'c2ce', 'e1c', 'n2at', 'om1', 'ca1t', '4ing.', 'a1b', 'n1g', 'm1m', 'r1r', 'hy3ph'], [], 1, 2], 'con-ne-ction')], [('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'), ('regression: exception lookup case', ['Exception', ['hena4', '1q', 'hy3ph', 'ter1', 'at1', 'e1c', '1na', '5nd.', 'b2l', 'ment1', '1p', '.ta4', 'ca1t', 'ex1', 't1t', 'a2n', '1tio', '4ing.', '2io', 'p2h', 'o2n', 'e2x', 'm1m', 'pu2', 'he2n', 'li1', 'a1b'], ['ex-cep-tion', 'gram-mar'], 1, 2], 'Ex-cep-tion'), ('regression: exception lookup case', ['Table', ['li1', '2io', 'hy3ph', '4ing.', 'at1', 'm1m', 'om1', 'ex1', 'p2h', 'e2x', 'a2n', '1q', '1na', 'n2at', 'r1r', 'hena4', '1p', 'an1d', 'gr2', '3ty.', 'ca1t', 'n1g', 'x1c', 'c2ce', '.re1', 'io3n.', '1m', 'hen5at', 'e1c', 'ter1', 'l1l', 'b2l', 'pu2'], ['ta-ble'], 2, 3], 'Ta-ble'), ('partial-repair probe', ['grammar', ['ex1', 'ter1', 'hy3ph', 'gr2', 's1s', 'e2x', 'c2ce', 'li1', 'a2n', 'ment1', '1ble', '.un1', 'an1d', 'p2h', '1p', 'x1c', 'con1', '5nd.', '2io', 'hena4', 'b2l', '1na', 'om1', 'ca1t', '2mp', '1tio', '1q', 'io3n.', '3ty.'], ['pro-ject', 'ta-ble', 'gram-mar'], 1, 1], 'gram-mar'), ('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'), ('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'), ('control layout', ['hyphenation', ['io3n.', 'ment1', '1p', 'n1g', 'b2l', 'e1c', 'p2h', 'n2at', '2mp', '1na', 'a2n', 'ex1', 'o2n', 'an1d', '3ty.', 'a1b', 'hena4', 'hen5at', 'r1r', 'gr2', 's1s', '1ble', 'he2n', 'e2x', '1ca', '2io', 'x1c', '4ing.', 'm1m', 'con1'], ['ta-ble'], 3, 2], 'hyphen-ation'), ('control layout', ['Unexpected', ['m1m', 'io3n.', '.ta4', 'li1', 'he2n', 'x1c', 'e2x', 'con1', '5nd.', 'a1b', '1ca', '2mp', 'c2ce', 'p2h', 'e1c', '1tio', '2io', '1na', 's1s', '1p', 'hy3ph', 'at1', 'pu2', 'b2l', '.un1', 'om1', 'r1r', 'ex1', 'hen5at', 'ter1', '1q', 'n1g', 'l1l', '.re1', '3ty.', 'an1d', '4ing.', 'n2at', 't1t', 'o2n', 'hena4', '1ble', 'a2n', '1m', 'ca1t', 'gr2'], [], 2, 3], 'Un-ex-pe-cted')], [('regression: exception lookup case', ['Mississippi', ['5nd.', '4ing.', 'om1', '2mp', 'r1r', 'n2at', '2io', '1ca'], ['mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('regression: exception lookup case', ['Exception', ['s1s', 'con1', 'c2ce', 'pu2', 'x1c', '1m', '2mp', 'a1b', 'n2at', '.re1', '.ta4', '3ty.', 'n1g', 'ment1', 'p2h', 'hy3ph', 'ter1', 'hena4', 'b2l'], ['ex-cep-tion'], 2, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['x1c', '1tio', 'io3n.', 'gr2', '2io', 'o2n', 'ment1', '.re1', 'l1l', 'con1', 'n2at', 'hen5at', 'hena4', 'ter1', '.ta4', 'r1r', '1p', '.un1', 'ca1t', 'e1c', 'c2ce', '5nd.', 'b2l', '1na', 'e2x', 'm1m', 'a1b', '2mp', '3ty.', 'p2h', '1m', 't1t', 'an1d', 'n1g', 'pu2', 'ex1'], ['ta-ble', 'ex-cep-tion'], 3, 1], 'ta-ble'), ('partial-repair probe', ['grammar', ['1ble', 'e2x', '2io', 'li1', '.un1', '.re1', '5nd.', '1m', '1p', '1ca', '1na', '1q', '1tio', 'n2at', 'e1c', 'om1', 'at1', 'io3n.', 'ter1', '2mp', '4ing.', 'con1', 'ment1', 'r1r', 'pu2', 'p2h', 'hy3ph', 't1t', 'm1m', 'ex1', 'l1l', 'b2l', 's1s', 'c2ce', 'n1g', 'he2n', 'hena4', 'gr2', '.ta4', 'an1d', 'ca1t', 'o2n', 'x1c', '3ty.', 'a2n'], ['gram-mar', 'ex-cep-tion', 'mis-sis-sip-pi'], 3, 3], 'gram-mar'), ('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'), ('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', ['table', ['ca1t', '1ble', 'n2at', 'con1', '.re1', 's1s', 'b2l', 'a2n', 'x1c', 't1t', 'r1r', '5nd.', 'o2n'], ['ex-cep-tion'], 2, 2], 'ta-ble'), ('control layout', ['battle', ['1ca', 'x1c', 'an1d', '1m', 's1s', 'he2n', '5nd.', 'b2l', 'ex1', 'c2ce', 'li1', 't1t', '1na', 'hen5at', 'gr2', 'hy3ph', '1p', 'p2h', '2io', 'r1r', '.re1', 'e2x', 'om1', 'ter1', 'a1b', 'at1', 'io3n.', 'pu2', 'n2at', 'm1m', 'con1', '4ing.', '1ble', '.un1', 'ca1t', 'l1l', '2mp', '3ty.', 'n1g', 'ment1', '1q'], ['ta-ble'], 1, 1], 'bat-tle')]]
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)

prompt:
Capitalised words ignore their hyphenation exceptions.

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.

split: open-access


broken_source:
"""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 e
    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 = [[('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'), ('regression: exception letter case', ['Exception', ['he2n', '2io', 'n1g', '1p', 'ca1t', '2mp', 'l1l', 'li1', 'o2n', 'b2l', 's1s', '1na', '.re1', 'at1', 'pu2', 't1t', 'n2at', '1tio', '1ble', 'hen5at', 'con1', 'a2n', '1q', '5nd.', 'hena4', 'ex1', 'x1c', 'ter1', 'e2x', 'io3n.', '.un1', '3ty.', 'om1', '.ta4', 'a1b', 'ment1', 'c2ce', 'm1m', 'hy3ph', '4ing.', '1ca', 'r1r', 'an1d', '1m', 'e1c', 'gr2', 'p2h'], ['mis-sis-sip-pi', 'ex-cep-tion', 'gram-mar'], 2, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['5nd.', '2mp', 'an1d', 'om1', 'hen5at', 'io3n.', '2io', 'p2h', 'm1m', 'ter1', '1ca', 'hena4', 't1t', 'r1r', '1q', 'c2ce', 'gr2', 'at1', '3ty.', 'l1l', '4ing.', 'ca1t'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'ta-ble'), ('partial-repair probe', ['project', ['hy3ph', 'x1c', '.un1', '.ta4', 'con1', 'ment1', 'pu2', 'l1l', 'ca1t', 'a2n', '3ty.', 'hen5at', 'e2x', 's1s', 'gr2', 'a1b', 'e1c', 'o2n', 'hena4', '1ca', 'c2ce', '1q', 'n1g', 't1t', 'io3n.', 'li1', '1p', '2mp', 'ex1', '4ing.', 'b2l', 'om1', '1ble', 'p2h', 'n2at', 'm1m', '.re1', '1na', '5nd.', 'an1d', '2io', 'ter1', '1m', 'he2n', '1tio'], ['pro-ject', 'ta-ble'], 1, 2], 'pro-ject'), ('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'), ('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'), ('control layout', ['Pentagon', ['.un1', '.ta4', 'b2l', 'x1c', '3ty.', 'hena4', 'con1', '.re1', '2io', 'e1c', '2mp', '1tio', 'he2n', 'a1b', '1na'], ['mis-sis-sip-pi', 'pro-ject'], 2, 1], 'Pentagon'), ('control layout', ['terminal', ['1p', 'gr2', '.ta4', '.re1', 'ter1', 'n2at', 'pu2', 'l1l', 'e2x', 'm1m', 'io3n.', 'a2n', '2mp', 'hena4', 'ca1t', 't1t', 'li1', '5nd.', 'o2n', 'x1c', '1m', 'e1c', 'r1r', 'hen5at', '.un1', '2io', 'at1', 'ment1', 'ex1', '1ble', '1na', 'om1', 's1s', 'c2ce', '1tio', 'he2n', 'con1', 'an1d', 'hy3ph', '1ca', '4ing.', 'p2h'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 1, 1], 'ter-mi-nal')], [('regression: exception letter case', ['Exception', ['2mp', 'om1', 'a2n', 'n2at', '1na', '1tio', 'c2ce', 'at1', 'x1c', 'hy3ph', 'e2x', '2io', 'gr2', 'r1r', 'li1', '.re1', 'hena4', '1ca', 's1s', 'p2h', 'ex1', '1p', 'ment1', 'con1', 'a1b', 'he2n', 'l1l', 'hen5at', '.un1', 'ter1', '1ble', 'io3n.', 'm1m', '5nd.', '1m', '4ing.', '1q'], ['mis-sis-sip-pi', 'ex-cep-tion'], 2, 3], 'Ex-cep-tion'), ('regression: exception letter case', ['Table', ['1p', 'a1b', 'r1r', 'con1', '2io', 'ter1', '.ta4', '3ty.', 'm1m', 't1t', '.un1', 'ca1t', '1m', '1tio', 'hen5at', 'n1g', 'hy3ph', 'ex1', 'e1c', 'ment1', '1ca', 'he2n'], ['mis-sis-sip-pi', 'ta-ble', 'ex-cep-tion'], 1, 2], 'Ta-ble'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('partial-repair probe', ['grammar', ['s1s', 'r1r', '5nd.', 'c2ce', 'a1b', 'hena4', 'o2n', 'b2l', 'l1l', 'x1c', 't1t', 'p2h', '1p', 'm1m', 'con1', 'io3n.', '3ty.', '1tio', 'ment1', 'e2x', 'ex1', '1m', '4ing.', 'at1', 'om1', 'an1d', 'ca1t', '1q', '1ble', 'gr2', '2io', 'hen5at', '1na', 'e1c', '2mp', '.un1'], ['ta-ble', 'mis-sis-sip-pi', 'gram-mar'], 3, 1], 'gram-mar'), ('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'), ('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'), ('control layout', ['Categories', ['at1', 'hena4', 'a1b', 'con1', 'li1', 'pu2', '2io', 'm1m', 'n2at', 'a2n', '.re1'], ['gram-mar'], 3, 2], 'Cat-egories'), ('control layout', ['understand', ['.ta4', '2mp', 'e2x', '2io', 'gr2', 'io3n.', 'a2n', '4ing.', 'he2n', 'p2h', 'b2l', '1m', 'o2n', 'con1', 'n1g', 'e1c', 'ca1t', '1p', 'ment1', 'n2at', 'om1', 'x1c', 'hen5at', 'ter1', 'm1m', 's1s', 'c2ce', '5nd.', '.un1', 'at1', '1na'], ['gram-mar'], 2, 3], 'un-derstand')], [('regression: exception letter case', ['Mississippi', ['l1l', 'n1g', 'pu2', 's1s', '2io', 'hen5at', '1q', '.un1', 'p2h', '5nd.', 'b2l', '2mp', 'ex1', 't1t', 'con1', 'at1', 'gr2', 'm1m', 'e2x', 'a2n', 'ter1', 'r1r', 'e1c', '.ta4', 'c2ce', 'io3n.', 'x1c', 'o2n', 'ment1', 'hy3ph', 'n2at'], ['mis-sis-sip-pi'], 1, 2], 'Mis-sis-sip-pi'), ('regression: exception letter case', ['Mississippi', ['om1', 'an1d', 'li1', '1ca', '.re1', 'r1r', '1tio', 'con1', 'n2at', 'b2l', 'pu2', 'c2ce', 'at1', 'gr2', '3ty.', '1ble', '1na', 'io3n.', 'n1g', '4ing.', 's1s', 'e1c', 'hy3ph', '5nd.', '2io', '1q', 'm1m', 'ment1', 'l1l', 't1t', 'hen5at', 'x1c', '1p', 'e2x', '1m', 'o2n', '.un1', 'ter1'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('partial-repair probe', ['grammar', ['t1t', 'con1', 'ter1', '2mp', 'ex1', '1q', 'e1c', '.ta4', 'li1', 'e2x', 'm1m', '1ble', 'b2l', 'pu2', 'n2at', 'r1r', 'l1l', 'c2ce', 'gr2', 'ment1', 'a2n', '1m', '1ca', '3ty.', 'hena4', 'at1', 'he2n', 'a1b', 'om1', '4ing.', '5nd.', 's1s', '1na', 'hen5at', '2io', 'io3n.', 'x1c', 'n1g', 'an1d', 'p2h', '1tio', '.un1', 'hy3ph', '.re1', 'ca1t', 'o2n'], ['gram-mar', 'ex-cep-tion', 'pro-ject'], 3, 2], 'gram-mar'), ('partial-repair probe', ['table', ['x1c', '1tio', 'io3n.', 'gr2', '2io', 'o2n', 'ment1', '.re1', 'l1l', 'con1', 'n2at', 'hen5at', 'hena4', 'ter1', '.ta4', 'r1r', '1p', '.un1', 'ca1t', 'e1c', 'c2ce', '5nd.', 'b2l', '1na', 'e2x', 'm1m', 'a1b', '2mp', '3ty.', 'p2h', '1m', 't1t', 'an1d', 'n1g', 'pu2', 'ex1'], ['ta-ble', 'ex-cep-tion'], 3, 1], 'ta-ble'), ('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'), ('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', ['hyphenation', ['hy3ph', 'pu2', '1p', '3ty.', 'p2h', '2io', 'm1m', 'ex1', 'n2at', 'con1', 'a2n', '1na', 'e2x', '.ta4', 'at1', 'hen5at', 'c2ce', 'li1', 'n1g', 'an1d', 'a1b', '1m', '1tio', 'x1c', '5nd.', '4ing.', '.re1', 'hena4', 's1s', '1q'], ['ta-ble'], 3, 3], 'hyphe-n-ation'), ('control layout', ['understand', ['hy3ph', 'ex1', 'p2h', 'e2x', 'm1m', 'hena4', 'an1d', '4ing.', 't1t', 'hen5at', 'a1b', 's1s', 'l1l', '.un1', 'n2at'], ['mis-sis-sip-pi', 'ex-cep-tion', 'pro-ject'], 2, 1], 'un-derstan-d')], [('regression: exception letter case', ['Table', ['li1', '2io', 'hy3ph', '4ing.', 'at1', 'm1m', 'om1', 'ex1', 'p2h', 'e2x', 'a2n', '1q', '1na', 'n2at', 'r1r', 'hena4', '1p', 'an1d', 'gr2', '3ty.', 'ca1t', 'n1g', 'x1c', 'c2ce', '.re1', 'io3n.', '1m', 'hen5at', 'e1c', 'ter1', 'l1l', 'b2l', 'pu2'], ['ta-ble'], 2, 3], 'Ta-ble'), ('regression: exception letter case', ['Exception', ['r1r', '1tio', 'hena4', '1m', 'l1l', 'c2ce', 'ca1t', 'e1c', 'li1', 'p2h', 'hen5at', 'he2n', 'e2x', '.un1', '1ca', '1ble', 'ment1', '5nd.', '4ing.', 't1t', 'ex1', 'io3n.', 'con1', '1na', '1p', 'a1b', '3ty.', 's1s', '.re1', 'gr2', 'o2n', 'm1m', 'x1c', 'pu2', 'a2n', 'b2l', '2mp', 'n1g', 'at1', 'hy3ph', 'om1', '.ta4', 'an1d'], ['mis-sis-sip-pi', 'ex-cep-tion'], 1, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['1p', '2io', 'he2n', 'at1', 'ca1t', '3ty.', 'n1g', 'hen5at', '5nd.'], ['ta-ble', 'ex-cep-tion'], 1, 1], 'ta-ble'), ('partial-repair probe', ['table', ['5nd.', '2mp', 'an1d', 'om1', 'hen5at', 'io3n.', '2io', 'p2h', 'm1m', 'ter1', '1ca', 'hena4', 't1t', 'r1r', '1q', 'c2ce', 'gr2', 'at1', '3ty.', 'l1l', '4ing.', 'ca1t'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'ta-ble'), ('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'), ('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'), ('control layout', ['Categories', ['hena4', '3ty.', 'con1', 'e2x', 'n2at', 'he2n', '1ca', '.un1', 'gr2', 'at1', '1na', 'm1m', 'b2l', '1ble', 'pu2', 'c2ce', 'om1', 'o2n', 'p2h', 's1s', 'l1l', '.re1', '1m', '2io', 'hen5at', 'ca1t', 'e1c', '1q', '.ta4', 'li1', 'io3n.', 'ter1', 'hy3ph', 'ex1', 'a1b', '2mp'], ['gram-mar'], 2, 3], 'Ca-t-egories'), ('control layout', ['Paragraph', ['hen5at', 'at1', 'gr2', 'ex1', 'ter1', '1m', 'l1l', 'ment1', 'io3n.', 'a1b', '3ty.'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 1, 3], 'Paragraph')], [('regression: exception letter case', ['Mississippi', ['ter1', 'o2n', '.ta4', 'r1r', 'pu2', 'hy3ph', 'c2ce', '1p', 'ex1', 'gr2', '5nd.', 'm1m', 'b2l', 'a1b', 'con1', '1ca', '.re1', 'io3n.', 'a2n', 'om1', 'e2x', 'hena4', 'l1l', 'ca1t', '3ty.'], ['mis-sis-sip-pi', 'pro-ject', 'ta-ble'], 3, 3], 'Mis-sis-sip-pi'), ('regression: exception letter case', ['Exception', ['.ta4', '2mp', 'ca1t', 'pu2', 'gr2', 'm1m', 'li1', 't1t', 'p2h', 'b2l', 'hen5at', 'hena4', 'o2n', 'n1g', 'con1', '5nd.', '.re1', '3ty.', 'ment1', 'x1c', '1na', 's1s', 'an1d', 'l1l', 'io3n.', 'c2ce', 'a1b', 'he2n', 'ter1', '1tio', 'n2at', 'a2n', '1ca', 'ex1', '2io', '1ble', 'e2x', '4ing.', 'e1c', '.un1', 'hy3ph', '1p', '1q', 'r1r', 'at1', '1m', 'om1'], ['ex-cep-tion', 'ta-ble', 'gram-mar'], 2, 3], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['hy3ph', 'x1c', '.un1', '.ta4', 'con1', 'ment1', 'pu2', 'l1l', 'ca1t', 'a2n', '3ty.', 'hen5at', 'e2x', 's1s', 'gr2', 'a1b', 'e1c', 'o2n', 'hena4', '1ca', 'c2ce', '1q', 'n1g', 't1t', 'io3n.', 'li1', '1p', '2mp', 'ex1', '4ing.', 'b2l', 'om1', '1ble', 'p2h', 'n2at', 'm1m', '.re1', '1na', '5nd.', 'an1d', '2io', 'ter1', '1m', 'he2n', '1tio'], ['pro-ject', 'ta-ble'], 1, 2], 'pro-ject'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('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', ['Commitment', ['3ty.', '4ing.', '1ca', '5nd.', 's1s', 'a1b', '.un1', 'n2at', 'pu2', 'a2n', 'x1c', 'io3n.', 'ex1', 'n1g', '2io', 'b2l', 'at1', '1na', 'li1', 'c2ce', '1m', 'r1r', 'm1m', 'gr2', 'e2x', 'p2h', 'con1', 'ment1', 'he2n', 'ter1', 'hena4', '1p', 'an1d', 'e1c', '1tio', 't1t', '1q', '1ble', '.re1', 'hy3ph', 'om1', '2mp', 'ca1t', 'o2n', 'l1l', 'hen5at', '.ta4'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 3, 3], 'Com-mit-ment'), ('control layout', ['table', ['.un1', 'm1m', 'hena4', 'o2n', '1m', 'hen5at', 'li1', 'a2n', 'c2ce', 'b2l', '1ca', 'gr2', '.re1', 'pu2', '1q', '3ty.', 'e2x', '1p', 'an1d', 'l1l', 'at1', 'ex1', '1ble', 'io3n.', 'n2at', 'ca1t', 'ter1', 'om1', '1na', '1tio', 'x1c', '2mp', '4ing.', 'ment1', 'a1b', 'p2h', '5nd.', 'n1g', '.ta4', 'con1', 't1t', 'he2n', 'hy3ph', 'r1r', 's1s', 'e1c', '2io'], ['pro-ject'], 1, 1], 'table')]]
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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

source:
"""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 e.capitalize()
    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 = [[('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'), ('regression: exception letter case', ['Exception', ['he2n', '2io', 'n1g', '1p', 'ca1t', '2mp', 'l1l', 'li1', 'o2n', 'b2l', 's1s', '1na', '.re1', 'at1', 'pu2', 't1t', 'n2at', '1tio', '1ble', 'hen5at', 'con1', 'a2n', '1q', '5nd.', 'hena4', 'ex1', 'x1c', 'ter1', 'e2x', 'io3n.', '.un1', '3ty.', 'om1', '.ta4', 'a1b', 'ment1', 'c2ce', 'm1m', 'hy3ph', '4ing.', '1ca', 'r1r', 'an1d', '1m', 'e1c', 'gr2', 'p2h'], ['mis-sis-sip-pi', 'ex-cep-tion', 'gram-mar'], 2, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['5nd.', '2mp', 'an1d', 'om1', 'hen5at', 'io3n.', '2io', 'p2h', 'm1m', 'ter1', '1ca', 'hena4', 't1t', 'r1r', '1q', 'c2ce', 'gr2', 'at1', '3ty.', 'l1l', '4ing.', 'ca1t'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'ta-ble'), ('partial-repair probe', ['project', ['hy3ph', 'x1c', '.un1', '.ta4', 'con1', 'ment1', 'pu2', 'l1l', 'ca1t', 'a2n', '3ty.', 'hen5at', 'e2x', 's1s', 'gr2', 'a1b', 'e1c', 'o2n', 'hena4', '1ca', 'c2ce', '1q', 'n1g', 't1t', 'io3n.', 'li1', '1p', '2mp', 'ex1', '4ing.', 'b2l', 'om1', '1ble', 'p2h', 'n2at', 'm1m', '.re1', '1na', '5nd.', 'an1d', '2io', 'ter1', '1m', 'he2n', '1tio'], ['pro-ject', 'ta-ble'], 1, 2], 'pro-ject'), ('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'), ('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'), ('control layout', ['Pentagon', ['.un1', '.ta4', 'b2l', 'x1c', '3ty.', 'hena4', 'con1', '.re1', '2io', 'e1c', '2mp', '1tio', 'he2n', 'a1b', '1na'], ['mis-sis-sip-pi', 'pro-ject'], 2, 1], 'Pentagon'), ('control layout', ['terminal', ['1p', 'gr2', '.ta4', '.re1', 'ter1', 'n2at', 'pu2', 'l1l', 'e2x', 'm1m', 'io3n.', 'a2n', '2mp', 'hena4', 'ca1t', 't1t', 'li1', '5nd.', 'o2n', 'x1c', '1m', 'e1c', 'r1r', 'hen5at', '.un1', '2io', 'at1', 'ment1', 'ex1', '1ble', '1na', 'om1', 's1s', 'c2ce', '1tio', 'he2n', 'con1', 'an1d', 'hy3ph', '1ca', '4ing.', 'p2h'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 1, 1], 'ter-mi-nal')], [('regression: exception letter case', ['Exception', ['2mp', 'om1', 'a2n', 'n2at', '1na', '1tio', 'c2ce', 'at1', 'x1c', 'hy3ph', 'e2x', '2io', 'gr2', 'r1r', 'li1', '.re1', 'hena4', '1ca', 's1s', 'p2h', 'ex1', '1p', 'ment1', 'con1', 'a1b', 'he2n', 'l1l', 'hen5at', '.un1', 'ter1', '1ble', 'io3n.', 'm1m', '5nd.', '1m', '4ing.', '1q'], ['mis-sis-sip-pi', 'ex-cep-tion'], 2, 3], 'Ex-cep-tion'), ('regression: exception letter case', ['Table', ['1p', 'a1b', 'r1r', 'con1', '2io', 'ter1', '.ta4', '3ty.', 'm1m', 't1t', '.un1', 'ca1t', '1m', '1tio', 'hen5at', 'n1g', 'hy3ph', 'ex1', 'e1c', 'ment1', '1ca', 'he2n'], ['mis-sis-sip-pi', 'ta-ble', 'ex-cep-tion'], 1, 2], 'Ta-ble'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('partial-repair probe', ['grammar', ['s1s', 'r1r', '5nd.', 'c2ce', 'a1b', 'hena4', 'o2n', 'b2l', 'l1l', 'x1c', 't1t', 'p2h', '1p', 'm1m', 'con1', 'io3n.', '3ty.', '1tio', 'ment1', 'e2x', 'ex1', '1m', '4ing.', 'at1', 'om1', 'an1d', 'ca1t', '1q', '1ble', 'gr2', '2io', 'hen5at', '1na', 'e1c', '2mp', '.un1'], ['ta-ble', 'mis-sis-sip-pi', 'gram-mar'], 3, 1], 'gram-mar'), ('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'), ('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'), ('control layout', ['Categories', ['at1', 'hena4', 'a1b', 'con1', 'li1', 'pu2', '2io', 'm1m', 'n2at', 'a2n', '.re1'], ['gram-mar'], 3, 2], 'Cat-egories'), ('control layout', ['understand', ['.ta4', '2mp', 'e2x', '2io', 'gr2', 'io3n.', 'a2n', '4ing.', 'he2n', 'p2h', 'b2l', '1m', 'o2n', 'con1', 'n1g', 'e1c', 'ca1t', '1p', 'ment1', 'n2at', 'om1', 'x1c', 'hen5at', 'ter1', 'm1m', 's1s', 'c2ce', '5nd.', '.un1', 'at1', '1na'], ['gram-mar'], 2, 3], 'un-derstand')], [('regression: exception letter case', ['Mississippi', ['l1l', 'n1g', 'pu2', 's1s', '2io', 'hen5at', '1q', '.un1', 'p2h', '5nd.', 'b2l', '2mp', 'ex1', 't1t', 'con1', 'at1', 'gr2', 'm1m', 'e2x', 'a2n', 'ter1', 'r1r', 'e1c', '.ta4', 'c2ce', 'io3n.', 'x1c', 'o2n', 'ment1', 'hy3ph', 'n2at'], ['mis-sis-sip-pi'], 1, 2], 'Mis-sis-sip-pi'), ('regression: exception letter case', ['Mississippi', ['om1', 'an1d', 'li1', '1ca', '.re1', 'r1r', '1tio', 'con1', 'n2at', 'b2l', 'pu2', 'c2ce', 'at1', 'gr2', '3ty.', '1ble', '1na', 'io3n.', 'n1g', '4ing.', 's1s', 'e1c', 'hy3ph', '5nd.', '2io', '1q', 'm1m', 'ment1', 'l1l', 't1t', 'hen5at', 'x1c', '1p', 'e2x', '1m', 'o2n', '.un1', 'ter1'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 3, 2], 'Mis-sis-sip-pi'), ('partial-repair probe', ['grammar', ['t1t', 'con1', 'ter1', '2mp', 'ex1', '1q', 'e1c', '.ta4', 'li1', 'e2x', 'm1m', '1ble', 'b2l', 'pu2', 'n2at', 'r1r', 'l1l', 'c2ce', 'gr2', 'ment1', 'a2n', '1m', '1ca', '3ty.', 'hena4', 'at1', 'he2n', 'a1b', 'om1', '4ing.', '5nd.', 's1s', '1na', 'hen5at', '2io', 'io3n.', 'x1c', 'n1g', 'an1d', 'p2h', '1tio', '.un1', 'hy3ph', '.re1', 'ca1t', 'o2n'], ['gram-mar', 'ex-cep-tion', 'pro-ject'], 3, 2], 'gram-mar'), ('partial-repair probe', ['table', ['x1c', '1tio', 'io3n.', 'gr2', '2io', 'o2n', 'ment1', '.re1', 'l1l', 'con1', 'n2at', 'hen5at', 'hena4', 'ter1', '.ta4', 'r1r', '1p', '.un1', 'ca1t', 'e1c', 'c2ce', '5nd.', 'b2l', '1na', 'e2x', 'm1m', 'a1b', '2mp', '3ty.', 'p2h', '1m', 't1t', 'an1d', 'n1g', 'pu2', 'ex1'], ['ta-ble', 'ex-cep-tion'], 3, 1], 'ta-ble'), ('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'), ('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', ['hyphenation', ['hy3ph', 'pu2', '1p', '3ty.', 'p2h', '2io', 'm1m', 'ex1', 'n2at', 'con1', 'a2n', '1na', 'e2x', '.ta4', 'at1', 'hen5at', 'c2ce', 'li1', 'n1g', 'an1d', 'a1b', '1m', '1tio', 'x1c', '5nd.', '4ing.', '.re1', 'hena4', 's1s', '1q'], ['ta-ble'], 3, 3], 'hyphe-n-ation'), ('control layout', ['understand', ['hy3ph', 'ex1', 'p2h', 'e2x', 'm1m', 'hena4', 'an1d', '4ing.', 't1t', 'hen5at', 'a1b', 's1s', 'l1l', '.un1', 'n2at'], ['mis-sis-sip-pi', 'ex-cep-tion', 'pro-ject'], 2, 1], 'un-derstan-d')], [('regression: exception letter case', ['Table', ['li1', '2io', 'hy3ph', '4ing.', 'at1', 'm1m', 'om1', 'ex1', 'p2h', 'e2x', 'a2n', '1q', '1na', 'n2at', 'r1r', 'hena4', '1p', 'an1d', 'gr2', '3ty.', 'ca1t', 'n1g', 'x1c', 'c2ce', '.re1', 'io3n.', '1m', 'hen5at', 'e1c', 'ter1', 'l1l', 'b2l', 'pu2'], ['ta-ble'], 2, 3], 'Ta-ble'), ('regression: exception letter case', ['Exception', ['r1r', '1tio', 'hena4', '1m', 'l1l', 'c2ce', 'ca1t', 'e1c', 'li1', 'p2h', 'hen5at', 'he2n', 'e2x', '.un1', '1ca', '1ble', 'ment1', '5nd.', '4ing.', 't1t', 'ex1', 'io3n.', 'con1', '1na', '1p', 'a1b', '3ty.', 's1s', '.re1', 'gr2', 'o2n', 'm1m', 'x1c', 'pu2', 'a2n', 'b2l', '2mp', 'n1g', 'at1', 'hy3ph', 'om1', '.ta4', 'an1d'], ['mis-sis-sip-pi', 'ex-cep-tion'], 1, 2], 'Ex-cep-tion'), ('partial-repair probe', ['table', ['1p', '2io', 'he2n', 'at1', 'ca1t', '3ty.', 'n1g', 'hen5at', '5nd.'], ['ta-ble', 'ex-cep-tion'], 1, 1], 'ta-ble'), ('partial-repair probe', ['table', ['5nd.', '2mp', 'an1d', 'om1', 'hen5at', 'io3n.', '2io', 'p2h', 'm1m', 'ter1', '1ca', 'hena4', 't1t', 'r1r', '1q', 'c2ce', 'gr2', 'at1', '3ty.', 'l1l', '4ing.', 'ca1t'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'ta-ble'), ('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'), ('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'), ('control layout', ['Categories', ['hena4', '3ty.', 'con1', 'e2x', 'n2at', 'he2n', '1ca', '.un1', 'gr2', 'at1', '1na', 'm1m', 'b2l', '1ble', 'pu2', 'c2ce', 'om1', 'o2n', 'p2h', 's1s', 'l1l', '.re1', '1m', '2io', 'hen5at', 'ca1t', 'e1c', '1q', '.ta4', 'li1', 'io3n.', 'ter1', 'hy3ph', 'ex1', 'a1b', '2mp'], ['gram-mar'], 2, 3], 'Ca-t-egories'), ('control layout', ['Paragraph', ['hen5at', 'at1', 'gr2', 'ex1', 'ter1', '1m', 'l1l', 'ment1', 'io3n.', 'a1b', '3ty.'], ['ta-ble', 'pro-ject', 'mis-sis-sip-pi'], 1, 3], 'Paragraph')], [('regression: exception letter case', ['Mississippi', ['ter1', 'o2n', '.ta4', 'r1r', 'pu2', 'hy3ph', 'c2ce', '1p', 'ex1', 'gr2', '5nd.', 'm1m', 'b2l', 'a1b', 'con1', '1ca', '.re1', 'io3n.', 'a2n', 'om1', 'e2x', 'hena4', 'l1l', 'ca1t', '3ty.'], ['mis-sis-sip-pi', 'pro-ject', 'ta-ble'], 3, 3], 'Mis-sis-sip-pi'), ('regression: exception letter case', ['Exception', ['.ta4', '2mp', 'ca1t', 'pu2', 'gr2', 'm1m', 'li1', 't1t', 'p2h', 'b2l', 'hen5at', 'hena4', 'o2n', 'n1g', 'con1', '5nd.', '.re1', '3ty.', 'ment1', 'x1c', '1na', 's1s', 'an1d', 'l1l', 'io3n.', 'c2ce', 'a1b', 'he2n', 'ter1', '1tio', 'n2at', 'a2n', '1ca', 'ex1', '2io', '1ble', 'e2x', '4ing.', 'e1c', '.un1', 'hy3ph', '1p', '1q', 'r1r', 'at1', '1m', 'om1'], ['ex-cep-tion', 'ta-ble', 'gram-mar'], 2, 3], 'Ex-cep-tion'), ('partial-repair probe', ['project', ['hy3ph', 'x1c', '.un1', '.ta4', 'con1', 'ment1', 'pu2', 'l1l', 'ca1t', 'a2n', '3ty.', 'hen5at', 'e2x', 's1s', 'gr2', 'a1b', 'e1c', 'o2n', 'hena4', '1ca', 'c2ce', '1q', 'n1g', 't1t', 'io3n.', 'li1', '1p', '2mp', 'ex1', '4ing.', 'b2l', 'om1', '1ble', 'p2h', 'n2at', 'm1m', '.re1', '1na', '5nd.', 'an1d', '2io', 'ter1', '1m', 'he2n', '1tio'], ['pro-ject', 'ta-ble'], 1, 2], 'pro-ject'), ('partial-repair probe', ['grammar', ['io3n.', 'n1g', '3ty.', 'm1m', 'gr2', 'a1b', 'e2x', 'pu2', 'n2at', 'r1r', '1ca', 'ca1t', '1tio', 't1t', 'o2n', '1m', '.un1', 'con1', 'om1', '5nd.', 'p2h', 'ment1', 'hena4', 'hy3ph', '.ta4', 'e1c', '.re1', 'li1', 'a2n', 'b2l', '1ble'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 3], 'gram-mar'), ('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', ['Commitment', ['3ty.', '4ing.', '1ca', '5nd.', 's1s', 'a1b', '.un1', 'n2at', 'pu2', 'a2n', 'x1c', 'io3n.', 'ex1', 'n1g', '2io', 'b2l', 'at1', '1na', 'li1', 'c2ce', '1m', 'r1r', 'm1m', 'gr2', 'e2x', 'p2h', 'con1', 'ment1', 'he2n', 'ter1', 'hena4', '1p', 'an1d', 'e1c', '1tio', 't1t', '1q', '1ble', '.re1', 'hy3ph', 'om1', '2mp', 'ca1t', 'o2n', 'l1l', 'hen5at', '.ta4'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 3, 3], 'Com-mit-ment'), ('control layout', ['table', ['.un1', 'm1m', 'hena4', 'o2n', '1m', 'hen5at', 'li1', 'a2n', 'c2ce', 'b2l', '1ca', 'gr2', '.re1', 'pu2', '1q', '3ty.', 'e2x', '1p', 'an1d', 'l1l', 'at1', 'ex1', '1ble', 'io3n.', 'n2at', 'ca1t', 'ter1', 'om1', '1na', '1tio', 'x1c', '2mp', '4ing.', 'ment1', 'a1b', 'p2h', '5nd.', 'n1g', '.ta4', 'con1', 't1t', 'he2n', 'hy3ph', 'r1r', 's1s', 'e1c', '2io'], ['pro-ject'], 1, 1], 'table')]]
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)

prompt:
Exception-driven hyphenation lowercases capitalised words.

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.

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    words, width, limit = x
    queue = [list(w) for w in words]
    lines = []
    cur = ''
    streak = 0
    k = 0
    while k < len(queue):
        syl = queue[k]
        token = ''.join(syl)
        need = len(token) if cur == '' else len(cur) + 1 + len(token)
        if need <= width:
            cur = token if cur == '' else cur + ' ' + token
            k += 1
            continue
        split = None
        if streak < limit and k < len(queue) - 1:
            for cut in range(len(syl) - 1, 0, -1):
                head = ''.join(syl[:cut]) + '-'
                room = len(head) - 1 if cur == '' else len(cur) + len(head)
                if room <= width:
                    split = cut
                    break
        if split is not None:
            head = ''.join(syl[:split]) + '-'
            lines.append(head if cur == '' else cur + ' ' + head)
            queue[k] = syl[split:]
            cur = ''
            streak += 1
        elif cur == '':
            lines.append(token)
            k += 1
            streak = 0
        else:
            lines.append(cur)
            cur, streak = '', 0
    if cur:
        lines.append(cur)
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['in', 'ter', 'na', 'tion', 'al'], ['jus', 'ti', 'fied'], ['hy', 'phen', 'a', 'tion'], ['type'], ['hy', 'phen', 'a', 'tion'], ['text']], 12, 2], ['internation-', 'al interna-', 'tional', 'justified', 'hyphenation', 'type hyphen-', 'ation text']), ('regression: hyphen glyph width', [[['line'], ['type'], ['of'], ['pa', 'ra', 'graph'], ['hy', 'phen', 'a', 'tion'], ['kern', 'ing'], ['line']], 12, 1], ['line type of', 'paragraph', 'hyphenation', 'kerning line']), ('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['break', 'ing'], ['a'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['kern', 'ing'], ['jus', 'ti', 'fied'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing']], 10, 2], ['paragraph', 'breaking a', 'column', 'setting', 'margin', 'text kern-', 'ing justi-', 'fied', 'interna-', 'tional', 'breaking']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['to'], ['in', 'ter', 'na', 'tion', 'al'], ['a'], ['mar', 'gin'], ['a'], ['text'], ['a'], ['break', 'ing']], 7, 3], ['to in-', 'terna-', 'tional', 'a mar-', 'gin a', 'text a', 'breaking']), ('control layout', [[['break', 'ing'], ['to'], ['set', 'ting'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['text']], 12, 1], ['breaking to', 'setting in-', 'ternational', 'breaking to', 'internation-', 'al text']), ('control layout', [[['jus', 'ti', 'fied'], ['type'], ['type'], ['kern', 'ing'], ['lead', 'ing']], 6, 3], ['justi-', 'fied', 'type', 'type', 'kern-', 'ing', 'leading'])], [('regression: hyphen glyph width', [[['com', 'po', 'si', 'tion'], ['of'], ['break', 'ing'], ['col', 'umn'], ['to'], ['break', 'ing'], ['pa', 'ra', 'graph'], ['of'], ['kern', 'ing'], ['to']], 11, 3], ['composition', 'of breaking', 'column to', 'breaking', 'paragraph', 'of kerning', 'to']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['line'], ['line'], ['com', 'po', 'si', 'tion'], ['jus', 'ti', 'fied'], ['to'], ['of'], ['break', 'ing'], ['break', 'ing'], ['pa', 'ra', 'graph']], 9, 2], ['leading', 'line line', 'composi-', 'tion jus-', 'tified to', 'of break-', 'ing', 'breaking', 'paragraph']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['hy', 'phen', 'a', 'tion'], ['hy', 'phen', 'a', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing'], ['hy', 'phen', 'a', 'tion'], ['text'], ['line'], ['break', 'ing'], ['of']], 11, 2], ['interna-', 'tional hy-', 'phenation', 'hyphenation', 'interna-', 'tional', 'breaking', 'hyphenation', 'text line', 'breaking of']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['hy', 'phen', 'a', 'tion'], ['com', 'po', 'si', 'tion'], ['type'], ['kern', 'ing'], ['text'], ['a'], ['a'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['to'], ['jus', 'ti', 'fied']], 14, 2], ['leading hy-', 'phenation com-', 'position type', 'kerning text a', 'a to interna-', 'tional to', 'justified']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('control layout', [[['mar', 'gin'], ['pa', 'ra', 'graph'], ['jus', 'ti', 'fied'], ['type'], ['line'], ['lead', 'ing']], 8, 3], ['margin', 'para-', 'graph', 'justi-', 'fied', 'type', 'line', 'leading']), ('control layout', [[['to'], ['lead', 'ing'], ['com', 'po', 'si', 'tion'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['type']], 13, 3], ['to leading', 'composition', 'column compo-', 'sition type'])], [('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['break', 'ing'], ['a'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['kern', 'ing'], ['jus', 'ti', 'fied'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing']], 10, 2], ['paragraph', 'breaking a', 'column', 'setting', 'margin', 'text kern-', 'ing justi-', 'fied', 'interna-', 'tional', 'breaking']), ('regression: hyphen glyph width', [[['kern', 'ing'], ['com', 'po', 'si', 'tion'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['line'], ['col', 'umn'], ['hy', 'phen', 'a', 'tion'], ['set', 'ting'], ['line'], ['set', 'ting']], 11, 3], ['kerning', 'composition', 'to interna-', 'tional line', 'column hy-', 'phenation', 'setting', 'line', 'setting']), ('regression: hyphen glyph width', [[['mar', 'gin'], ['jus', 'ti', 'fied'], ['com', 'po', 'si', 'tion'], ['text'], ['of'], ['of'], ['pa', 'ra', 'graph'], ['to'], ['col', 'umn'], ['kern', 'ing'], ['kern', 'ing']], 6, 1], ['margin', 'justi-', 'fied', 'compo-', 'sition', 'text', 'of of', 'para-', 'graph', 'to', 'column', 'kern-', 'ing', 'kerning']), ('regression: hyphen glyph width', [[['to'], ['lead', 'ing'], ['to'], ['pa', 'ra', 'graph'], ['line'], ['com', 'po', 'si', 'tion'], ['break', 'ing'], ['lead', 'ing'], ['break', 'ing']], 12, 1], ['to leading', 'to paragraph', 'line compo-', 'sition', 'breaking', 'leading', 'breaking']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['mar', 'gin'], ['mar', 'gin'], ['line'], ['text'], ['hy', 'phen', 'a', 'tion'], ['set', 'ting'], ['col', 'umn'], ['line']], 8, 2], ['margin', 'margin', 'line', 'text hy-', 'phena-', 'tion', 'setting', 'column', 'line']), ('control layout', [[['text'], ['line'], ['hy', 'phen', 'a', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['set', 'ting']], 14, 2], ['text line hy-', 'phenation in-', 'ternational', 'composition', 'setting'])], [('regression: hyphen glyph width', [[['lead', 'ing'], ['lead', 'ing'], ['col', 'umn'], ['mar', 'gin'], ['col', 'umn'], ['lead', 'ing']], 14, 2], ['leading lead-', 'ing column', 'margin column', 'leading']), ('regression: hyphen glyph width', [[['line'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['set', 'ting'], ['lead', 'ing'], ['a'], ['hy', 'phen', 'a', 'tion'], ['col', 'umn'], ['lead', 'ing']], 12, 3], ['line column', 'composition', 'setting', 'leading a', 'hyphenation', 'column', 'leading']), ('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['a'], ['text'], ['hy', 'phen', 'a', 'tion'], ['hy', 'phen', 'a', 'tion'], ['pa', 'ra', 'graph'], ['hy', 'phen', 'a', 'tion'], ['jus', 'ti', 'fied'], ['to'], ['type'], ['mar', 'gin'], ['set', 'ting']], 11, 2], ['paragraph a', 'text hy-', 'phenation', 'hyphenation', 'paragraph', 'hyphenation', 'justified', 'to type', 'margin', 'setting']), ('regression: hyphen glyph width', [[['set', 'ting'], ['type'], ['of'], ['a'], ['com', 'po', 'si', 'tion'], ['com', 'po', 'si', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['col', 'umn']], 7, 3], ['setting', 'type of', 'a com-', 'posi-', 'tion', 'compo-', 'sition', 'inter-', 'nation-', 'al', 'column']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['lead', 'ing'], ['lead', 'ing'], ['text'], ['line'], ['com', 'po', 'si', 'tion']], 13, 3], ['leading lead-', 'ing text line', 'composition']), ('control layout', [[['a'], ['com', 'po', 'si', 'tion'], ['lead', 'ing'], ['mar', 'gin'], ['hy', 'phen', 'a', 'tion'], ['mar', 'gin'], ['type'], ['to']], 13, 3], ['a composition', 'leading mar-', 'gin hyphena-', 'tion margin', 'type to'])], [('regression: hyphen glyph width', [[['col', 'umn'], ['to'], ['com', 'po', 'si', 'tion'], ['com', 'po', 'si', 'tion'], ['of']], 7, 1], ['column', 'to com-', 'position', 'compo-', 'sition', 'of']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['kern', 'ing'], ['hy', 'phen', 'a', 'tion'], ['kern', 'ing'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['lead', 'ing'], ['text'], ['of'], ['jus', 'ti', 'fied'], ['type'], ['kern', 'ing']], 12, 1], ['leading', 'kerning hy-', 'phenation', 'kerning col-', 'umn', 'composition', 'leading text', 'of justified', 'type kerning']), ('regression: hyphen glyph width', [[['mar', 'gin'], ['com', 'po', 'si', 'tion'], ['of'], ['com', 'po', 'si', 'tion'], ['type']], 10, 3], ['margin', 'composi-', 'tion of', 'composi-', 'tion type']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['a'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['text'], ['jus', 'ti', 'fied'], ['break', 'ing'], ['col', 'umn'], ['hy', 'phen', 'a', 'tion'], ['pa', 'ra', 'graph']], 7, 3], ['inter-', 'nation-', 'al a', 'setting', 'margin', 'text', 'text', 'justi-', 'fied', 'break-', 'ing', 'column', 'hyphen-', 'ation', 'paragraph']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['lead', 'ing'], ['pa', 'ra', 'graph'], ['to'], ['mar', 'gin'], ['line'], ['jus', 'ti', 'fied']], 14, 3], ['leading para-', 'graph to mar-', 'gin line', 'justified']), ('control layout', [[['in', 'ter', 'na', 'tion', 'al'], ['mar', 'gin'], ['text'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['hy', 'phen', 'a', 'tion'], ['type'], ['pa', 'ra', 'graph']], 13, 3], ['international', 'margin text', 'column set-', 'ting margin', 'hyphenation', 'type', 'paragraph'])]]
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)

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    words, width, limit = x
    queue = [list(w) for w in words]
    lines = []
    cur = ''
    streak = 0
    k = 0
    while k < len(queue):
        syl = queue[k]
        token = ''.join(syl)
        need = len(token) if cur == '' else len(cur) + 1 + len(token)
        if need <= width:
            cur = token if cur == '' else cur + ' ' + token
            k += 1
            continue
        split = None
        if streak < limit and k < len(queue) - 1:
            for cut in range(len(syl) - 1, 0, -1):
                head = ''.join(syl[:cut]) + '-'
                room = len(head) if cur == '' else len(cur) + len(head)
                if room <= width:
                    split = cut
                    break
        if split is not None:
            head = ''.join(syl[:split]) + '-'
            lines.append(head if cur == '' else cur + ' ' + head)
            queue[k] = syl[split:]
            cur = ''
            streak += 1
        elif cur == '':
            lines.append(token)
            k += 1
            streak = 0
        else:
            lines.append(cur)
            cur, streak = '', 0
    if cur:
        lines.append(cur)
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['in', 'ter', 'na', 'tion', 'al'], ['jus', 'ti', 'fied'], ['hy', 'phen', 'a', 'tion'], ['type'], ['hy', 'phen', 'a', 'tion'], ['text']], 12, 2], ['internation-', 'al interna-', 'tional', 'justified', 'hyphenation', 'type hyphen-', 'ation text']), ('regression: hyphen glyph width', [[['line'], ['type'], ['of'], ['pa', 'ra', 'graph'], ['hy', 'phen', 'a', 'tion'], ['kern', 'ing'], ['line']], 12, 1], ['line type of', 'paragraph', 'hyphenation', 'kerning line']), ('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['break', 'ing'], ['a'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['kern', 'ing'], ['jus', 'ti', 'fied'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing']], 10, 2], ['paragraph', 'breaking a', 'column', 'setting', 'margin', 'text kern-', 'ing justi-', 'fied', 'interna-', 'tional', 'breaking']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['to'], ['in', 'ter', 'na', 'tion', 'al'], ['a'], ['mar', 'gin'], ['a'], ['text'], ['a'], ['break', 'ing']], 7, 3], ['to in-', 'terna-', 'tional', 'a mar-', 'gin a', 'text a', 'breaking']), ('control layout', [[['break', 'ing'], ['to'], ['set', 'ting'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['text']], 12, 1], ['breaking to', 'setting in-', 'ternational', 'breaking to', 'internation-', 'al text']), ('control layout', [[['jus', 'ti', 'fied'], ['type'], ['type'], ['kern', 'ing'], ['lead', 'ing']], 6, 3], ['justi-', 'fied', 'type', 'type', 'kern-', 'ing', 'leading'])], [('regression: hyphen glyph width', [[['com', 'po', 'si', 'tion'], ['of'], ['break', 'ing'], ['col', 'umn'], ['to'], ['break', 'ing'], ['pa', 'ra', 'graph'], ['of'], ['kern', 'ing'], ['to']], 11, 3], ['composition', 'of breaking', 'column to', 'breaking', 'paragraph', 'of kerning', 'to']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['line'], ['line'], ['com', 'po', 'si', 'tion'], ['jus', 'ti', 'fied'], ['to'], ['of'], ['break', 'ing'], ['break', 'ing'], ['pa', 'ra', 'graph']], 9, 2], ['leading', 'line line', 'composi-', 'tion jus-', 'tified to', 'of break-', 'ing', 'breaking', 'paragraph']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['hy', 'phen', 'a', 'tion'], ['hy', 'phen', 'a', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing'], ['hy', 'phen', 'a', 'tion'], ['text'], ['line'], ['break', 'ing'], ['of']], 11, 2], ['interna-', 'tional hy-', 'phenation', 'hyphenation', 'interna-', 'tional', 'breaking', 'hyphenation', 'text line', 'breaking of']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['hy', 'phen', 'a', 'tion'], ['com', 'po', 'si', 'tion'], ['type'], ['kern', 'ing'], ['text'], ['a'], ['a'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['to'], ['jus', 'ti', 'fied']], 14, 2], ['leading hy-', 'phenation com-', 'position type', 'kerning text a', 'a to interna-', 'tional to', 'justified']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('control layout', [[['mar', 'gin'], ['pa', 'ra', 'graph'], ['jus', 'ti', 'fied'], ['type'], ['line'], ['lead', 'ing']], 8, 3], ['margin', 'para-', 'graph', 'justi-', 'fied', 'type', 'line', 'leading']), ('control layout', [[['to'], ['lead', 'ing'], ['com', 'po', 'si', 'tion'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['type']], 13, 3], ['to leading', 'composition', 'column compo-', 'sition type'])], [('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['break', 'ing'], ['a'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['kern', 'ing'], ['jus', 'ti', 'fied'], ['in', 'ter', 'na', 'tion', 'al'], ['break', 'ing']], 10, 2], ['paragraph', 'breaking a', 'column', 'setting', 'margin', 'text kern-', 'ing justi-', 'fied', 'interna-', 'tional', 'breaking']), ('regression: hyphen glyph width', [[['kern', 'ing'], ['com', 'po', 'si', 'tion'], ['to'], ['in', 'ter', 'na', 'tion', 'al'], ['line'], ['col', 'umn'], ['hy', 'phen', 'a', 'tion'], ['set', 'ting'], ['line'], ['set', 'ting']], 11, 3], ['kerning', 'composition', 'to interna-', 'tional line', 'column hy-', 'phenation', 'setting', 'line', 'setting']), ('regression: hyphen glyph width', [[['mar', 'gin'], ['jus', 'ti', 'fied'], ['com', 'po', 'si', 'tion'], ['text'], ['of'], ['of'], ['pa', 'ra', 'graph'], ['to'], ['col', 'umn'], ['kern', 'ing'], ['kern', 'ing']], 6, 1], ['margin', 'justi-', 'fied', 'compo-', 'sition', 'text', 'of of', 'para-', 'graph', 'to', 'column', 'kern-', 'ing', 'kerning']), ('regression: hyphen glyph width', [[['to'], ['lead', 'ing'], ['to'], ['pa', 'ra', 'graph'], ['line'], ['com', 'po', 'si', 'tion'], ['break', 'ing'], ['lead', 'ing'], ['break', 'ing']], 12, 1], ['to leading', 'to paragraph', 'line compo-', 'sition', 'breaking', 'leading', 'breaking']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['mar', 'gin'], ['mar', 'gin'], ['line'], ['text'], ['hy', 'phen', 'a', 'tion'], ['set', 'ting'], ['col', 'umn'], ['line']], 8, 2], ['margin', 'margin', 'line', 'text hy-', 'phena-', 'tion', 'setting', 'column', 'line']), ('control layout', [[['text'], ['line'], ['hy', 'phen', 'a', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['set', 'ting']], 14, 2], ['text line hy-', 'phenation in-', 'ternational', 'composition', 'setting'])], [('regression: hyphen glyph width', [[['lead', 'ing'], ['lead', 'ing'], ['col', 'umn'], ['mar', 'gin'], ['col', 'umn'], ['lead', 'ing']], 14, 2], ['leading lead-', 'ing column', 'margin column', 'leading']), ('regression: hyphen glyph width', [[['line'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['set', 'ting'], ['lead', 'ing'], ['a'], ['hy', 'phen', 'a', 'tion'], ['col', 'umn'], ['lead', 'ing']], 12, 3], ['line column', 'composition', 'setting', 'leading a', 'hyphenation', 'column', 'leading']), ('regression: hyphen glyph width', [[['pa', 'ra', 'graph'], ['a'], ['text'], ['hy', 'phen', 'a', 'tion'], ['hy', 'phen', 'a', 'tion'], ['pa', 'ra', 'graph'], ['hy', 'phen', 'a', 'tion'], ['jus', 'ti', 'fied'], ['to'], ['type'], ['mar', 'gin'], ['set', 'ting']], 11, 2], ['paragraph a', 'text hy-', 'phenation', 'hyphenation', 'paragraph', 'hyphenation', 'justified', 'to type', 'margin', 'setting']), ('regression: hyphen glyph width', [[['set', 'ting'], ['type'], ['of'], ['a'], ['com', 'po', 'si', 'tion'], ['com', 'po', 'si', 'tion'], ['in', 'ter', 'na', 'tion', 'al'], ['col', 'umn']], 7, 3], ['setting', 'type of', 'a com-', 'posi-', 'tion', 'compo-', 'sition', 'inter-', 'nation-', 'al', 'column']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['lead', 'ing'], ['lead', 'ing'], ['text'], ['line'], ['com', 'po', 'si', 'tion']], 13, 3], ['leading lead-', 'ing text line', 'composition']), ('control layout', [[['a'], ['com', 'po', 'si', 'tion'], ['lead', 'ing'], ['mar', 'gin'], ['hy', 'phen', 'a', 'tion'], ['mar', 'gin'], ['type'], ['to']], 13, 3], ['a composition', 'leading mar-', 'gin hyphena-', 'tion margin', 'type to'])], [('regression: hyphen glyph width', [[['col', 'umn'], ['to'], ['com', 'po', 'si', 'tion'], ['com', 'po', 'si', 'tion'], ['of']], 7, 1], ['column', 'to com-', 'position', 'compo-', 'sition', 'of']), ('regression: hyphen glyph width', [[['lead', 'ing'], ['kern', 'ing'], ['hy', 'phen', 'a', 'tion'], ['kern', 'ing'], ['col', 'umn'], ['com', 'po', 'si', 'tion'], ['lead', 'ing'], ['text'], ['of'], ['jus', 'ti', 'fied'], ['type'], ['kern', 'ing']], 12, 1], ['leading', 'kerning hy-', 'phenation', 'kerning col-', 'umn', 'composition', 'leading text', 'of justified', 'type kerning']), ('regression: hyphen glyph width', [[['mar', 'gin'], ['com', 'po', 'si', 'tion'], ['of'], ['com', 'po', 'si', 'tion'], ['type']], 10, 3], ['margin', 'composi-', 'tion of', 'composi-', 'tion type']), ('regression: hyphen glyph width', [[['in', 'ter', 'na', 'tion', 'al'], ['a'], ['set', 'ting'], ['mar', 'gin'], ['text'], ['text'], ['jus', 'ti', 'fied'], ['break', 'ing'], ['col', 'umn'], ['hy', 'phen', 'a', 'tion'], ['pa', 'ra', 'graph']], 7, 3], ['inter-', 'nation-', 'al a', 'setting', 'margin', 'text', 'text', 'justi-', 'fied', 'break-', 'ing', 'column', 'hyphen-', 'ation', 'paragraph']), ('ladder of three hyphenated lines', [[['in', 'ter', 'na', 'tion', 'al'], ['com', 'po', 'si', 'tion'], ['hy', 'phen', 'a', 'tion'], ['text']], 7, 2], ['inter-', 'nation-', 'al', 'compo-', 'sition', 'hyphen-', 'ation', 'text']), ('last word never hyphenated', [[['a'], ['com', 'po', 'si', 'tion']], 8, 2], ['a', 'composition']), ('control layout', [[['lead', 'ing'], ['pa', 'ra', 'graph'], ['to'], ['mar', 'gin'], ['line'], ['jus', 'ti', 'fied']], 14, 3], ['leading para-', 'graph to mar-', 'gin line', 'justified']), ('control layout', [[['in', 'ter', 'na', 'tion', 'al'], ['mar', 'gin'], ['text'], ['col', 'umn'], ['set', 'ting'], ['mar', 'gin'], ['hy', 'phen', 'a', 'tion'], ['type'], ['pa', 'ra', 'graph']], 13, 3], ['international', 'margin text', 'column set-', 'ting margin', 'hyphenation', 'type', 'paragraph'])]]
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)

prompt:
Hyphenated lines overflow the measure by one unit.

Input [words as syllable lists, width, limit]. Greedy fill with 1-unit spaces and characters. A word that does not fit may be split at the latest syllable boundary whose head plus "-" fits, only if fewer than limit immediately preceding lines ended in a hyphen and the word is not the paragraph's last word. A line ended without hyphen resets the streak; a word too long for an empty line is set alone. Return the lines.

split: open-access