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

N = 1
observations = []
def solve(x):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                continue
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, -1, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['(({{[(a){a)', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'R'], 4], []), ('regression: stack overflow handling', ['{[)(a([]a({](', ['ON', 'ON', 'ON', 'R', 'L', 'R', 'ON', 'L', 'L', 'L', 'L', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['{a[}(((', ['ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[(a[(}[[{', ['ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], []), ('control layout', ['][}((}(()([', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON'], 3], [[6, 8]])], [('regression: stack overflow handling', ['](](a)(](', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['{}((}{[}(())(', ['R', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 2], []), ('regression: stack overflow handling', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('regression: stack overflow handling', ['{}({a{{(()](}', ['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('control layout', [')]])([', ['R', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack overflow handling', ['(][})([{({a]a]', ['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'L', 'R'], 2], [[0, 4]]), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['(()[{a{[[((}', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a][a', ['L', 'L', 'ON', 'R'], 3], []), ('control layout', ['a))(', ['L', 'L', 'ON', 'L'], 3], [])], [('regression: stack overflow handling', ['[([{{(]]', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('partial-repair probe', ['()}][[a[(({}}{', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['][', ['ON', 'ON'], 1], []), ('control layout', [')a}]', ['L', 'R', 'ON', 'ON'], 4], [])], [('regression: stack overflow handling', ['[]([[]a)})[', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[0, 1]]), ('regression: stack overflow handling', ['[a{a]})]([}', ['ON', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['(]{[}', ['ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('partial-repair probe', ['{]a[)][(', ['ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON'], 1], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[)[a{{{(', ['L', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], 3], []), ('control layout', ['(([)([', ['ON', 'ON', 'ON', 'ON', 'ON', 'L'], 3], [[1, 3]])]]
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):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) > limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, -1, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['(({{[(a){a)', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'R'], 4], []), ('regression: stack overflow handling', ['{[)(a([]a({](', ['ON', 'ON', 'ON', 'R', 'L', 'R', 'ON', 'L', 'L', 'L', 'L', 'ON', 'ON'], 2], []), ('regression: stack overflow handling', ['{a[}(((', ['ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[(a[(}[[{', ['ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], []), ('control layout', ['][}((}(()([', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON'], 3], [[6, 8]])], [('regression: stack overflow handling', ['](](a)(](', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['{}((}{[}(())(', ['R', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 2], []), ('regression: stack overflow handling', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('regression: stack overflow handling', ['{}({a{{(()](}', ['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('control layout', [')]])([', ['R', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack overflow handling', ['(][})([{({a]a]', ['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'L', 'R'], 2], [[0, 4]]), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['(()[{a{[[((}', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a][a', ['L', 'L', 'ON', 'R'], 3], []), ('control layout', ['a))(', ['L', 'L', 'ON', 'L'], 3], [])], [('regression: stack overflow handling', ['[([{{(]]', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], 1], []), ('regression: stack overflow handling', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('partial-repair probe', ['()}][[a[(({}}{', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], []), ('regression: stack overflow handling', ['[]a}}[](a](((', ['ON', 'R', 'R', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 1], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['][', ['ON', 'ON'], 1], []), ('control layout', [')a}]', ['L', 'R', 'ON', 'ON'], 4], [])], [('regression: stack overflow handling', ['[]([[]a)})[', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[0, 1]]), ('regression: stack overflow handling', ['[a{a]})]([}', ['ON', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('regression: stack overflow handling', ['(]{[}', ['ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('partial-repair probe', ['{]a[)][(', ['ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON'], 1], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[)[a{{{(', ['L', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], 3], []), ('control layout', ['(([)([', ['ON', 'ON', 'ON', 'ON', 'ON', 'L'], 3], [[1, 3]])]]
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:
Pairs keep being found after the opener stack overflowed.

Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.

split: open-access


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

N = 1
observations = []
def solve(x):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            if stack and stack[-1][0] == ch:
                pairs.append([stack[-1][1], i])
                stack.pop()
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['(][}([())}}(]', ['ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 8]]), ('regression: mismatched closer search', ['a([{][[}()]()(', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON'], 4], [[1, 12], [2, 4], [8, 9]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a](((', ['L', 'L', 'ON', 'R', 'ON'], 3], []), ('control layout', ['a([([', ['R', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['(a)a)[(]{(]}a)', ['ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'L', 'L', 'ON'], 3], [[0, 2], [5, 7]]), ('regression: mismatched closer search', ['{][{(a}([{(({', ['ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON'], 4], [[3, 6]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('control layout', ['{}]]a(', ['ON', 'ON', 'R', 'ON', 'R', 'ON'], 4], [[0, 1]])], [('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['{[(]aa)a][', ['ON', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON', 'L'], 3], [[1, 3]]), ('regression: mismatched closer search', ['{(}){aa{(', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON'], 3], [[0, 2]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['(a', ['ON', 'L'], 3], []), ('control layout', ['[(', ['ON', 'ON'], 2], [])], [('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['[a{({)', ['ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[3, 5]]), ('regression: mismatched closer search', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: mismatched closer search', ['a{({[}}]]((', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['(}(', ['ON', 'ON', 'L'], 1], []), ('control layout', [')([()[]a((})', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['}(}}[))}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 4], [[1, 5]]), ('regression: mismatched closer search', ['{(}{(', ['ON', 'ON', 'ON', 'R', 'ON'], 3], [[0, 2]]), ('regression: mismatched closer search', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: mismatched closer search', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 4], [])]]
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):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, -1, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k]
                    break
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['(][}([())}}(]', ['ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 8]]), ('regression: mismatched closer search', ['a([{][[}()]()(', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON'], 4], [[1, 12], [2, 4], [8, 9]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a](((', ['L', 'L', 'ON', 'R', 'ON'], 3], []), ('control layout', ['a([([', ['R', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['(a)a)[(]{(]}a)', ['ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'L', 'L', 'ON'], 3], [[0, 2], [5, 7]]), ('regression: mismatched closer search', ['{][{(a}([{(({', ['ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON'], 4], [[3, 6]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('control layout', ['{}]]a(', ['ON', 'ON', 'R', 'ON', 'R', 'ON'], 4], [[0, 1]])], [('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['{[(]aa)a][', ['ON', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON', 'L'], 3], [[1, 3]]), ('regression: mismatched closer search', ['{(}){aa{(', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON'], 3], [[0, 2]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['(a', ['ON', 'L'], 3], []), ('control layout', ['[(', ['ON', 'ON'], 2], [])], [('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['[a{({)', ['ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[3, 5]]), ('regression: mismatched closer search', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: mismatched closer search', ['a{({[}}]]((', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['(}(', ['ON', 'ON', 'L'], 1], []), ('control layout', [')([()[]a((})', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['}(}}[))}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 4], [[1, 5]]), ('regression: mismatched closer search', ['{(}{(', ['ON', 'ON', 'ON', 'R', 'ON'], 3], [[0, 2]]), ('regression: mismatched closer search', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: mismatched closer search', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 4], [])]]
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:
A closer that does not match the top opener is dropped although its opener is deeper.

Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.

split: open-access


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

N = 1
observations = []
def solve(x):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, -1, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return pairs
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('regression: pair ordering', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: pair ordering', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: pair ordering', ['a}((())a{', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'L'], 4], [[2, 6], [3, 5]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')([((})}(a}{}(', ['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['({([[{{', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: pair ordering', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', ['([)[{{}]}]({{', ['ON', 'R', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L'], 2], [[0, 2], [4, 8], [5, 6]]), ('regression: pair ordering', ['a}((())a{', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'L'], 4], [[2, 6], [3, 5]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['((aa]{[(a{', ['R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R', 'R', 'ON'], 4], []), ('control layout', ['){}', ['ON', 'ON', 'L'], 2], [])], [('regression: pair ordering', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('regression: pair ordering', ['{[()}{]a', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L'], 2], [[1, 6], [2, 3]]), ('regression: pair ordering', ['((][{]a{{)}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 4], [[1, 9], [3, 5]]), ('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[{({[}[)](', ['ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('control layout', ['a]]{)a((](a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [])], [('regression: pair ordering', ['{(a)]]})a}(][[', ['ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 6], [1, 3]]), ('regression: pair ordering', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['()(}a}(', ['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 1]]), ('control layout', ['(a)a(((()', ['ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 2]])], [('regression: pair ordering', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('regression: pair ordering', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[[}{(](', ['R', 'ON', 'R', 'ON', 'L', 'ON', 'ON'], 4], [[1, 5]]), ('control layout', ['([(]}}))(}a(', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 3], [[2, 6]])]]
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):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, -1, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return sorted(pairs, key=lambda p: p[1])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('regression: pair ordering', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: pair ordering', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: pair ordering', ['a}((())a{', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'L'], 4], [[2, 6], [3, 5]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', [')([((})}(a}{}(', ['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['({([[{{', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: pair ordering', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', ['([)[{{}]}]({{', ['ON', 'R', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L'], 2], [[0, 2], [4, 8], [5, 6]]), ('regression: pair ordering', ['a}((())a{', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'L'], 4], [[2, 6], [3, 5]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['((aa]{[(a{', ['R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'R', 'R', 'ON'], 4], []), ('control layout', ['){}', ['ON', 'ON', 'L'], 2], [])], [('regression: pair ordering', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('regression: pair ordering', ['{[()}{]a', ['L', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L'], 2], [[1, 6], [2, 3]]), ('regression: pair ordering', ['((][{]a{{)}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'R'], 4], [[1, 9], [3, 5]]), ('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['[[{({[}[)](', ['ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 1], []), ('control layout', ['a]]{)a((](a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [])], [('regression: pair ordering', ['{(a)]]})a}(][[', ['ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 6], [1, 3]]), ('regression: pair ordering', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['()(}a}(', ['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 1]]), ('control layout', ['(a)a(((()', ['ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 2]])], [('regression: pair ordering', [')a{{a}]}({', ['L', 'L', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 7], [3, 5]]), ('regression: pair ordering', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: pair ordering', ['((}}(){{){', ['ON', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[0, 8], [4, 5]]), ('regression: pair ordering', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[[}{(](', ['R', 'ON', 'R', 'ON', 'L', 'ON', 'ON'], 4], [[1, 5]]), ('control layout', ['([(]}}))(}a(', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 3], [[2, 6]])]]
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:
Bracket pairs come back ordered by closing position.

Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.

split: open-access


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

N = 1
observations = []
def solve(x):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack)):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: stack search direction', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('partial-repair probe', ['a)))]a([){a{a[', ['L', 'L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON'], 4], [[6, 8]]), ('partial-repair probe', ['{(])([[', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [[1, 3]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['})({[a]}]}[([', ['R', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], 2], [[3, 7]])], [('regression: stack search direction', ['a((a](]())(]', ['R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[5, 9], [7, 8]]), ('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('partial-repair probe', ['((]]){][([[(', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R'], 1], [[0, 4]]), ('partial-repair probe', ['(){', ['ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [']]a}}a(}(((', ['ON', 'ON', 'L', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'R', 'ON'], 1], []), ('control layout', ['{aa])(', ['L', 'R', 'L', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack search direction', ['(a{{a}(([', ['ON', 'L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON'], 3], [[3, 5]]), ('regression: stack search direction', ['()a}]{{)}{({(', ['R', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'L'], 3], [[6, 8]]), ('partial-repair probe', ['a()(})a({(]}', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON', 'ON'], 1], [[1, 2], [3, 5]]), ('regression: stack search direction', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['][}({}(', ['ON', 'L', 'R', 'ON', 'L', 'ON', 'ON'], 2], []), ('control layout', ['[)aa]}{{', ['ON', 'ON', 'L', 'L', 'R', 'L', 'ON', 'ON'], 4], [])], [('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('regression: stack search direction', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('partial-repair probe', ['aa[a]aa)()[', ['R', 'R', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[2, 4], [8, 9]]), ('partial-repair probe', ['()([)]{a[([[', ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['a]}}]a[a((a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 2], [])], [('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('regression: stack search direction', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: stack search direction', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('partial-repair probe', ['(a}[aaa[({){', ['ON', 'L', 'ON', 'L', 'L', 'L', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 3], [[0, 10]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['((', ['ON', 'R'], 3], []), ('control layout', ['][(][})[', ['ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON'], 2], [])]]
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):
    text, classes, limit = x
    OPEN = {'(': ')', '[': ']', '{': '}'}
    CLOSE = {')', ']', '}'}
    stack = []
    pairs = []
    for i, ch in enumerate(text):
        if classes[i] != 'ON':
            continue
        if ch in OPEN:
            if len(stack) >= limit:
                break
            stack.append((OPEN[ch], i))
        elif ch in CLOSE:
            for k in range(len(stack) - 1, 0, -1):
                if stack[k][0] == ch:
                    pairs.append([stack[k][1], i])
                    del stack[k:]
                    break
    return sorted(pairs)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: stack search direction', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('partial-repair probe', ['a)))]a([){a{a[', ['L', 'L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON'], 4], [[6, 8]]), ('partial-repair probe', ['{(])([[', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [[1, 3]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['})({[a]}]}[([', ['R', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], 2], [[3, 7]])], [('regression: stack search direction', ['a((a](]())(]', ['R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[5, 9], [7, 8]]), ('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('partial-repair probe', ['((]]){][([[(', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R'], 1], [[0, 4]]), ('partial-repair probe', ['(){', ['ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [']]a}}a(}(((', ['ON', 'ON', 'L', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'R', 'ON'], 1], []), ('control layout', ['{aa])(', ['L', 'R', 'L', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack search direction', ['(a{{a}(([', ['ON', 'L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON'], 3], [[3, 5]]), ('regression: stack search direction', ['()a}]{{)}{({(', ['R', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'L'], 3], [[6, 8]]), ('partial-repair probe', ['a()(})a({(]}', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON', 'ON'], 1], [[1, 2], [3, 5]]), ('regression: stack search direction', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['][}({}(', ['ON', 'L', 'R', 'ON', 'L', 'ON', 'ON'], 2], []), ('control layout', ['[)aa]}{{', ['ON', 'ON', 'L', 'L', 'R', 'L', 'ON', 'ON'], 4], [])], [('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('regression: stack search direction', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('partial-repair probe', ['aa[a]aa)()[', ['R', 'R', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[2, 4], [8, 9]]), ('partial-repair probe', ['()([)]{a[([[', ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['a]}}]a[a((a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 2], [])], [('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('regression: stack search direction', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: stack search direction', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('partial-repair probe', ['(a}[aaa[({){', ['ON', 'L', 'ON', 'L', 'L', 'L', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 3], [[0, 10]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['((', ['ON', 'R'], 3], []), ('control layout', ['][(][})[', ['ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON'], 2], [])]]
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:
A closer pairs with the outermost matching opener.

Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.

split: open-access


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

N = 1
observations = []
def solve(x):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R',):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = sos
            for k in range(o - 1, -1, -1):
                d = dirof(t[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('regression: numbers inside brackets', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'L']), ('regression: numbers inside brackets', [['L', 'L', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON', 'R', 'R', 'ON', 'ON'], [[2, 4], [5, 7], [10, 11]], 1, 'L'], ['L', 'L', 'ON', 'ON', 'ON', 'R', 'EN', 'R', 'R', 'R', 'ON', 'ON']), ('regression: numbers inside brackets', [['AN', 'R', 'EN', 'ON', 'EN', 'ON', 'EN', 'ON', 'ON', 'ON', 'R'], [[5, 7]], 1, 'R'], ['AN', 'R', 'EN', 'ON', 'EN', 'R', 'EN', 'R', 'ON', 'ON', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['ON', 'L', 'R', 'L'], [], 2, 'R'], ['ON', 'L', 'R', 'L']), ('control layout', [['EN', 'L', 'AN', 'ON', 'ON', 'AN'], [], 0, 'L'], ['EN', 'L', 'AN', 'ON', 'ON', 'AN'])], [('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 5]], 1, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'L', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 6], [2, 5]], 2, 'L'], ['EN', 'R', 'R', 'ON', 'AN', 'R', 'R', 'L', 'L']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON', 'EN'], [[2, 3], [4, 6]], 0, 'L'], ['L', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'EN']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'ON', 'EN', 'ON', 'R', 'L'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'EN', 'R', 'R', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['EN', 'L', 'EN', 'EN', 'L', 'R'], [], 2, 'L'], ['EN', 'L', 'EN', 'EN', 'L', 'R']), ('control layout', [['AN', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'R', 'R', 'R', 'R', 'ON', 'R'], [[2, 3]], 2, 'R'], ['AN', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'R', 'R', 'R', 'R', 'ON', 'R'])], [('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 2, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'R', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'AN', 'ON', 'ON'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'L', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'EN', 'ON', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON'], [[1, 3]], 2, 'L'], ['L', 'L', 'EN', 'L', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['L', 'AN', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'EN', 'ON', 'AN', 'L'], [], 1, 'R'], ['L', 'AN', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'EN', 'ON', 'AN', 'L']), ('control layout', [['R', 'ON', 'ON', 'AN', 'R', 'ON', 'ON', 'L', 'R'], [[1, 6], [2, 5]], 0, 'L'], ['R', 'R', 'R', 'AN', 'R', 'R', 'R', 'L', 'R'])], [('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'AN', 'ON', 'ON'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'L', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['R', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 2, 'R'], ['R', 'R', 'R', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'L', 'L', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'EN', 'ON', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON'], [[1, 3]], 2, 'L'], ['L', 'L', 'EN', 'L', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['R', 'ON', 'ON', 'R', 'R', 'ON', 'L', 'L', 'ON', 'L'], [[1, 8], [2, 5]], 2, 'R'], ['R', 'L', 'L', 'R', 'R', 'L', 'L', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'L'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'ON', 'L', 'R', 'L'])], [('regression: numbers inside brackets', [['EN', 'ON', 'R', 'ON', 'ON', 'ON', 'AN', 'EN', 'L', 'R', 'R'], [[1, 3]], 2, 'L'], ['EN', 'R', 'R', 'R', 'ON', 'ON', 'AN', 'EN', 'L', 'R', 'R']), ('regression: numbers inside brackets', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'R'], [[1, 7], [2, 4]], 0, 'L'], ['ON', 'L', 'L', 'AN', 'L', 'ON', 'ON', 'L', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON'], [[1, 6], [2, 4]], 2, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'EN', 'R']), ('regression: numbers inside brackets', [['ON', 'EN', 'ON', 'R', 'ON', 'EN', 'ON', 'ON', 'R'], [[4, 6]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'R', 'EN', 'R', 'ON', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['EN', 'ON', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'L', 'ON', 'ON', 'L', 'L', 'L']), ('control layout', [['R', 'ON', 'R', 'ON', 'ON', 'L', 'EN', 'ON', 'AN'], [], 0, 'L'], ['R', 'ON', 'R', 'ON', 'ON', 'L', 'EN', 'ON', 'AN'])]]
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):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R', 'AN'):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = sos
            for k in range(o - 1, -1, -1):
                d = dirof(t[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('regression: numbers inside brackets', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'L']), ('regression: numbers inside brackets', [['L', 'L', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON', 'R', 'R', 'ON', 'ON'], [[2, 4], [5, 7], [10, 11]], 1, 'L'], ['L', 'L', 'ON', 'ON', 'ON', 'R', 'EN', 'R', 'R', 'R', 'ON', 'ON']), ('regression: numbers inside brackets', [['AN', 'R', 'EN', 'ON', 'EN', 'ON', 'EN', 'ON', 'ON', 'ON', 'R'], [[5, 7]], 1, 'R'], ['AN', 'R', 'EN', 'ON', 'EN', 'R', 'EN', 'R', 'ON', 'ON', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['ON', 'L', 'R', 'L'], [], 2, 'R'], ['ON', 'L', 'R', 'L']), ('control layout', [['EN', 'L', 'AN', 'ON', 'ON', 'AN'], [], 0, 'L'], ['EN', 'L', 'AN', 'ON', 'ON', 'AN'])], [('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 5]], 1, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'L', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 6], [2, 5]], 2, 'L'], ['EN', 'R', 'R', 'ON', 'AN', 'R', 'R', 'L', 'L']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON', 'EN'], [[2, 3], [4, 6]], 0, 'L'], ['L', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'EN']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'ON', 'EN', 'ON', 'R', 'L'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'EN', 'R', 'R', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['EN', 'L', 'EN', 'EN', 'L', 'R'], [], 2, 'L'], ['EN', 'L', 'EN', 'EN', 'L', 'R']), ('control layout', [['AN', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'R', 'R', 'R', 'R', 'ON', 'R'], [[2, 3]], 2, 'R'], ['AN', 'ON', 'ON', 'ON', 'L', 'EN', 'L', 'R', 'R', 'R', 'R', 'ON', 'R'])], [('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 2, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'R', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'AN', 'ON', 'ON'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'L', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'EN', 'ON', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON'], [[1, 3]], 2, 'L'], ['L', 'L', 'EN', 'L', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['L', 'AN', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'EN', 'ON', 'AN', 'L'], [], 1, 'R'], ['L', 'AN', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'EN', 'ON', 'AN', 'L']), ('control layout', [['R', 'ON', 'ON', 'AN', 'R', 'ON', 'ON', 'L', 'R'], [[1, 6], [2, 5]], 0, 'L'], ['R', 'R', 'R', 'AN', 'R', 'R', 'R', 'L', 'R'])], [('regression: numbers inside brackets', [['L', 'ON', 'ON', 'L', 'AN', 'ON', 'ON'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'L', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['R', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 2, 'R'], ['R', 'R', 'R', 'AN', 'R', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'L', 'L', 'R']), ('regression: numbers inside brackets', [['L', 'ON', 'EN', 'ON', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON'], [[1, 3]], 2, 'L'], ['L', 'L', 'EN', 'L', 'R', 'L', 'AN', 'R', 'ON', 'AN', 'ON', 'L', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['R', 'ON', 'ON', 'R', 'R', 'ON', 'L', 'L', 'ON', 'L'], [[1, 8], [2, 5]], 2, 'R'], ['R', 'L', 'L', 'R', 'R', 'L', 'L', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'L'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'ON', 'L', 'R', 'L'])], [('regression: numbers inside brackets', [['EN', 'ON', 'R', 'ON', 'ON', 'ON', 'AN', 'EN', 'L', 'R', 'R'], [[1, 3]], 2, 'L'], ['EN', 'R', 'R', 'R', 'ON', 'ON', 'AN', 'EN', 'L', 'R', 'R']), ('regression: numbers inside brackets', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'R'], [[1, 7], [2, 4]], 0, 'L'], ['ON', 'L', 'L', 'AN', 'L', 'ON', 'ON', 'L', 'R']), ('regression: numbers inside brackets', [['EN', 'ON', 'ON', 'ON', 'ON', 'EN', 'ON'], [[1, 6], [2, 4]], 2, 'L'], ['EN', 'R', 'ON', 'ON', 'ON', 'EN', 'R']), ('regression: numbers inside brackets', [['ON', 'EN', 'ON', 'R', 'ON', 'EN', 'ON', 'ON', 'R'], [[4, 6]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'R', 'EN', 'R', 'ON', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['EN', 'ON', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'L', 'ON', 'ON', 'L', 'L', 'L']), ('control layout', [['R', 'ON', 'R', 'ON', 'ON', 'L', 'EN', 'ON', 'AN'], [], 0, 'L'], ['R', 'ON', 'R', 'ON', 'ON', 'L', 'EN', 'ON', 'AN'])]]
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:
Brackets around numbers in RTL text are not resolved as RTL.

Input [classes, bracket pairs, embedding level, sos]. Process pairs in opener order. Strong types inside (EN/AN count as R) matching the embedding direction set both brackets to it; if only the opposite direction is inside, use the first strong type before the opener (checking already-updated brackets; sos if none); with no strong type inside leave them. Return classes.

split: open-access


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

N = 1
observations = []
def solve(x):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R', 'EN', 'AN'):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = sos
            for k in range(o - 1, -1, -1):
                d = dirof(types[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L']), ('control layout', [['R', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'EN', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 2, 'L'], ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'])], [('regression: context from updated brackets', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L'], [[1, 6], [2, 4]], 1, 'L'], ['L', 'R', 'R', 'L', 'R', 'R', 'R', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 4]], 2, 'R'], ['ON', 'L', 'L', 'R', 'L', 'ON', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'R', 'L', 'ON', 'R', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'R', 'L', 'L', 'R', 'L']), ('control layout', [['R', 'R', 'EN', 'ON', 'EN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], [[5, 10], [3, 11]], 0, 'R'], ['R', 'R', 'EN', 'R', 'EN', 'R', 'ON', 'R', 'ON', 'ON', 'R', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'R', 'L', 'ON', 'R', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'AN', 'L', 'R', 'L', 'L', 'R', 'L']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'AN', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'AN', 'R', 'ON', 'AN'], [[6, 11]], 2, 'R'], ['R', 'L', 'AN', 'R', 'AN', 'R', 'R', 'ON', 'EN', 'AN', 'R', 'R', 'AN']), ('control layout', [['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'], [], 1, 'R'], ['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'L', 'EN', 'ON'], [[1, 8], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'L', 'EN', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'R', 'R', 'R', 'R', 'L']), ('control layout', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'AN', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON'], [[8, 11]], 2, 'R'], ['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L'])]]
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):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R', 'EN', 'AN'):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = sos
            for k in range(o - 1, max(o - 2, -1), -1):
                d = dirof(t[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L']), ('control layout', [['R', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'EN', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 2, 'L'], ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'])], [('regression: context from updated brackets', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L'], [[1, 6], [2, 4]], 1, 'L'], ['L', 'R', 'R', 'L', 'R', 'R', 'R', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 4]], 2, 'R'], ['ON', 'L', 'L', 'R', 'L', 'ON', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'R', 'L', 'ON', 'R', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'R', 'L', 'L', 'R', 'L']), ('control layout', [['R', 'R', 'EN', 'ON', 'EN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], [[5, 10], [3, 11]], 0, 'R'], ['R', 'R', 'EN', 'R', 'EN', 'R', 'ON', 'R', 'ON', 'ON', 'R', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'R', 'L', 'ON', 'R', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'AN', 'L', 'R', 'L', 'L', 'R', 'L']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'AN', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'AN', 'R', 'ON', 'AN'], [[6, 11]], 2, 'R'], ['R', 'L', 'AN', 'R', 'AN', 'R', 'R', 'ON', 'EN', 'AN', 'R', 'R', 'AN']), ('control layout', [['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'], [], 1, 'R'], ['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'L', 'EN', 'ON'], [[1, 8], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'L', 'EN', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'R', 'R', 'R', 'R', 'L']), ('control layout', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'AN', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON'], [[8, 11]], 2, 'R'], ['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L'])]]
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:
Nested brackets ignore the resolution of their enclosing pair.

Input [classes, bracket pairs, embedding level, sos]. Process pairs in opener order. Strong types inside (EN/AN count as R) matching the embedding direction set both brackets to it; if only the opposite direction is inside, use the first strong type before the opener (checking already-updated brackets; sos if none); with no strong type inside leave them. Return classes.

split: open-access


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

N = 1
observations = []
def solve(x):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R', 'EN', 'AN'):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = e
            for k in range(o - 1, -1, -1):
                d = dirof(t[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'R'], ['ON', 'R', 'R', 'ON', 'L', 'R', 'R', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R'], [[3, 4]], 0, 'R'], ['R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R']), ('control layout', [['R', 'L', 'ON', 'L', 'R', 'AN', 'L', 'R', 'ON', 'ON', 'L', 'L'], [], 1, 'R'], ['R', 'L', 'ON', 'L', 'R', 'AN', 'L', 'R', 'ON', 'ON', 'L', 'L'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'R'], [[1, 6], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'EN', 'L', 'EN', 'ON', 'EN'], [], 1, 'L'], ['ON', 'EN', 'L', 'EN', 'ON', 'EN']), ('control layout', [['R', 'R', 'ON'], [], 1, 'R'], ['R', 'R', 'ON'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'L', 'L']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'R'], [[1, 6], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['R', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], [[1, 7], [2, 5]], 1, 'L'], ['R', 'R', 'R', 'R', 'R', 'R', 'ON', 'R', 'R']), ('control layout', [['R', 'EN', 'AN'], [], 1, 'L'], ['R', 'EN', 'AN'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'AN', 'ON', 'ON', 'ON'], [], 2, 'L'], ['ON', 'AN', 'ON', 'ON', 'ON']), ('control layout', [['AN', 'ON', 'ON', 'ON', 'ON'], [[1, 2]], 0, 'R'], ['AN', 'ON', 'ON', 'ON', 'ON'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'L', 'L']), ('regression: context fallback', [['ON', 'EN', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'AN', 'L'], [[0, 3], [4, 6]], 0, 'R'], ['R', 'EN', 'AN', 'R', 'L', 'L', 'L', 'ON', 'L', 'AN', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'R', 'EN', 'ON', 'ON', 'R', 'AN', 'EN', 'EN', 'AN', 'ON', 'ON', 'R'], [], 1, 'L'], ['R', 'L', 'R', 'EN', 'ON', 'ON', 'R', 'AN', 'EN', 'EN', 'AN', 'ON', 'ON', 'R']), ('control layout', [['L', 'ON', 'ON', 'ON', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'R'], ['L', 'ON', 'ON', 'ON', 'ON', 'ON'])]]
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):
    types, pairs, level, sos = x
    t = list(types)
    e = 'L' if level % 2 == 0 else 'R'
    def dirof(c):
        if c == 'L':
            return 'L'
        if c in ('R', 'EN', 'AN'):
            return 'R'
        return None
    for o, c in sorted(pairs):
        inside = [dirof(t[k]) for k in range(o + 1, c)]
        inside = [d for d in inside if d]
        if not inside:
            continue
        if e in inside:
            new = e
        else:
            ctx = 'L'
            for k in range(o - 1, -1, -1):
                d = dirof(t[k])
                if d:
                    ctx = d
                    break
            new = ctx
        t[o] = new
        t[c] = new
    return t
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'R'], ['ON', 'R', 'R', 'ON', 'L', 'R', 'R', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R'], [[3, 4]], 0, 'R'], ['R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R']), ('control layout', [['R', 'L', 'ON', 'L', 'R', 'AN', 'L', 'R', 'ON', 'ON', 'L', 'L'], [], 1, 'R'], ['R', 'L', 'ON', 'L', 'R', 'AN', 'L', 'R', 'ON', 'ON', 'L', 'L'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'R'], [[1, 6], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'EN', 'L', 'EN', 'ON', 'EN'], [], 1, 'L'], ['ON', 'EN', 'L', 'EN', 'ON', 'EN']), ('control layout', [['R', 'R', 'ON'], [], 1, 'R'], ['R', 'R', 'ON'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'L', 'L']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'R'], [[1, 6], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'ON', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['R', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R'], [[1, 7], [2, 5]], 1, 'L'], ['R', 'R', 'R', 'R', 'R', 'R', 'ON', 'R', 'R']), ('control layout', [['R', 'EN', 'AN'], [], 1, 'L'], ['R', 'EN', 'AN'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[2, 4]], 0, 'R'], ['ON', 'ON', 'R', 'R', 'R', 'ON']), ('regression: context fallback', [['ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'L'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'R', 'R', 'ON', 'R', 'R', 'ON', 'R', 'R', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'AN', 'ON', 'ON', 'ON'], [], 2, 'L'], ['ON', 'AN', 'ON', 'ON', 'ON']), ('control layout', [['AN', 'ON', 'ON', 'ON', 'ON'], [[1, 2]], 0, 'R'], ['AN', 'ON', 'ON', 'ON', 'ON'])], [('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'R', 'R'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'R', 'R']), ('regression: context fallback', [['ON', 'EN', 'EN', 'ON', 'ON', 'EN', 'ON', 'L', 'ON'], [[0, 3], [6, 8]], 2, 'R'], ['R', 'EN', 'EN', 'R', 'ON', 'EN', 'L', 'L', 'L']), ('regression: context fallback', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'L', 'L'], [[1, 5], [2, 4]], 0, 'R'], ['ON', 'R', 'R', 'AN', 'R', 'R', 'L', 'L']), ('regression: context fallback', [['ON', 'EN', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'AN', 'L'], [[0, 3], [4, 6]], 0, 'R'], ['R', 'EN', 'AN', 'R', 'L', 'L', 'L', 'ON', 'L', 'AN', 'L']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'R', 'EN', 'ON', 'ON', 'R', 'AN', 'EN', 'EN', 'AN', 'ON', 'ON', 'R'], [], 1, 'L'], ['R', 'L', 'R', 'EN', 'ON', 'ON', 'R', 'AN', 'EN', 'EN', 'AN', 'ON', 'ON', 'R']), ('control layout', [['L', 'ON', 'ON', 'ON', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'R'], ['L', 'ON', 'ON', 'ON', 'ON', 'ON'])]]
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:
Brackets at the start of a sequence ignore the sequence start type.

Input [classes, bracket pairs, embedding level, sos]. Process pairs in opener order. Strong types inside (EN/AN count as R) matching the embedding direction set both brackets to it; if only the opposite direction is inside, use the first strong type before the opener (checking already-updated brackets; sos if none); with no strong type inside leave them. Return classes.

split: open-access