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 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] > 0 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 = [[('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'), ('regression: odd-value break rule', ['hyphenation', ['m1m', 'x1c', 'con1', '1m', 'p2h', 'li1', '1p', '.un1', 'hena4', 'io3n.', 'e1c', 'a2n', 'ment1', 'pu2', 'ter1', 'e2x', 'hen5at', 't1t', 'gr2', 'r1r', '2mp', 's1s', 'hy3ph', '2io', 'c2ce', 'om1', 'n2at', 'o2n'], ['mis-sis-sip-pi'], 2, 2], 'hy-phen-ation'), ('regression: odd-value break rule', ['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'), ('regression: odd-value break rule', ['Unexpected', ['con1', 'r1r', 'e1c', '5nd.', 'o2n', 'p2h', 'm1m', 'gr2', '3ty.', '.ta4', 'l1l', 'an1d', 'om1', 'he2n', 'x1c', 'li1', '2io', '1q', 'ex1', 'n2at', 'hena4', '4ing.', 'io3n.', 'a1b', 'hen5at', 'c2ce', 'pu2', 'e2x', '1ca', '1p', '.re1', 'ment1', 'hy3ph', 'ter1', '.un1', '2mp', 'a2n', 'b2l', '1na', '1ble', 'ca1t', 'n1g', 'at1'], [], 2, 2], 'Un-ex-pe-cted'), ('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'), ('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', ['running', ['.ta4', 'a2n', 'hena4', 's1s', '2io', 'hen5at', 'e1c', '1p', 'e2x', 'n2at', '.un1', 'hy3ph', 'con1', 'a1b', '1m', '.re1', 'b2l'], [], 2, 2], 'running'), ('control layout', ['understand', ['m1m', '4ing.', '1m', '1q', '1na', 't1t', 'ex1', '.re1'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'understand')], [('regression: odd-value break rule', ['grammar', ['m1m', 'hy3ph', '1ble', 'r1r', 'a2n', 'li1', '1q', 't1t', '1p', 'at1', 'l1l', '2io', 'e2x', 'a1b', 'n1g', 'con1', '1ca', '.re1', '1m', 'e1c', '4ing.', '1tio', 'p2h', 'o2n', '.ta4', 'he2n', 's1s', 'io3n.', '5nd.', 'b2l', 'pu2', 'an1d', 'c2ce', '1na', 'ex1', '3ty.', 'n2at', 'hen5at', '2mp', 'ter1', 'ca1t', 'om1', 'ment1', 'x1c', 'gr2'], [], 1, 3], 'gra-m-mar'), ('regression: odd-value break rule', ['Recreation', ['at1', 't1t', 'om1', 'a2n', 'ex1', 'p2h', 'pu2', '3ty.', 'm1m', 'x1c', '1q', '1na', 'r1r', 'ter1', 'o2n', '.re1', 'hena4', '1m', '4ing.', 'io3n.', 'n1g', '1ble', 'l1l', 'b2l', 's1s', '2io', 'ment1', '1p', 'n2at', 'con1', '1tio', 'gr2', 'hy3ph', 'he2n', 'hen5at', '2mp', 'ca1t', 'e2x', 'e1c', '.ta4', '1ca', 'li1', '.un1', 'an1d'], [], 1, 2], 'Re-crea-tion'), ('regression: odd-value break rule', ['Pentagon', ['p2h', '2io', 'hen5at', 'r1r', 'o2n', 'x1c', 'e1c', '5nd.'], ['mis-sis-sip-pi', 'ta-ble', 'gram-mar'], 1, 1], 'Pentagon'), ('regression: odd-value break rule', ['Unexpected', ['hena4', 'ment1', 'hen5at', '5nd.', '1na', 'a1b', '1p', '3ty.', 'n2at', 'x1c', 'hy3ph', '2io', '4ing.', 't1t', '.un1', 's1s', 'p2h', 'ter1', 'gr2', '1m', 'o2n', 'e2x', '1ca', 'at1', 'e1c', '1ble', 'io3n.'], [], 2, 2], 'Un-ex-pe-cted'), ('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'), ('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', ['running', ['pu2', 'a1b', '1m', '5nd.', 'e2x', '1q', '.re1', 'ex1', 'con1', 'hena4', '1na', '2mp', 'om1', 'ter1', 'an1d', 'ca1t', 'at1', '.un1', 'o2n', 's1s', 'l1l'], ['ex-cep-tion', 'gram-mar'], 3, 1], 'running'), ('control layout', ['terminal', ['hy3ph', 'con1', '1q', 'n1g', 'b2l', 'ca1t', 'hena4', 'a2n', 'p2h', 'pu2', 'he2n', 'li1', 'om1', 'm1m', 'at1', 'o2n', '.un1'], [], 1, 3], 'terminal')], [('regression: odd-value break rule', ['Paragraph', ['ter1', 'l1l', 'he2n', '3ty.', 'hen5at', '2mp', 't1t', 'ex1', 'gr2', 'io3n.', 'con1', 'o2n', 'a2n', '1ca', 'm1m', 'hy3ph', 'r1r', '1p', 'n1g', 'pu2', '1na', '1m', 's1s', '.re1', '4ing.', '.un1'], ['ta-ble'], 1, 2], 'Paragra-ph'), ('regression: odd-value break rule', ['hyphenation', ['2io', '1ca', '1na', 'n1g', 'ter1', 'b2l', 'at1', 'he2n', 'io3n.', 'm1m', 'l1l', 'an1d', 'ment1', 'gr2', '1p', 's1s', '3ty.', '5nd.', 'hy3ph', 'con1', 'n2at', 'o2n', 'hena4', '.un1', '2mp', '.ta4', 'a1b', 'e1c', '4ing.', '1ble', 'a2n', 'ex1', '1m', 'hen5at', 'om1', 't1t', 'c2ce', 'p2h', '.re1', 'pu2'], ['ta-ble'], 1, 2], 'hy-phen-ation'), ('partial-repair probe', ['Mississippi', ['n2at', 's1s', 'hena4', 'x1c', 'p2h', '1ble', '.re1', 'r1r', '.ta4', 'ex1', '1ca', 'at1', 'io3n.', 'o2n', 'e2x', '3ty.', '1tio', 'b2l', '2mp', 'he2n', 'li1', 'an1d', 'a1b', 'pu2', 'a2n', 'hen5at', 'n1g', '5nd.', 't1t', 'm1m'], ['gram-mar', 'pro-ject'], 2, 2], 'Mis-sis-sippi'), ('partial-repair probe', ['excellent', ['p2h', 'n2at', 'b2l', 'gr2', 'e2x', 'an1d', 'x1c', '.ta4', 'ex1', 'om1', 'a2n', '1ca', 'hena4', 'e1c', 'he2n', 'c2ce', 'l1l', 'ca1t', '.un1', '1na', '5nd.', 'at1', 'hen5at', 'm1m', '2mp', '1q', 'a1b', 'con1', 'hy3ph', '3ty.', 'li1', '1m', '.re1', 'r1r', 'pu2', 'ment1', 'n1g', 't1t', 's1s', 'o2n', '1tio', '1p'], [], 2, 2], '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'), ('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', ['grammar', ['.ta4', '.un1', '.re1', 'n2at', 'at1', 'hena4', 'p2h', '3ty.', 'io3n.', 'hy3ph', 'r1r', 'hen5at', 'a1b', 'he2n', '1ble', '1tio', 'pu2', 'b2l', 'e1c', 'e2x', 'm1m', 'c2ce', 'gr2', '5nd.', 'ment1', 'li1', 's1s', 'n1g', 'x1c', 'a2n', 'om1', 'con1', 'ca1t', '1ca', '1q', '1na', 'ex1', '1p', '2io', 'ter1', 't1t', '2mp'], ['gram-mar', 'ex-cep-tion'], 1, 1], 'gram-mar'), ('control layout', ['running', ['li1', '1q', 'a1b', 'hy3ph', '.re1', '.un1', 'gr2', '2mp', 'b2l'], ['mis-sis-sip-pi', 'ex-cep-tion'], 1, 2], 'running')], [('regression: odd-value break rule', ['Exception', ['he2n', 'e1c', 'b2l', 'ment1', '.ta4', 'con1', '.un1', 'e2x', 'n2at', '2mp', '1na', 'pu2', 'li1', 'o2n', 'a1b', 'om1', 's1s', 'io3n.', '3ty.', 'at1', 'gr2', 'p2h', 'ca1t', 'hy3ph', '2io', 'hen5at', 'x1c', 'm1m', '.re1', '1tio', 'ex1', '1q', 'l1l', 't1t'], ['pro-ject', 'gram-mar', 'ta-ble'], 3, 3], 'Excep-tion'), ('regression: odd-value break rule', ['typesetting', ['ex1', 'b2l', '1ble', 'hena4', 'pu2', 'e2x', '.un1', 'a1b', 'r1r', '5nd.', 'con1', 'io3n.', 'c2ce', '1q', 'n2at', 'ter1', 'l1l', '1na', 'o2n', 'hen5at', 'x1c', 's1s', '2io', 'an1d', 'a2n', 'hy3ph', '3ty.', 'n1g', 'at1', '1p', 'gr2', '4ing.', 't1t', '2mp', 'li1', 'ca1t', '1m', 'he2n', 'p2h', '1ca', 'ment1', '1tio', 'm1m', '.re1', 'om1', 'e1c', '.ta4'], [], 2, 3], 'ty-peset-ting'), ('regression: odd-value break rule', ['computer', ['r1r', 'pu2', 'hena4', 'ment1', 'li1', '.re1', 'an1d', 'a1b', 'a2n', 'e1c', 'o2n', 'io3n.', 'con1'], ['mis-sis-sip-pi', 'ex-cep-tion', 'pro-ject'], 2, 1], 'computer'), ('partial-repair probe', ['Commitment', ['.ta4', 'gr2', 'om1', 't1t', 'e1c', 'a2n', '1q', '1ble', '1tio', 'hen5at', '2mp'], [], 3, 1], 'Com-mitment'), ('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', ['Categories', ['b2l', 'hen5at', 'he2n', 'con1', 'ex1', '.un1', 'x1c', '5nd.', 'a2n', 'gr2', 'om1', 'r1r', '1q', '1ble', 's1s', 'l1l', '.ta4'], [], 2, 1], 'Categories'), ('control layout', ['Table', ['ment1', 'o2n', '1ca', 'n2at', '5nd.', 'x1c', '2io', 'hena4', 'con1', 'l1l', 'ter1', 'r1r', 't1t', 'hen5at', '.un1', 'io3n.', '1m', '1tio', 'm1m', 'e1c', 'ca1t', 'p2h', '.re1', 'a2n', 'pu2', 'an1d'], [], 1, 3], 'Table')], [('regression: odd-value break rule', ['running', ['s1s', 'p2h', '4ing.', 'e1c', '2io', '1ca', 'e2x', 'ex1', '1na', 'at1', 'li1', 'gr2', '.re1', 'x1c', 'ment1', 'ter1', 'n1g', 'ca1t', 'n2at', '1q', 'r1r', '1tio', 'hy3ph', 'm1m', 'io3n.', 'l1l', 'pu2', '.un1', 'o2n', 'a1b', '5nd.', 'c2ce', 'hen5at', '1m', 'hena4'], ['ex-cep-tion', 'pro-ject', 'gram-mar'], 2, 2], 'running'), ('regression: odd-value break rule', ['Paragraph', ['1m', '2mp', '.ta4', 'hy3ph', 'pu2', 'e2x', 'om1', '1tio', 'at1', '.un1', 'n2at', '1na', 'hena4', 'r1r', 'ca1t', '1q', '2io', '.re1', 'a2n', 'n1g', 'o2n', 'ter1', 'l1l', 'x1c', 'p2h', 'con1', '5nd.', 'he2n', '4ing.', 'b2l', 'm1m', '1ble', '1p', 'c2ce', 's1s'], ['gram-mar', 'pro-ject'], 3, 1], 'Paragra-ph'), ('regression: odd-value break rule', ['Paragraph', ['an1d', '5nd.', '.re1', '1ca', '1na', '1p', 'e1c', 'he2n', 'gr2', '.un1', 'ex1', '4ing.', 't1t', 'p2h', 'hen5at', 'li1'], ['mis-sis-sip-pi', 'pro-ject', 'gram-mar'], 1, 1], 'Paragra-ph'), ('regression: odd-value break rule', ['typesetting', ['s1s', '2io', '5nd.', '.re1', 'r1r', '.ta4', '1na', '1ca', 'li1', 'ex1', '4ing.', 'n2at', 'an1d', 'x1c', 'om1', 'hy3ph', 'p2h', '1m', 'a1b', '2mp', 'gr2'], ['pro-ject', 'mis-sis-sip-pi', 'ta-ble'], 1, 3], 'typesetting'), ('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'), ('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', ['connection', ['e2x', 't1t', 'li1', 'c2ce', 'he2n', 'r1r', '1ble', '5nd.', 'b2l', 'p2h', 'n2at'], ['pro-ject', 'gram-mar'], 2, 2], 'connection'), ('control layout', ['project', ['2mp', 'li1', 'n1g', 'om1', 'e2x', '1tio', '.re1', 'p2h', '1p', 'gr2', 'c2ce', 'hena4', 'ter1', 'he2n', '1m', '1q', '1na', '1ble', 'n2at', 'x1c'], [], 2, 1], 'project')]]
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.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 == 0 and score[i + 1] > 0 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 = [[('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'), ('regression: odd-value break rule', ['hyphenation', ['m1m', 'x1c', 'con1', '1m', 'p2h', 'li1', '1p', '.un1', 'hena4', 'io3n.', 'e1c', 'a2n', 'ment1', 'pu2', 'ter1', 'e2x', 'hen5at', 't1t', 'gr2', 'r1r', '2mp', 's1s', 'hy3ph', '2io', 'c2ce', 'om1', 'n2at', 'o2n'], ['mis-sis-sip-pi'], 2, 2], 'hy-phen-ation'), ('regression: odd-value break rule', ['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'), ('regression: odd-value break rule', ['Unexpected', ['con1', 'r1r', 'e1c', '5nd.', 'o2n', 'p2h', 'm1m', 'gr2', '3ty.', '.ta4', 'l1l', 'an1d', 'om1', 'he2n', 'x1c', 'li1', '2io', '1q', 'ex1', 'n2at', 'hena4', '4ing.', 'io3n.', 'a1b', 'hen5at', 'c2ce', 'pu2', 'e2x', '1ca', '1p', '.re1', 'ment1', 'hy3ph', 'ter1', '.un1', '2mp', 'a2n', 'b2l', '1na', '1ble', 'ca1t', 'n1g', 'at1'], [], 2, 2], 'Un-ex-pe-cted'), ('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'), ('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', ['running', ['.ta4', 'a2n', 'hena4', 's1s', '2io', 'hen5at', 'e1c', '1p', 'e2x', 'n2at', '.un1', 'hy3ph', 'con1', 'a1b', '1m', '.re1', 'b2l'], [], 2, 2], 'running'), ('control layout', ['understand', ['m1m', '4ing.', '1m', '1q', '1na', 't1t', 'ex1', '.re1'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'understand')], [('regression: odd-value break rule', ['grammar', ['m1m', 'hy3ph', '1ble', 'r1r', 'a2n', 'li1', '1q', 't1t', '1p', 'at1', 'l1l', '2io', 'e2x', 'a1b', 'n1g', 'con1', '1ca', '.re1', '1m', 'e1c', '4ing.', '1tio', 'p2h', 'o2n', '.ta4', 'he2n', 's1s', 'io3n.', '5nd.', 'b2l', 'pu2', 'an1d', 'c2ce', '1na', 'ex1', '3ty.', 'n2at', 'hen5at', '2mp', 'ter1', 'ca1t', 'om1', 'ment1', 'x1c', 'gr2'], [], 1, 3], 'gra-m-mar'), ('regression: odd-value break rule', ['Recreation', ['at1', 't1t', 'om1', 'a2n', 'ex1', 'p2h', 'pu2', '3ty.', 'm1m', 'x1c', '1q', '1na', 'r1r', 'ter1', 'o2n', '.re1', 'hena4', '1m', '4ing.', 'io3n.', 'n1g', '1ble', 'l1l', 'b2l', 's1s', '2io', 'ment1', '1p', 'n2at', 'con1', '1tio', 'gr2', 'hy3ph', 'he2n', 'hen5at', '2mp', 'ca1t', 'e2x', 'e1c', '.ta4', '1ca', 'li1', '.un1', 'an1d'], [], 1, 2], 'Re-crea-tion'), ('regression: odd-value break rule', ['Pentagon', ['p2h', '2io', 'hen5at', 'r1r', 'o2n', 'x1c', 'e1c', '5nd.'], ['mis-sis-sip-pi', 'ta-ble', 'gram-mar'], 1, 1], 'Pentagon'), ('regression: odd-value break rule', ['Unexpected', ['hena4', 'ment1', 'hen5at', '5nd.', '1na', 'a1b', '1p', '3ty.', 'n2at', 'x1c', 'hy3ph', '2io', '4ing.', 't1t', '.un1', 's1s', 'p2h', 'ter1', 'gr2', '1m', 'o2n', 'e2x', '1ca', 'at1', 'e1c', '1ble', 'io3n.'], [], 2, 2], 'Un-ex-pe-cted'), ('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'), ('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', ['running', ['pu2', 'a1b', '1m', '5nd.', 'e2x', '1q', '.re1', 'ex1', 'con1', 'hena4', '1na', '2mp', 'om1', 'ter1', 'an1d', 'ca1t', 'at1', '.un1', 'o2n', 's1s', 'l1l'], ['ex-cep-tion', 'gram-mar'], 3, 1], 'running'), ('control layout', ['terminal', ['hy3ph', 'con1', '1q', 'n1g', 'b2l', 'ca1t', 'hena4', 'a2n', 'p2h', 'pu2', 'he2n', 'li1', 'om1', 'm1m', 'at1', 'o2n', '.un1'], [], 1, 3], 'terminal')], [('regression: odd-value break rule', ['Paragraph', ['ter1', 'l1l', 'he2n', '3ty.', 'hen5at', '2mp', 't1t', 'ex1', 'gr2', 'io3n.', 'con1', 'o2n', 'a2n', '1ca', 'm1m', 'hy3ph', 'r1r', '1p', 'n1g', 'pu2', '1na', '1m', 's1s', '.re1', '4ing.', '.un1'], ['ta-ble'], 1, 2], 'Paragra-ph'), ('regression: odd-value break rule', ['hyphenation', ['2io', '1ca', '1na', 'n1g', 'ter1', 'b2l', 'at1', 'he2n', 'io3n.', 'm1m', 'l1l', 'an1d', 'ment1', 'gr2', '1p', 's1s', '3ty.', '5nd.', 'hy3ph', 'con1', 'n2at', 'o2n', 'hena4', '.un1', '2mp', '.ta4', 'a1b', 'e1c', '4ing.', '1ble', 'a2n', 'ex1', '1m', 'hen5at', 'om1', 't1t', 'c2ce', 'p2h', '.re1', 'pu2'], ['ta-ble'], 1, 2], 'hy-phen-ation'), ('partial-repair probe', ['Mississippi', ['n2at', 's1s', 'hena4', 'x1c', 'p2h', '1ble', '.re1', 'r1r', '.ta4', 'ex1', '1ca', 'at1', 'io3n.', 'o2n', 'e2x', '3ty.', '1tio', 'b2l', '2mp', 'he2n', 'li1', 'an1d', 'a1b', 'pu2', 'a2n', 'hen5at', 'n1g', '5nd.', 't1t', 'm1m'], ['gram-mar', 'pro-ject'], 2, 2], 'Mis-sis-sippi'), ('partial-repair probe', ['excellent', ['p2h', 'n2at', 'b2l', 'gr2', 'e2x', 'an1d', 'x1c', '.ta4', 'ex1', 'om1', 'a2n', '1ca', 'hena4', 'e1c', 'he2n', 'c2ce', 'l1l', 'ca1t', '.un1', '1na', '5nd.', 'at1', 'hen5at', 'm1m', '2mp', '1q', 'a1b', 'con1', 'hy3ph', '3ty.', 'li1', '1m', '.re1', 'r1r', 'pu2', 'ment1', 'n1g', 't1t', 's1s', 'o2n', '1tio', '1p'], [], 2, 2], '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'), ('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', ['grammar', ['.ta4', '.un1', '.re1', 'n2at', 'at1', 'hena4', 'p2h', '3ty.', 'io3n.', 'hy3ph', 'r1r', 'hen5at', 'a1b', 'he2n', '1ble', '1tio', 'pu2', 'b2l', 'e1c', 'e2x', 'm1m', 'c2ce', 'gr2', '5nd.', 'ment1', 'li1', 's1s', 'n1g', 'x1c', 'a2n', 'om1', 'con1', 'ca1t', '1ca', '1q', '1na', 'ex1', '1p', '2io', 'ter1', 't1t', '2mp'], ['gram-mar', 'ex-cep-tion'], 1, 1], 'gram-mar'), ('control layout', ['running', ['li1', '1q', 'a1b', 'hy3ph', '.re1', '.un1', 'gr2', '2mp', 'b2l'], ['mis-sis-sip-pi', 'ex-cep-tion'], 1, 2], 'running')], [('regression: odd-value break rule', ['Exception', ['he2n', 'e1c', 'b2l', 'ment1', '.ta4', 'con1', '.un1', 'e2x', 'n2at', '2mp', '1na', 'pu2', 'li1', 'o2n', 'a1b', 'om1', 's1s', 'io3n.', '3ty.', 'at1', 'gr2', 'p2h', 'ca1t', 'hy3ph', '2io', 'hen5at', 'x1c', 'm1m', '.re1', '1tio', 'ex1', '1q', 'l1l', 't1t'], ['pro-ject', 'gram-mar', 'ta-ble'], 3, 3], 'Excep-tion'), ('regression: odd-value break rule', ['typesetting', ['ex1', 'b2l', '1ble', 'hena4', 'pu2', 'e2x', '.un1', 'a1b', 'r1r', '5nd.', 'con1', 'io3n.', 'c2ce', '1q', 'n2at', 'ter1', 'l1l', '1na', 'o2n', 'hen5at', 'x1c', 's1s', '2io', 'an1d', 'a2n', 'hy3ph', '3ty.', 'n1g', 'at1', '1p', 'gr2', '4ing.', 't1t', '2mp', 'li1', 'ca1t', '1m', 'he2n', 'p2h', '1ca', 'ment1', '1tio', 'm1m', '.re1', 'om1', 'e1c', '.ta4'], [], 2, 3], 'ty-peset-ting'), ('regression: odd-value break rule', ['computer', ['r1r', 'pu2', 'hena4', 'ment1', 'li1', '.re1', 'an1d', 'a1b', 'a2n', 'e1c', 'o2n', 'io3n.', 'con1'], ['mis-sis-sip-pi', 'ex-cep-tion', 'pro-ject'], 2, 1], 'computer'), ('partial-repair probe', ['Commitment', ['.ta4', 'gr2', 'om1', 't1t', 'e1c', 'a2n', '1q', '1ble', '1tio', 'hen5at', '2mp'], [], 3, 1], 'Com-mitment'), ('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', ['Categories', ['b2l', 'hen5at', 'he2n', 'con1', 'ex1', '.un1', 'x1c', '5nd.', 'a2n', 'gr2', 'om1', 'r1r', '1q', '1ble', 's1s', 'l1l', '.ta4'], [], 2, 1], 'Categories'), ('control layout', ['Table', ['ment1', 'o2n', '1ca', 'n2at', '5nd.', 'x1c', '2io', 'hena4', 'con1', 'l1l', 'ter1', 'r1r', 't1t', 'hen5at', '.un1', 'io3n.', '1m', '1tio', 'm1m', 'e1c', 'ca1t', 'p2h', '.re1', 'a2n', 'pu2', 'an1d'], [], 1, 3], 'Table')], [('regression: odd-value break rule', ['running', ['s1s', 'p2h', '4ing.', 'e1c', '2io', '1ca', 'e2x', 'ex1', '1na', 'at1', 'li1', 'gr2', '.re1', 'x1c', 'ment1', 'ter1', 'n1g', 'ca1t', 'n2at', '1q', 'r1r', '1tio', 'hy3ph', 'm1m', 'io3n.', 'l1l', 'pu2', '.un1', 'o2n', 'a1b', '5nd.', 'c2ce', 'hen5at', '1m', 'hena4'], ['ex-cep-tion', 'pro-ject', 'gram-mar'], 2, 2], 'running'), ('regression: odd-value break rule', ['Paragraph', ['1m', '2mp', '.ta4', 'hy3ph', 'pu2', 'e2x', 'om1', '1tio', 'at1', '.un1', 'n2at', '1na', 'hena4', 'r1r', 'ca1t', '1q', '2io', '.re1', 'a2n', 'n1g', 'o2n', 'ter1', 'l1l', 'x1c', 'p2h', 'con1', '5nd.', 'he2n', '4ing.', 'b2l', 'm1m', '1ble', '1p', 'c2ce', 's1s'], ['gram-mar', 'pro-ject'], 3, 1], 'Paragra-ph'), ('regression: odd-value break rule', ['Paragraph', ['an1d', '5nd.', '.re1', '1ca', '1na', '1p', 'e1c', 'he2n', 'gr2', '.un1', 'ex1', '4ing.', 't1t', 'p2h', 'hen5at', 'li1'], ['mis-sis-sip-pi', 'pro-ject', 'gram-mar'], 1, 1], 'Paragra-ph'), ('regression: odd-value break rule', ['typesetting', ['s1s', '2io', '5nd.', '.re1', 'r1r', '.ta4', '1na', '1ca', 'li1', 'ex1', '4ing.', 'n2at', 'an1d', 'x1c', 'om1', 'hy3ph', 'p2h', '1m', 'a1b', '2mp', 'gr2'], ['pro-ject', 'mis-sis-sip-pi', 'ta-ble'], 1, 3], 'typesetting'), ('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'), ('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', ['connection', ['e2x', 't1t', 'li1', 'c2ce', 'he2n', 'r1r', '1ble', '5nd.', 'b2l', 'p2h', 'n2at'], ['pro-ject', 'gram-mar'], 2, 2], 'connection'), ('control layout', ['project', ['2mp', 'li1', 'n1g', 'om1', 'e2x', '1tio', '.re1', 'p2h', '1p', 'gr2', 'c2ce', 'hena4', 'ter1', 'he2n', '1m', '1q', '1na', '1ble', 'n2at', 'x1c'], [], 2, 1], 'project')]]
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:
Hyphens appear at gaps explicitly inhibited by even digits.

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 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 = [[('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'), ('regression: left hyphen minimum', ['Commitment', ['io3n.', 'hen5at', '3ty.', '1p', 'ca1t', '.ta4', 'x1c', 'n2at', 'm1m', 'e1c', 'r1r', 'hy3ph', 'ter1', '.un1', 's1s', 'hena4', '2mp', 'p2h', 'o2n', 'at1', '1q', 'he2n', '1m', 'ment1', '1ca', 'l1l', '.re1', '2io', '5nd.', 'c2ce', 'an1d', 'li1', 'b2l', 'a2n', 'om1', 'n1g', '1ble', 'pu2', 't1t', 'ex1', '1na', '4ing.'], [], 3, 2], 'Com-mit-ment'), ('partial-repair probe', ['Categories', ['1ca', '.re1', '.un1', '2io', 'a1b', 'con1', 'p2h', 'li1', 'o2n', 'n1g', '3ty.', 'ca1t'], ['ex-cep-tion', 'pro-ject'], 3, 2], 'Categories'), ('regression: left hyphen minimum', ['Commitment', ['ex1', '.re1', 'io3n.', 'x1c', '1m', '1ble', 'con1', 'a2n', '3ty.', '1p', 'hen5at', 'p2h', 'an1d', 'hena4'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 3, 3], 'Com-mit-ment'), ('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', ['Categories', ['.ta4', 'c2ce', 's1s', 'x1c', 'p2h', '1p', 'pu2', 'o2n', 'r1r', 'io3n.', 'ment1', 'an1d', '3ty.', 'n1g', '.re1', '2mp', 'a1b', '1ca', 'li1'], ['ta-ble', 'gram-mar', 'pro-ject'], 2, 1], 'Categories'), ('control layout', ['Table', ['ex1', 'hy3ph', 'pu2', '.ta4', '4ing.', '1q', 'n2at', '1tio', '.re1', 'b2l', '2io', 'a1b'], ['ta-ble', 'mis-sis-sip-pi', 'pro-ject'], 2, 2], 'Ta-ble')], [('regression: left hyphen minimum', ['typesetting', ['ca1t', '.ta4', 'e1c', 'ment1', '1p', '1ble', 'p2h', 'n2at', 'a2n', '1tio', 'x1c', 'gr2', '2io', 'e2x', 'm1m', 'r1r', 'a1b', 'con1', 'io3n.', '.re1', 'l1l', '1ca', 'om1', 'hena4', '2mp', 't1t', 'li1'], ['gram-mar', 'pro-ject'], 2, 2], 'ty-peset-ting'), ('regression: left hyphen minimum', ['hyphenation', ['hy3ph', 'r1r', 'ment1', '.re1', 'li1', '1ble', 'hen5at', 't1t', '1m', 'c2ce', 'm1m'], [], 2, 2], 'hy-phen-ation'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('partial-repair probe', ['Categories', ['t1t', 'ca1t', '1p', '1m', 'r1r', '1ca', '.ta4', 'hen5at', 'a1b', '2io', 'ex1', 'gr2', '1na', 'con1', 'li1', '1q', 'ter1', '.un1', 'io3n.', 'hy3ph', 's1s', 'c2ce', '1tio'], ['pro-ject'], 3, 2], 'Categories'), ('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', ['table', ['c2ce', '3ty.', 'he2n', '2io', 's1s', '.un1', 'con1', 'hena4', '1p', 'ca1t', 'n2at', '4ing.', 'om1', 'ment1', 'a1b', 'a2n', 'gr2', 'p2h', '1tio', 'li1', 'ex1', '1ca', '1m', 'ter1'], ['ex-cep-tion'], 1, 1], 'ta-ble'), ('control layout', ['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')], [('regression: left hyphen minimum', ['typesetting', ['ex1', 'b2l', '1ble', 'hena4', 'pu2', 'e2x', '.un1', 'a1b', 'r1r', '5nd.', 'con1', 'io3n.', 'c2ce', '1q', 'n2at', 'ter1', 'l1l', '1na', 'o2n', 'hen5at', 'x1c', 's1s', '2io', 'an1d', 'a2n', 'hy3ph', '3ty.', 'n1g', 'at1', '1p', 'gr2', '4ing.', 't1t', '2mp', 'li1', 'ca1t', '1m', 'he2n', 'p2h', '1ca', 'ment1', '1tio', 'm1m', '.re1', 'om1', 'e1c', '.ta4'], [], 2, 3], 'ty-peset-ting'), ('regression: left hyphen minimum', ['grammar', ['c2ce', '5nd.', '1tio', '1m', 'a2n', '1q', 'gr2', 's1s', 'l1l', 'n2at', 'o2n', 'hy3ph', 'n1g', '1na', 'con1', 'e2x', '4ing.', 'at1', 't1t', 'pu2', '.re1', '2mp', 'ment1', 'e1c', 'r1r', '1ca', 'io3n.', 'ex1', 'li1', '.un1', 'x1c', 'a1b', 'p2h'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'gra-m-mar'), ('partial-repair probe', ['Categories', ['t1t', 'ca1t', '1p', '1m', 'r1r', '1ca', '.ta4', 'hen5at', 'a1b', '2io', 'ex1', 'gr2', '1na', 'con1', 'li1', '1q', 'ter1', '.un1', 'io3n.', 'hy3ph', 's1s', 'c2ce', '1tio'], ['pro-ject'], 3, 2], 'Categories'), ('regression: left hyphen minimum', ['Commitment', ['ex1', '.re1', 'io3n.', 'x1c', '1m', '1ble', 'con1', 'a2n', '3ty.', '1p', 'hen5at', 'p2h', 'an1d', 'hena4'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 3, 3], 'Com-mit-ment'), ('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', ['Pentagon', ['1p', 'he2n', '.re1', 'at1', 'm1m', 'r1r', 'e1c', 'hena4', 'pu2', 'gr2', '1tio', 'ex1', 'n1g', '.ta4', 's1s', 'a2n', 'li1', 'n2at'], ['gram-mar', 'pro-ject'], 3, 1], 'Pentagon'), ('control layout', ['hyphenation', ['hy3ph', '1ble', '.re1', 'ter1', 'r1r', 'n1g', 'e2x', 'ca1t', 'pu2', 'om1', 'c2ce', '2mp', 'ex1', 'b2l'], ['ta-ble'], 1, 2], 'hy-phenation')], [('regression: left hyphen minimum', ['Commitment', ['at1', '1m', 'm1m', '4ing.', 'li1', 'he2n', 'e2x', 'e1c', 'l1l', '3ty.', 'ca1t', 'an1d', 'pu2', 'b2l', 's1s', '1na', 'a2n', 'ex1', '2mp', 'hena4', '1ble', 'om1', '1tio', '.re1', 'ter1', 'hen5at', 't1t', '2io', 'c2ce', 'r1r', 'gr2', 'n2at', 'p2h', 'x1c', 'a1b', 'ment1', 'con1', '.ta4', 'io3n.', '1ca', 'n1g', 'o2n', '5nd.', 'hy3ph', '.un1', '1q'], ['mis-sis-sip-pi'], 2, 1], 'Co-m-mit-ment'), ('regression: left hyphen minimum', ['Commitment', ['x1c', 'b2l', 'at1', 'a2n', 'ment1', 'o2n', 'n1g', 'hen5at', 'io3n.', 'e1c', 'e2x', 't1t', '.ta4', 'he2n', 'an1d', 'n2at', '1q', '1p', 'pu2', 'r1r', 'om1', '1ble', 'c2ce', '3ty.', 'con1', '2io', '1m', 'ter1', 'ca1t', '.re1', '2mp', 'p2h', '1na', '.un1', '5nd.', 'l1l', '4ing.', 'hena4', 'm1m', 's1s', 'ex1', 'li1'], [], 3, 2], 'Com-mit-ment'), ('partial-repair probe', ['hyphenation', ['gr2', '1tio', '1q', 'a2n', 'he2n', 'm1m', 'ment1', 'ca1t', 'an1d', '1p', 'io3n.', 'e1c', 'a1b', 'o2n', 'b2l', 'om1'], ['ex-cep-tion', 'mis-sis-sip-pi'], 3, 2], 'hyphena-tion'), ('partial-repair probe', ['category', ['o2n', '1q', '.ta4', 'r1r', 'x1c', 'pu2', 'n2at', '2mp', 'ment1', '1tio', '.re1', 'a2n', '.un1', 'ex1', 'p2h', 'hy3ph', 'b2l', 'c2ce', '1m', 'ca1t', 'm1m', 's1s', '3ty.', 'io3n.', 'a1b', '5nd.', '4ing.', 'l1l', '2io', 'an1d', 't1t', 'li1'], ['ex-cep-tion', 'gram-mar', 'pro-ject'], 3, 3], 'category'), ('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'), ('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', ['table', ['s1s', 'ca1t', '1ca', '.re1', '2io', '1m', 'he2n', 'p2h', 'ment1', 'e1c', '1q', 'c2ce', 'o2n', 'r1r', 'l1l', 't1t', 'hen5at', 'om1', 'ter1', 'hy3ph', 'gr2', 'e2x', '5nd.', '.un1', '1p', 'b2l', 'a1b', 'x1c', 'n2at', '1ble', 'a2n', 'm1m', '1na', 'pu2', '3ty.', 'io3n.', 'ex1', 'con1', 'n1g', 'at1', 'hena4', 'an1d', '1tio', '.ta4', 'li1', '4ing.', '2mp'], ['mis-sis-sip-pi', 'pro-ject'], 1, 1], 'table'), ('control layout', ['announcement', ['1m', 'ex1', '1ca', '3ty.', '2mp', 'c2ce', 'ment1', '1na', 'hy3ph', 'he2n', 'con1', 'n1g', '1ble', 'om1', 'x1c', 'hen5at', 'e2x', 'n2at', 'm1m', 'ter1', '.re1', 'an1d', '1p', '2io', 'e1c', 'p2h', 'hena4', 'b2l', 'gr2', 'l1l'], ['ex-cep-tion'], 1, 2], 'announce-ment')], [('regression: left hyphen minimum', ['battle', ['.un1', 'ter1', 's1s', 'hena4', '3ty.', '1q', 'r1r', 'gr2', 'io3n.', 'om1', 'e1c', '2mp', '1ble', '.ta4', 'at1', 'ex1', 'a1b', 'a2n', 'e2x', 'he2n', 'pu2', 'o2n', '5nd.', 'hy3ph', 'li1', 'an1d', '2io'], [], 3, 1], 'bat-tle'), ('regression: left hyphen minimum', ['Categories', ['1m', 'ter1', '2io', '2mp', 'ex1', 'b2l', 'c2ce', 'gr2', 'li1', 'x1c', 'con1', 'o2n', 's1s', '.re1', 'ca1t'], ['gram-mar', 'pro-ject'], 2, 3], 'Ca-tegories'), ('partial-repair probe', ['Unexpected', ['1tio', 'l1l', 'li1', '1p', 'pu2', 'ter1', 'an1d', '2mp', '.un1', 'hy3ph', 'io3n.', 'a1b', '.re1', 'he2n', '1na', '2io', 't1t', '3ty.', 'ex1', '1m', 'n2at', 'ca1t', 'b2l', 'o2n', '.ta4', 'r1r', 'x1c', 'at1', 'con1', 'e2x', 'c2ce', '1ca', 'n1g', 'hena4', 's1s', 'm1m', 'e1c', '4ing.', '5nd.', 'gr2'], ['ta-ble'], 3, 1], 'Unex-pe-cted'), ('partial-repair probe', ['Categories', ['5nd.', 'he2n', 'hena4', '1q', 'an1d', '.ta4', 'li1', 'r1r', '1tio', 'x1c', 'om1', '.un1', 'ter1', 'n1g', '3ty.', 'gr2', 'con1', '1ca', 'c2ce', '4ing.', 'ment1', 'pu2', 'hen5at', 'a2n', 'ex1', 'm1m', 'io3n.', 't1t', 'ca1t', '1m', 'o2n'], ['pro-ject', 'gram-mar', 'ta-ble'], 3, 1], 'Categories'), ('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'), ('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', ['understand', ['m1m', '4ing.', '1m', '1q', '1na', 't1t', 'ex1', '.re1'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'understand'), ('control layout', ['literally', ['hena4', 'li1', '5nd.', 'om1', 'ex1', 'pu2', '1na', 'ca1t', 'hen5at', 'p2h', 'b2l', 'hy3ph', 's1s', 'ter1'], ['mis-sis-sip-pi'], 1, 3], 'li-ter-ally')]]
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 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 - 1 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 = [[('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'), ('regression: left hyphen minimum', ['Commitment', ['io3n.', 'hen5at', '3ty.', '1p', 'ca1t', '.ta4', 'x1c', 'n2at', 'm1m', 'e1c', 'r1r', 'hy3ph', 'ter1', '.un1', 's1s', 'hena4', '2mp', 'p2h', 'o2n', 'at1', '1q', 'he2n', '1m', 'ment1', '1ca', 'l1l', '.re1', '2io', '5nd.', 'c2ce', 'an1d', 'li1', 'b2l', 'a2n', 'om1', 'n1g', '1ble', 'pu2', 't1t', 'ex1', '1na', '4ing.'], [], 3, 2], 'Com-mit-ment'), ('partial-repair probe', ['Categories', ['1ca', '.re1', '.un1', '2io', 'a1b', 'con1', 'p2h', 'li1', 'o2n', 'n1g', '3ty.', 'ca1t'], ['ex-cep-tion', 'pro-ject'], 3, 2], 'Categories'), ('regression: left hyphen minimum', ['Commitment', ['ex1', '.re1', 'io3n.', 'x1c', '1m', '1ble', 'con1', 'a2n', '3ty.', '1p', 'hen5at', 'p2h', 'an1d', 'hena4'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 3, 3], 'Com-mit-ment'), ('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', ['Categories', ['.ta4', 'c2ce', 's1s', 'x1c', 'p2h', '1p', 'pu2', 'o2n', 'r1r', 'io3n.', 'ment1', 'an1d', '3ty.', 'n1g', '.re1', '2mp', 'a1b', '1ca', 'li1'], ['ta-ble', 'gram-mar', 'pro-ject'], 2, 1], 'Categories'), ('control layout', ['Table', ['ex1', 'hy3ph', 'pu2', '.ta4', '4ing.', '1q', 'n2at', '1tio', '.re1', 'b2l', '2io', 'a1b'], ['ta-ble', 'mis-sis-sip-pi', 'pro-ject'], 2, 2], 'Ta-ble')], [('regression: left hyphen minimum', ['typesetting', ['ca1t', '.ta4', 'e1c', 'ment1', '1p', '1ble', 'p2h', 'n2at', 'a2n', '1tio', 'x1c', 'gr2', '2io', 'e2x', 'm1m', 'r1r', 'a1b', 'con1', 'io3n.', '.re1', 'l1l', '1ca', 'om1', 'hena4', '2mp', 't1t', 'li1'], ['gram-mar', 'pro-ject'], 2, 2], 'ty-peset-ting'), ('regression: left hyphen minimum', ['hyphenation', ['hy3ph', 'r1r', 'ment1', '.re1', 'li1', '1ble', 'hen5at', 't1t', '1m', 'c2ce', 'm1m'], [], 2, 2], 'hy-phen-ation'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('partial-repair probe', ['Categories', ['t1t', 'ca1t', '1p', '1m', 'r1r', '1ca', '.ta4', 'hen5at', 'a1b', '2io', 'ex1', 'gr2', '1na', 'con1', 'li1', '1q', 'ter1', '.un1', 'io3n.', 'hy3ph', 's1s', 'c2ce', '1tio'], ['pro-ject'], 3, 2], 'Categories'), ('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', ['table', ['c2ce', '3ty.', 'he2n', '2io', 's1s', '.un1', 'con1', 'hena4', '1p', 'ca1t', 'n2at', '4ing.', 'om1', 'ment1', 'a1b', 'a2n', 'gr2', 'p2h', '1tio', 'li1', 'ex1', '1ca', '1m', 'ter1'], ['ex-cep-tion'], 1, 1], 'ta-ble'), ('control layout', ['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')], [('regression: left hyphen minimum', ['typesetting', ['ex1', 'b2l', '1ble', 'hena4', 'pu2', 'e2x', '.un1', 'a1b', 'r1r', '5nd.', 'con1', 'io3n.', 'c2ce', '1q', 'n2at', 'ter1', 'l1l', '1na', 'o2n', 'hen5at', 'x1c', 's1s', '2io', 'an1d', 'a2n', 'hy3ph', '3ty.', 'n1g', 'at1', '1p', 'gr2', '4ing.', 't1t', '2mp', 'li1', 'ca1t', '1m', 'he2n', 'p2h', '1ca', 'ment1', '1tio', 'm1m', '.re1', 'om1', 'e1c', '.ta4'], [], 2, 3], 'ty-peset-ting'), ('regression: left hyphen minimum', ['grammar', ['c2ce', '5nd.', '1tio', '1m', 'a2n', '1q', 'gr2', 's1s', 'l1l', 'n2at', 'o2n', 'hy3ph', 'n1g', '1na', 'con1', 'e2x', '4ing.', 'at1', 't1t', 'pu2', '.re1', '2mp', 'ment1', 'e1c', 'r1r', '1ca', 'io3n.', 'ex1', 'li1', '.un1', 'x1c', 'a1b', 'p2h'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'gra-m-mar'), ('partial-repair probe', ['Categories', ['t1t', 'ca1t', '1p', '1m', 'r1r', '1ca', '.ta4', 'hen5at', 'a1b', '2io', 'ex1', 'gr2', '1na', 'con1', 'li1', '1q', 'ter1', '.un1', 'io3n.', 'hy3ph', 's1s', 'c2ce', '1tio'], ['pro-ject'], 3, 2], 'Categories'), ('regression: left hyphen minimum', ['Commitment', ['ex1', '.re1', 'io3n.', 'x1c', '1m', '1ble', 'con1', 'a2n', '3ty.', '1p', 'hen5at', 'p2h', 'an1d', 'hena4'], ['ex-cep-tion', 'ta-ble', 'pro-ject'], 3, 3], 'Com-mit-ment'), ('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', ['Pentagon', ['1p', 'he2n', '.re1', 'at1', 'm1m', 'r1r', 'e1c', 'hena4', 'pu2', 'gr2', '1tio', 'ex1', 'n1g', '.ta4', 's1s', 'a2n', 'li1', 'n2at'], ['gram-mar', 'pro-ject'], 3, 1], 'Pentagon'), ('control layout', ['hyphenation', ['hy3ph', '1ble', '.re1', 'ter1', 'r1r', 'n1g', 'e2x', 'ca1t', 'pu2', 'om1', 'c2ce', '2mp', 'ex1', 'b2l'], ['ta-ble'], 1, 2], 'hy-phenation')], [('regression: left hyphen minimum', ['Commitment', ['at1', '1m', 'm1m', '4ing.', 'li1', 'he2n', 'e2x', 'e1c', 'l1l', '3ty.', 'ca1t', 'an1d', 'pu2', 'b2l', 's1s', '1na', 'a2n', 'ex1', '2mp', 'hena4', '1ble', 'om1', '1tio', '.re1', 'ter1', 'hen5at', 't1t', '2io', 'c2ce', 'r1r', 'gr2', 'n2at', 'p2h', 'x1c', 'a1b', 'ment1', 'con1', '.ta4', 'io3n.', '1ca', 'n1g', 'o2n', '5nd.', 'hy3ph', '.un1', '1q'], ['mis-sis-sip-pi'], 2, 1], 'Co-m-mit-ment'), ('regression: left hyphen minimum', ['Commitment', ['x1c', 'b2l', 'at1', 'a2n', 'ment1', 'o2n', 'n1g', 'hen5at', 'io3n.', 'e1c', 'e2x', 't1t', '.ta4', 'he2n', 'an1d', 'n2at', '1q', '1p', 'pu2', 'r1r', 'om1', '1ble', 'c2ce', '3ty.', 'con1', '2io', '1m', 'ter1', 'ca1t', '.re1', '2mp', 'p2h', '1na', '.un1', '5nd.', 'l1l', '4ing.', 'hena4', 'm1m', 's1s', 'ex1', 'li1'], [], 3, 2], 'Com-mit-ment'), ('partial-repair probe', ['hyphenation', ['gr2', '1tio', '1q', 'a2n', 'he2n', 'm1m', 'ment1', 'ca1t', 'an1d', '1p', 'io3n.', 'e1c', 'a1b', 'o2n', 'b2l', 'om1'], ['ex-cep-tion', 'mis-sis-sip-pi'], 3, 2], 'hyphena-tion'), ('partial-repair probe', ['category', ['o2n', '1q', '.ta4', 'r1r', 'x1c', 'pu2', 'n2at', '2mp', 'ment1', '1tio', '.re1', 'a2n', '.un1', 'ex1', 'p2h', 'hy3ph', 'b2l', 'c2ce', '1m', 'ca1t', 'm1m', 's1s', '3ty.', 'io3n.', 'a1b', '5nd.', '4ing.', 'l1l', '2io', 'an1d', 't1t', 'li1'], ['ex-cep-tion', 'gram-mar', 'pro-ject'], 3, 3], 'category'), ('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'), ('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', ['table', ['s1s', 'ca1t', '1ca', '.re1', '2io', '1m', 'he2n', 'p2h', 'ment1', 'e1c', '1q', 'c2ce', 'o2n', 'r1r', 'l1l', 't1t', 'hen5at', 'om1', 'ter1', 'hy3ph', 'gr2', 'e2x', '5nd.', '.un1', '1p', 'b2l', 'a1b', 'x1c', 'n2at', '1ble', 'a2n', 'm1m', '1na', 'pu2', '3ty.', 'io3n.', 'ex1', 'con1', 'n1g', 'at1', 'hena4', 'an1d', '1tio', '.ta4', 'li1', '4ing.', '2mp'], ['mis-sis-sip-pi', 'pro-ject'], 1, 1], 'table'), ('control layout', ['announcement', ['1m', 'ex1', '1ca', '3ty.', '2mp', 'c2ce', 'ment1', '1na', 'hy3ph', 'he2n', 'con1', 'n1g', '1ble', 'om1', 'x1c', 'hen5at', 'e2x', 'n2at', 'm1m', 'ter1', '.re1', 'an1d', '1p', '2io', 'e1c', 'p2h', 'hena4', 'b2l', 'gr2', 'l1l'], ['ex-cep-tion'], 1, 2], 'announce-ment')], [('regression: left hyphen minimum', ['battle', ['.un1', 'ter1', 's1s', 'hena4', '3ty.', '1q', 'r1r', 'gr2', 'io3n.', 'om1', 'e1c', '2mp', '1ble', '.ta4', 'at1', 'ex1', 'a1b', 'a2n', 'e2x', 'he2n', 'pu2', 'o2n', '5nd.', 'hy3ph', 'li1', 'an1d', '2io'], [], 3, 1], 'bat-tle'), ('regression: left hyphen minimum', ['Categories', ['1m', 'ter1', '2io', '2mp', 'ex1', 'b2l', 'c2ce', 'gr2', 'li1', 'x1c', 'con1', 'o2n', 's1s', '.re1', 'ca1t'], ['gram-mar', 'pro-ject'], 2, 3], 'Ca-tegories'), ('partial-repair probe', ['Unexpected', ['1tio', 'l1l', 'li1', '1p', 'pu2', 'ter1', 'an1d', '2mp', '.un1', 'hy3ph', 'io3n.', 'a1b', '.re1', 'he2n', '1na', '2io', 't1t', '3ty.', 'ex1', '1m', 'n2at', 'ca1t', 'b2l', 'o2n', '.ta4', 'r1r', 'x1c', 'at1', 'con1', 'e2x', 'c2ce', '1ca', 'n1g', 'hena4', 's1s', 'm1m', 'e1c', '4ing.', '5nd.', 'gr2'], ['ta-ble'], 3, 1], 'Unex-pe-cted'), ('partial-repair probe', ['Categories', ['5nd.', 'he2n', 'hena4', '1q', 'an1d', '.ta4', 'li1', 'r1r', '1tio', 'x1c', 'om1', '.un1', 'ter1', 'n1g', '3ty.', 'gr2', 'con1', '1ca', 'c2ce', '4ing.', 'ment1', 'pu2', 'hen5at', 'a2n', 'ex1', 'm1m', 'io3n.', 't1t', 'ca1t', '1m', 'o2n'], ['pro-ject', 'gram-mar', 'ta-ble'], 3, 1], 'Categories'), ('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'), ('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', ['understand', ['m1m', '4ing.', '1m', '1q', '1na', 't1t', 'ex1', '.re1'], ['ta-ble', 'mis-sis-sip-pi', 'ex-cep-tion'], 2, 2], 'understand'), ('control layout', ['literally', ['hena4', 'li1', '5nd.', 'om1', 'ex1', 'pu2', '1na', 'ca1t', 'hen5at', 'p2h', 'b2l', 'hy3ph', 's1s', 'ter1'], ['mis-sis-sip-pi'], 1, 3], 'li-ter-ally')]]
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:
Words are hyphenated one letter too late at the start.

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 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: right hyphen minimum', ['running', ['t1t', 'li1', 'b2l', 'm1m', '.un1', 'e2x', 'x1c', 'a2n', 'l1l', 'pu2', 's1s', 'n1g', 'o2n', 'hy3ph', '.re1', '2mp', 'gr2', '2io', '.ta4', '1m', 'at1', '1p', 'e1c', 'c2ce', '1tio', '5nd.', 'hena4', 'he2n', '1ble', 'ment1', '3ty.', 'p2h', 'ca1t', 'ter1', 'hen5at', 'om1', 'a1b', 'ex1', 'an1d', 'con1', '4ing.', 'r1r', '1na', '1q', '1ca', 'n2at', 'io3n.'], ['ex-cep-tion', 'ta-ble'], 2, 1], 'runnin-g'), ('regression: right hyphen minimum', ['Mississippi', ['1q', '1tio', 'n1g', 'e2x', 'ca1t', '1p', 'hen5at', 'hena4', 'gr2', 'n2at', 'an1d', 'x1c', 'ment1', 'r1r', 'io3n.', '.un1', '.re1', 'c2ce', '1ble', 'hy3ph', '3ty.', '5nd.', 'e1c', 't1t', 'pu2', '.ta4', 'm1m', 'b2l', 'o2n', 'a1b', 'li1', 'he2n', 's1s', '4ing.'], ['ex-cep-tion'], 1, 3], 'Mis-sis-si-ppi'), ('partial-repair probe', ['understand', ['io3n.', 'n1g', 'x1c', 'e1c', 'l1l', 'con1', 's1s', 'm1m', 'li1', '.re1', '2mp', 'ter1', '1ca', 'hena4', '5nd.', 'an1d', '3ty.', 'b2l', 't1t', 'ex1', 'c2ce', 'om1', '1tio', '4ing.', 'e2x', 'hy3ph', '1p', 'a1b', 'pu2', 'he2n', 'ment1', '1ble', 'gr2', 'hen5at', '.ta4', 'r1r', '.un1', '1m', 'n2at', 'ca1t', 'p2h', '1na', '2io', '1q'], ['ta-ble', 'gram-mar', 'ex-cep-tion'], 2, 3], 'un-derstand'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('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'), ('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', ['connection', ['.un1', 'ment1', 'ter1', '.re1', '1m', '1q', 'a1b', 'hena4', 'e1c', 'm1m', '1ble', 'p2h', 'c2ce', 'o2n', 'n1g', 'pu2', 'e2x', '1tio', 'x1c', 'r1r', 's1s', 'om1', 'con1', 'ex1'], ['pro-ject', 'ta-ble'], 3, 1], 'con-ne-c-tion'), ('control layout', ['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')], [('regression: right hyphen minimum', ['running', ['e1c', 'at1', '5nd.', '1na', 'hena4', 'pu2', 'li1', 'r1r', '2mp', '.ta4', '2io', 'ment1', 'an1d', 't1t', 'p2h', '.re1', '1m', 'ter1', 'hy3ph', 'ex1', 'n2at', '1tio', 'om1', 'b2l', 'c2ce', '4ing.', 'io3n.', 'con1', 'a2n', 'gr2', '.un1', 'a1b', 'x1c', '1ca', 'o2n', 'm1m', 'n1g'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 1], 'runnin-g'), ('regression: right hyphen minimum', ['literally', ['n2at', 'c2ce', '1q', '5nd.', 'p2h', '1p', '2io', 'l1l', '1ble', 'con1', 'n1g', '.ta4', 'r1r', 'he2n', '4ing.', 'hen5at', '2mp', 's1s', 'om1', '3ty.', 'hy3ph', '.un1', 'x1c', 'io3n.', 'a1b', 'an1d', 't1t', '1tio', 'li1', 'm1m', '1ca', 'ex1', '1na', '.re1', 'at1', 'pu2', 'e1c', 'gr2', '1m'], [], 1, 2], 'li-teral-ly'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('partial-repair probe', ['Paragraph', ['x1c', '1na', 'n1g', 'b2l', 'hen5at', '.un1', '.ta4', 'con1', '1q', 'a2n', 'hena4', 'gr2', 'a1b', 'm1m', 'r1r', '1ca', 'n2at', 'c2ce', 'e1c', '4ing.', '2io', 's1s', 'io3n.', 'ex1', 'hy3ph', 'an1d', 'o2n', '1p', 'he2n', 'om1', 't1t', '1m', '.re1', 'at1', 'li1', '1tio'], ['ta-ble', 'gram-mar'], 1, 3], 'Paragraph'), ('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', ['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'), ('control layout', ['computer', ['ment1', 'gr2', 'pu2', 'hy3ph', 'r1r', '2mp', 'o2n', 'c2ce', 'a2n', '2io', '.re1', 's1s', 'hen5at', '.un1', 'm1m', 'hena4', '4ing.', 'x1c', 'ex1', 'ca1t', 'a1b', 'io3n.', 'l1l', '5nd.', '1m', '3ty.', 'n2at', 'ter1', '1ble', '1q', '1p', 'b2l', 'li1', 'e1c', '1ca', 'he2n'], ['ta-ble'], 2, 3], 'com-puter')], [('regression: right hyphen minimum', ['grammar', ['1p', 'io3n.', 'r1r', '4ing.', 'li1', 'ca1t', 'e1c', '1m', 'ment1', '.ta4', 'hen5at', 'm1m', 'ex1', '.un1', 'at1', 'gr2', '1na', 'an1d', '3ty.', '.re1', 'l1l', '2mp', 'a2n', 'b2l', '2io', 'c2ce', 'n1g', 'he2n', 'o2n', '1ca', '1tio', '1q'], ['ta-ble', 'pro-ject'], 2, 3], 'gra-m-mar'), ('regression: right hyphen minimum', ['understand', ['b2l', '1ca', '1m', '1tio', '2mp', 'ment1', 't1t', '1p', '.ta4', 'li1', 'e1c', '1q', '4ing.', 'ex1', '5nd.', 'om1', 'o2n', 'hen5at', 'l1l', 'ter1', 'hena4', '.un1', 'r1r', 'pu2', 'p2h'], ['mis-sis-sip-pi'], 3, 2], 'understa-nd'), ('partial-repair probe', ['hyphenation', ['ter1', 'b2l', 'o2n', '5nd.', 'e1c', '.ta4', 'n1g', 'om1', 'hena4', 'pu2', 'l1l', 'a2n', 'r1r', 'hy3ph', 't1t', '.re1', '1p', 'e2x', '1q', 'ca1t', '3ty.', '2mp', '1m', 'ment1', '4ing.', 'x1c', '1ble', 'p2h', 'li1', 'c2ce', 'n2at', '2io', 'an1d', 'con1', 'io3n.', 'm1m', 'gr2', 'ex1', '1na'], ['gram-mar'], 2, 2], 'hy-phe-nation'), ('partial-repair probe', ['Paragraph', ['1na', '1ca', '2io', '3ty.', 'p2h', '1p', '.un1', 'a1b', 'an1d', 'li1', 'io3n.', '1m', 'a2n', 'n1g'], [], 1, 3], 'Paragraph'), ('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', ['Paragraph', ['1m', '2mp', '.ta4', 'hy3ph', 'pu2', 'e2x', 'om1', '1tio', 'at1', '.un1', 'n2at', '1na', 'hena4', 'r1r', 'ca1t', '1q', '2io', '.re1', 'a2n', 'n1g', 'o2n', 'ter1', 'l1l', 'x1c', 'p2h', 'con1', '5nd.', 'he2n', '4ing.', 'b2l', 'm1m', '1ble', '1p', 'c2ce', 's1s'], ['gram-mar', 'pro-ject'], 3, 1], 'Paragra-ph'), ('control layout', ['Recreation', ['li1', 'an1d', 'at1', '1ble', 'io3n.', 'a2n', 'e2x', '1tio', '.un1', '3ty.', 'r1r', '2io', 'e1c', 'he2n', '1m', 'om1', 'hen5at', '.ta4', 'n1g', 'a1b', 'ment1', 'p2h', '4ing.', '.re1', '1na', 'b2l', 'c2ce', 't1t'], ['mis-sis-sip-pi', 'ex-cep-tion'], 2, 3], 'Re-crea-tion')], [('regression: right hyphen minimum', ['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: right hyphen minimum', ['Mississippi', ['5nd.', 'n2at', 'hena4', 'r1r', 'om1', 'e2x', 'hy3ph', 'an1d', '1p', 't1t', 'o2n', '.ta4', 'n1g', 'x1c', 'ter1', 's1s', 'li1', 'gr2', '2mp', '3ty.', 'p2h', 'c2ce', 'ex1', 'l1l', 'm1m', 'at1', 'a2n', '1ble', '4ing.', 'io3n.', '1tio', 'pu2', 'ca1t', '1m', 'a1b', 'con1', '.un1'], [], 1, 2], 'Mis-sis-si-p-pi'), ('partial-repair probe', ['Paragraph', ['s1s', 'io3n.', 'ca1t', 'x1c', 'hen5at', '.un1', '2mp', '4ing.', 'l1l', '1m', '1tio', 'gr2', 'b2l', '3ty.', 't1t', 'a1b', 'e1c', 'c2ce', 'pu2', 'ter1', 'o2n', '1q', 'r1r', '1p', 'm1m', 'n2at'], ['pro-ject'], 3, 3], 'Paragraph'), ('partial-repair probe', ['typesetting', ['he2n', '5nd.', 'x1c', '2mp', 'e1c', 'ment1', 'p2h', 'ca1t', 'a2n', 'hena4', '1tio', '.re1', 'gr2', 'hen5at', 'hy3ph', 'ex1', 'an1d', 'pu2', 'm1m', 't1t', '1ble', '1ca', 'b2l', 'n1g', '2io', 'r1r', '.un1', 'o2n', '4ing.', '.ta4', '1p', '3ty.', 'io3n.', 'e2x', 's1s', '1m', 'l1l', '1na', 'ter1'], [], 3, 2], 'typeset-ting'), ('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', ['Unexpected', ['1m', '1tio', 'ment1', 'm1m', 'c2ce', 'r1r', '1ca', '4ing.'], [], 1, 3], 'Unexpected'), ('control layout', ['battle', ['m1m', '3ty.', 'at1', '.un1', '2io', 'c2ce', '.ta4', 'gr2', 'an1d', '5nd.', 'a2n', 'he2n', 'p2h', 'li1', 'io3n.', '2mp', '4ing.', 't1t', '.re1', 'x1c', '1q', 'hena4', 'con1', 'n1g', 'a1b', 'n2at', 'e2x', 'om1', 'l1l', 'ter1', 'o2n', '1m', '1ble', 'ment1', '1p', 's1s', 'b2l', '1tio', '1ca', 'e1c', 'hy3ph', 'r1r', 'ex1', 'ca1t'], ['mis-sis-sip-pi', 'pro-ject'], 3, 2], 'bat-tle')], [('regression: right hyphen minimum', ['hyphenation', ['a2n', 'at1', 'e1c', '1tio', 'p2h', 'n2at', 'gr2', 'pu2', '.re1', 'an1d', 'ca1t', 'e2x', 't1t', 'l1l', '1ca', 'n1g', '1p', 'li1', '3ty.', 'hy3ph', '5nd.', '.un1', 'c2ce', '.ta4', 'om1', '1na'], ['pro-ject', 'gram-mar'], 1, 3], 'hy-phe-na-t-ion'), ('regression: right hyphen minimum', ['hyphenation', ['5nd.', 'om1', 'm1m', '1ca', 'a2n', '.ta4', 'o2n', 'an1d', 'ca1t', 'x1c', 'ter1', 'p2h', '1tio', 'n2at', 'hena4', '1ble', 'ex1', 'n1g', 's1s', 'io3n.', '1q', '2io', 'e2x', 'r1r', '1p', 't1t', 'gr2', 'ment1', 'hy3ph', 'l1l', '4ing.', '1m', 'pu2', '2mp', 'a1b', 'con1', 'b2l', '.re1', 'li1', '3ty.'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 2, 1], 'hy-phenatio-n'), ('partial-repair probe', ['understand', ['1na', 'ment1', 'x1c', 'l1l', 'b2l', '.un1', 'gr2', 'an1d', '1p', '2mp', '2io', '1q', 'hen5at', 'hy3ph', 'a1b', 'n2at', 'om1', '5nd.', '3ty.', 'ex1', 'he2n', 'n1g', 'at1', 'ter1'], [], 1, 3], 'un-derstand'), ('partial-repair probe', ['running', ['p2h', '1m', '5nd.', 'c2ce', '1q', 'hen5at', '1ca', 'ment1', 's1s', 'io3n.', 'ex1', 'x1c', 'he2n', 'hy3ph', 'e2x', '2mp', '1tio', 'a2n', 'l1l', '1na', 'm1m', '3ty.', 'at1', 'ter1', 't1t', 'gr2', 'om1', '.ta4', 'ca1t', 'n2at', 'e1c', 'b2l', 'r1r', 'o2n', '1ble', '2io', '4ing.', 'con1', 'pu2', 'n1g', '.un1', 'hena4', 'a1b', '.re1', 'an1d'], ['gram-mar', 'mis-sis-sip-pi', 'pro-ject'], 2, 2], 'running'), ('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'), ('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', ['Paragraph', ['1ble', 'e2x', 'hena4', '1p', '3ty.', 'hy3ph', 's1s', 'n1g', '.ta4', 'io3n.', '2io', '.un1', 'at1'], [], 3, 1], 'Paragra-ph'), ('control layout', ['Table', ['ment1', 'o2n', '1ca', 'n2at', '5nd.', 'x1c', '2io', 'hena4', 'con1', 'l1l', 'ter1', 'r1r', 't1t', 'hen5at', '.un1', 'io3n.', '1m', '1tio', 'm1m', 'e1c', 'ca1t', 'p2h', '.re1', 'a2n', 'pu2', 'an1d'], [], 1, 3], '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)

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 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 - 1]
    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: right hyphen minimum', ['running', ['t1t', 'li1', 'b2l', 'm1m', '.un1', 'e2x', 'x1c', 'a2n', 'l1l', 'pu2', 's1s', 'n1g', 'o2n', 'hy3ph', '.re1', '2mp', 'gr2', '2io', '.ta4', '1m', 'at1', '1p', 'e1c', 'c2ce', '1tio', '5nd.', 'hena4', 'he2n', '1ble', 'ment1', '3ty.', 'p2h', 'ca1t', 'ter1', 'hen5at', 'om1', 'a1b', 'ex1', 'an1d', 'con1', '4ing.', 'r1r', '1na', '1q', '1ca', 'n2at', 'io3n.'], ['ex-cep-tion', 'ta-ble'], 2, 1], 'runnin-g'), ('regression: right hyphen minimum', ['Mississippi', ['1q', '1tio', 'n1g', 'e2x', 'ca1t', '1p', 'hen5at', 'hena4', 'gr2', 'n2at', 'an1d', 'x1c', 'ment1', 'r1r', 'io3n.', '.un1', '.re1', 'c2ce', '1ble', 'hy3ph', '3ty.', '5nd.', 'e1c', 't1t', 'pu2', '.ta4', 'm1m', 'b2l', 'o2n', 'a1b', 'li1', 'he2n', 's1s', '4ing.'], ['ex-cep-tion'], 1, 3], 'Mis-sis-si-ppi'), ('partial-repair probe', ['understand', ['io3n.', 'n1g', 'x1c', 'e1c', 'l1l', 'con1', 's1s', 'm1m', 'li1', '.re1', '2mp', 'ter1', '1ca', 'hena4', '5nd.', 'an1d', '3ty.', 'b2l', 't1t', 'ex1', 'c2ce', 'om1', '1tio', '4ing.', 'e2x', 'hy3ph', '1p', 'a1b', 'pu2', 'he2n', 'ment1', '1ble', 'gr2', 'hen5at', '.ta4', 'r1r', '.un1', '1m', 'n2at', 'ca1t', 'p2h', '1na', '2io', '1q'], ['ta-ble', 'gram-mar', 'ex-cep-tion'], 2, 3], 'un-derstand'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('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'), ('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', ['connection', ['.un1', 'ment1', 'ter1', '.re1', '1m', '1q', 'a1b', 'hena4', 'e1c', 'm1m', '1ble', 'p2h', 'c2ce', 'o2n', 'n1g', 'pu2', 'e2x', '1tio', 'x1c', 'r1r', 's1s', 'om1', 'con1', 'ex1'], ['pro-ject', 'ta-ble'], 3, 1], 'con-ne-c-tion'), ('control layout', ['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')], [('regression: right hyphen minimum', ['running', ['e1c', 'at1', '5nd.', '1na', 'hena4', 'pu2', 'li1', 'r1r', '2mp', '.ta4', '2io', 'ment1', 'an1d', 't1t', 'p2h', '.re1', '1m', 'ter1', 'hy3ph', 'ex1', 'n2at', '1tio', 'om1', 'b2l', 'c2ce', '4ing.', 'io3n.', 'con1', 'a2n', 'gr2', '.un1', 'a1b', 'x1c', '1ca', 'o2n', 'm1m', 'n1g'], ['pro-ject', 'gram-mar', 'ta-ble'], 1, 1], 'runnin-g'), ('regression: right hyphen minimum', ['literally', ['n2at', 'c2ce', '1q', '5nd.', 'p2h', '1p', '2io', 'l1l', '1ble', 'con1', 'n1g', '.ta4', 'r1r', 'he2n', '4ing.', 'hen5at', '2mp', 's1s', 'om1', '3ty.', 'hy3ph', '.un1', 'x1c', 'io3n.', 'a1b', 'an1d', 't1t', '1tio', 'li1', 'm1m', '1ca', 'ex1', '1na', '.re1', 'at1', 'pu2', 'e1c', 'gr2', '1m'], [], 1, 2], 'li-teral-ly'), ('partial-repair probe', ['understand', ['ca1t', 'l1l', 'an1d', 'n2at', 'a2n', 'gr2', 'c2ce', '3ty.', '1m', 'r1r', '1na', '2mp', 'he2n', '4ing.', 'ter1', 'a1b', 'om1', 'e1c', 'hen5at', 'n1g', '1ca', 'm1m', '2io', 'b2l', '.un1', 'pu2', 'hena4', 'o2n', '1p'], ['mis-sis-sip-pi', 'ta-ble'], 3, 2], 'understand'), ('partial-repair probe', ['Paragraph', ['x1c', '1na', 'n1g', 'b2l', 'hen5at', '.un1', '.ta4', 'con1', '1q', 'a2n', 'hena4', 'gr2', 'a1b', 'm1m', 'r1r', '1ca', 'n2at', 'c2ce', 'e1c', '4ing.', '2io', 's1s', 'io3n.', 'ex1', 'hy3ph', 'an1d', 'o2n', '1p', 'he2n', 'om1', 't1t', '1m', '.re1', 'at1', 'li1', '1tio'], ['ta-ble', 'gram-mar'], 1, 3], 'Paragraph'), ('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', ['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'), ('control layout', ['computer', ['ment1', 'gr2', 'pu2', 'hy3ph', 'r1r', '2mp', 'o2n', 'c2ce', 'a2n', '2io', '.re1', 's1s', 'hen5at', '.un1', 'm1m', 'hena4', '4ing.', 'x1c', 'ex1', 'ca1t', 'a1b', 'io3n.', 'l1l', '5nd.', '1m', '3ty.', 'n2at', 'ter1', '1ble', '1q', '1p', 'b2l', 'li1', 'e1c', '1ca', 'he2n'], ['ta-ble'], 2, 3], 'com-puter')], [('regression: right hyphen minimum', ['grammar', ['1p', 'io3n.', 'r1r', '4ing.', 'li1', 'ca1t', 'e1c', '1m', 'ment1', '.ta4', 'hen5at', 'm1m', 'ex1', '.un1', 'at1', 'gr2', '1na', 'an1d', '3ty.', '.re1', 'l1l', '2mp', 'a2n', 'b2l', '2io', 'c2ce', 'n1g', 'he2n', 'o2n', '1ca', '1tio', '1q'], ['ta-ble', 'pro-ject'], 2, 3], 'gra-m-mar'), ('regression: right hyphen minimum', ['understand', ['b2l', '1ca', '1m', '1tio', '2mp', 'ment1', 't1t', '1p', '.ta4', 'li1', 'e1c', '1q', '4ing.', 'ex1', '5nd.', 'om1', 'o2n', 'hen5at', 'l1l', 'ter1', 'hena4', '.un1', 'r1r', 'pu2', 'p2h'], ['mis-sis-sip-pi'], 3, 2], 'understa-nd'), ('partial-repair probe', ['hyphenation', ['ter1', 'b2l', 'o2n', '5nd.', 'e1c', '.ta4', 'n1g', 'om1', 'hena4', 'pu2', 'l1l', 'a2n', 'r1r', 'hy3ph', 't1t', '.re1', '1p', 'e2x', '1q', 'ca1t', '3ty.', '2mp', '1m', 'ment1', '4ing.', 'x1c', '1ble', 'p2h', 'li1', 'c2ce', 'n2at', '2io', 'an1d', 'con1', 'io3n.', 'm1m', 'gr2', 'ex1', '1na'], ['gram-mar'], 2, 2], 'hy-phe-nation'), ('partial-repair probe', ['Paragraph', ['1na', '1ca', '2io', '3ty.', 'p2h', '1p', '.un1', 'a1b', 'an1d', 'li1', 'io3n.', '1m', 'a2n', 'n1g'], [], 1, 3], 'Paragraph'), ('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', ['Paragraph', ['1m', '2mp', '.ta4', 'hy3ph', 'pu2', 'e2x', 'om1', '1tio', 'at1', '.un1', 'n2at', '1na', 'hena4', 'r1r', 'ca1t', '1q', '2io', '.re1', 'a2n', 'n1g', 'o2n', 'ter1', 'l1l', 'x1c', 'p2h', 'con1', '5nd.', 'he2n', '4ing.', 'b2l', 'm1m', '1ble', '1p', 'c2ce', 's1s'], ['gram-mar', 'pro-ject'], 3, 1], 'Paragra-ph'), ('control layout', ['Recreation', ['li1', 'an1d', 'at1', '1ble', 'io3n.', 'a2n', 'e2x', '1tio', '.un1', '3ty.', 'r1r', '2io', 'e1c', 'he2n', '1m', 'om1', 'hen5at', '.ta4', 'n1g', 'a1b', 'ment1', 'p2h', '4ing.', '.re1', '1na', 'b2l', 'c2ce', 't1t'], ['mis-sis-sip-pi', 'ex-cep-tion'], 2, 3], 'Re-crea-tion')], [('regression: right hyphen minimum', ['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: right hyphen minimum', ['Mississippi', ['5nd.', 'n2at', 'hena4', 'r1r', 'om1', 'e2x', 'hy3ph', 'an1d', '1p', 't1t', 'o2n', '.ta4', 'n1g', 'x1c', 'ter1', 's1s', 'li1', 'gr2', '2mp', '3ty.', 'p2h', 'c2ce', 'ex1', 'l1l', 'm1m', 'at1', 'a2n', '1ble', '4ing.', 'io3n.', '1tio', 'pu2', 'ca1t', '1m', 'a1b', 'con1', '.un1'], [], 1, 2], 'Mis-sis-si-p-pi'), ('partial-repair probe', ['Paragraph', ['s1s', 'io3n.', 'ca1t', 'x1c', 'hen5at', '.un1', '2mp', '4ing.', 'l1l', '1m', '1tio', 'gr2', 'b2l', '3ty.', 't1t', 'a1b', 'e1c', 'c2ce', 'pu2', 'ter1', 'o2n', '1q', 'r1r', '1p', 'm1m', 'n2at'], ['pro-ject'], 3, 3], 'Paragraph'), ('partial-repair probe', ['typesetting', ['he2n', '5nd.', 'x1c', '2mp', 'e1c', 'ment1', 'p2h', 'ca1t', 'a2n', 'hena4', '1tio', '.re1', 'gr2', 'hen5at', 'hy3ph', 'ex1', 'an1d', 'pu2', 'm1m', 't1t', '1ble', '1ca', 'b2l', 'n1g', '2io', 'r1r', '.un1', 'o2n', '4ing.', '.ta4', '1p', '3ty.', 'io3n.', 'e2x', 's1s', '1m', 'l1l', '1na', 'ter1'], [], 3, 2], 'typeset-ting'), ('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', ['Unexpected', ['1m', '1tio', 'ment1', 'm1m', 'c2ce', 'r1r', '1ca', '4ing.'], [], 1, 3], 'Unexpected'), ('control layout', ['battle', ['m1m', '3ty.', 'at1', '.un1', '2io', 'c2ce', '.ta4', 'gr2', 'an1d', '5nd.', 'a2n', 'he2n', 'p2h', 'li1', 'io3n.', '2mp', '4ing.', 't1t', '.re1', 'x1c', '1q', 'hena4', 'con1', 'n1g', 'a1b', 'n2at', 'e2x', 'om1', 'l1l', 'ter1', 'o2n', '1m', '1ble', 'ment1', '1p', 's1s', 'b2l', '1tio', '1ca', 'e1c', 'hy3ph', 'r1r', 'ex1', 'ca1t'], ['mis-sis-sip-pi', 'pro-ject'], 3, 2], 'bat-tle')], [('regression: right hyphen minimum', ['hyphenation', ['a2n', 'at1', 'e1c', '1tio', 'p2h', 'n2at', 'gr2', 'pu2', '.re1', 'an1d', 'ca1t', 'e2x', 't1t', 'l1l', '1ca', 'n1g', '1p', 'li1', '3ty.', 'hy3ph', '5nd.', '.un1', 'c2ce', '.ta4', 'om1', '1na'], ['pro-ject', 'gram-mar'], 1, 3], 'hy-phe-na-t-ion'), ('regression: right hyphen minimum', ['hyphenation', ['5nd.', 'om1', 'm1m', '1ca', 'a2n', '.ta4', 'o2n', 'an1d', 'ca1t', 'x1c', 'ter1', 'p2h', '1tio', 'n2at', 'hena4', '1ble', 'ex1', 'n1g', 's1s', 'io3n.', '1q', '2io', 'e2x', 'r1r', '1p', 't1t', 'gr2', 'ment1', 'hy3ph', 'l1l', '4ing.', '1m', 'pu2', '2mp', 'a1b', 'con1', 'b2l', '.re1', 'li1', '3ty.'], ['gram-mar', 'mis-sis-sip-pi', 'ta-ble'], 2, 1], 'hy-phenatio-n'), ('partial-repair probe', ['understand', ['1na', 'ment1', 'x1c', 'l1l', 'b2l', '.un1', 'gr2', 'an1d', '1p', '2mp', '2io', '1q', 'hen5at', 'hy3ph', 'a1b', 'n2at', 'om1', '5nd.', '3ty.', 'ex1', 'he2n', 'n1g', 'at1', 'ter1'], [], 1, 3], 'un-derstand'), ('partial-repair probe', ['running', ['p2h', '1m', '5nd.', 'c2ce', '1q', 'hen5at', '1ca', 'ment1', 's1s', 'io3n.', 'ex1', 'x1c', 'he2n', 'hy3ph', 'e2x', '2mp', '1tio', 'a2n', 'l1l', '1na', 'm1m', '3ty.', 'at1', 'ter1', 't1t', 'gr2', 'om1', '.ta4', 'ca1t', 'n2at', 'e1c', 'b2l', 'r1r', 'o2n', '1ble', '2io', '4ing.', 'con1', 'pu2', 'n1g', '.un1', 'hena4', 'a1b', '.re1', 'an1d'], ['gram-mar', 'mis-sis-sip-pi', 'pro-ject'], 2, 2], 'running'), ('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'), ('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', ['Paragraph', ['1ble', 'e2x', 'hena4', '1p', '3ty.', 'hy3ph', 's1s', 'n1g', '.ta4', 'io3n.', '2io', '.un1', 'at1'], [], 3, 1], 'Paragra-ph'), ('control layout', ['Table', ['ment1', 'o2n', '1ca', 'n2at', '5nd.', 'x1c', '2io', 'hena4', 'con1', 'l1l', 'ter1', 'r1r', 't1t', 'hen5at', '.un1', 'io3n.', '1m', '1tio', 'm1m', 'e1c', 'ca1t', 'p2h', '.re1', 'a2n', 'pu2', 'an1d'], [], 1, 3], '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:
The last legal hyphen before the word end is suppressed.

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