FA-97481 / Knitting and sewing pattern grading / Open access
Knitting chart row reader: WS decrease equivalents · case 01
A k2tog on a WS row is worked as a knit decrease, leaning and showing on the wrong face.
ROOT CAUSE
Only knit and purl are swapped for WS rows; decreases pass through unchanged.
VERIFIED REPAIR
Map k2tog to p2tog and ssk to ssp on WS rows.
Unsuccessful approach: Crossing the mappings reverses the decrease lean.
Case contract
chart rows are listed bottom-up (row 1 first), cells left-to-right as drawn. Rounds and RS rows read right-to-left unchanged. Flat WS rows (even rows, or odd rows when start_ws) read left-to-right with swaps k<->p, k2tog->p2tog, ssk->ssp, yo stays. Runs of identical stitches merge: k/p as "k3", others as "yo" or "yo x2". Row outside 1..len -> error.
Why this case matters
Chart readers must flip reading direction and stitch meaning on wrong-side rows.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(chart, row, in_round, start_ws):
SWAP = {'k': 'p', 'p': 'k', 'yo': 'yo'}
if not 1 <= row <= len(chart):
return 'error: no such row'
cells = list(chart[row - 1])
ws = (not in_round) and ((row % 2 == 0) != start_ws)
if ws:
seq = [SWAP.get(c, c) for c in cells]
else:
seq = cells[::-1]
out = []
for c in seq:
if out and out[-1][0] == c:
out[-1][1] += 1
else:
out.append([c, 1])
return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
False, False],
'ssp x2, p2tog, p1, yo, k1, p2tog'],
['repair check: WS decrease equivalents',
[[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
4, False, False],
'ssp x2, p1, yo, k1'],
['generated control 1',
[[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
False],
'ssk, yo x2, p1, k1'],
['generated control 2',
[[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
2, False, True],
'ssk, p1, yo, ssk x2, yo, k1'],
['generated control 3',
[[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
'ssk, k2tog, k1, yo x3']],
[['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
4, False, False],
'p2tog, p1, k1, yo'],
['repair check: WS decrease equivalents',
[[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
False, True],
'yo, k2, yo, p1, k1, p2tog'],
['generated control 1',
[[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
1, False, False],
'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
['generated control 2',
[[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
1, False, False],
'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
[['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
1, False, True],
'ssp, p2tog x2, p1, k2, yo'],
['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
'p2tog, k2'],
['generated control 1',
[[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
2, False, True],
'k1, k2tog, k1, yo x2'],
['generated control 2',
[[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
1, False, False],
'yo x3, ssk x2, p1, k2tog'],
['generated control 3',
[[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
1, True, True],
'yo, p1, k1, yo x2, k2tog x2']],
[['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
False],
'yo, ssp, p2tog, k1, p2tog x2'],
['repair check: WS decrease equivalents',
[[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
4, False, False],
'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
['generated control 2',
[[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
True],
'p3, k2tog, k1, ssk, k1'],
['generated control 3',
[[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
6, False, False],
'p2tog, k1, p1, ssp, k2, yo']],
[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
2, False, False],
'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
['repair check: WS decrease equivalents',
[[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
6, False, False],
'k2, p2tog, yo x2, k1, p1'],
['generated control 1',
[[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
4, True, True],
'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
['generated control 2',
[[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
'k1, yo, p1'],
['generated control 3',
[[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
1, False, False],
'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| RS row | k2tog, yo, p1, k2 | k2tog, yo, p1, k2 | Passed |
| WS row swapped | k2, p1, ssk, p1 | k2, p1, ssp, p1 | Failed |
| in the round | k1, ssk | k1, ssk | Passed |
| regression: WS decrease equivalents | ssk x2, k2tog, p1, yo, k1, k2tog | ssp x2, p2tog, p1, yo, k1, p2tog | Failed |
| repair check: WS decrease equivalents | ssk x2, p1, yo, k1 | ssp x2, p1, yo, k1 | Failed |
| generated control 1 | ssk, yo x2, p1, k1 | ssk, yo x2, p1, k1 | Passed |
| generated control 2 | ssk, p1, yo, ssk x2, yo, k1 | ssk, p1, yo, ssk x2, yo, k1 | Passed |
| generated control 3 | ssk, k2tog, k1, yo x3 | ssk, k2tog, k1, yo x3 | Passed |
SHA-256 / 639744aed0ffcc3692542fb0b3ba51ac261f5b1b167b5404e2565fbe97daecc2
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(chart, row, in_round, start_ws):
SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'ssp', 'ssk': 'p2tog', 'yo': 'yo'}
if not 1 <= row <= len(chart):
return 'error: no such row'
cells = list(chart[row - 1])
ws = (not in_round) and ((row % 2 == 0) != start_ws)
if ws:
seq = [SWAP.get(c, c) for c in cells]
else:
seq = cells[::-1]
out = []
for c in seq:
if out and out[-1][0] == c:
out[-1][1] += 1
else:
out.append([c, 1])
return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
False, False],
'ssp x2, p2tog, p1, yo, k1, p2tog'],
['repair check: WS decrease equivalents',
[[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
4, False, False],
'ssp x2, p1, yo, k1'],
['generated control 1',
[[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
False],
'ssk, yo x2, p1, k1'],
['generated control 2',
[[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
2, False, True],
'ssk, p1, yo, ssk x2, yo, k1'],
['generated control 3',
[[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
'ssk, k2tog, k1, yo x3']],
[['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
4, False, False],
'p2tog, p1, k1, yo'],
['repair check: WS decrease equivalents',
[[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
False, True],
'yo, k2, yo, p1, k1, p2tog'],
['generated control 1',
[[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
1, False, False],
'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
['generated control 2',
[[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
1, False, False],
'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
[['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
1, False, True],
'ssp, p2tog x2, p1, k2, yo'],
['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
'p2tog, k2'],
['generated control 1',
[[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
2, False, True],
'k1, k2tog, k1, yo x2'],
['generated control 2',
[[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
1, False, False],
'yo x3, ssk x2, p1, k2tog'],
['generated control 3',
[[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
1, True, True],
'yo, p1, k1, yo x2, k2tog x2']],
[['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
False],
'yo, ssp, p2tog, k1, p2tog x2'],
['repair check: WS decrease equivalents',
[[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
4, False, False],
'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
['generated control 2',
[[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
True],
'p3, k2tog, k1, ssk, k1'],
['generated control 3',
[[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
6, False, False],
'p2tog, k1, p1, ssp, k2, yo']],
[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
2, False, False],
'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
['repair check: WS decrease equivalents',
[[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
6, False, False],
'k2, p2tog, yo x2, k1, p1'],
['generated control 1',
[[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
4, True, True],
'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
['generated control 2',
[[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
'k1, yo, p1'],
['generated control 3',
[[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
1, False, False],
'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| RS row | k2tog, yo, p1, k2 | k2tog, yo, p1, k2 | Passed |
| WS row swapped | k2, p1, p2tog, p1 | k2, p1, ssp, p1 | Failed |
| in the round | k1, ssk | k1, ssk | Passed |
| regression: WS decrease equivalents | p2tog x2, ssp, p1, yo, k1, ssp | ssp x2, p2tog, p1, yo, k1, p2tog | Failed |
| repair check: WS decrease equivalents | p2tog x2, p1, yo, k1 | ssp x2, p1, yo, k1 | Failed |
| generated control 1 | ssk, yo x2, p1, k1 | ssk, yo x2, p1, k1 | Passed |
| generated control 2 | ssk, p1, yo, ssk x2, yo, k1 | ssk, p1, yo, ssk x2, yo, k1 | Passed |
| generated control 3 | ssk, k2tog, k1, yo x3 | ssk, k2tog, k1, yo x3 | Passed |
SHA-256 / cca52197067b73ed67105d9cbf3c2b3679e2659b4bc00c9b01885b4b46318c2a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(chart, row, in_round, start_ws):
SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'p2tog', 'ssk': 'ssp', 'yo': 'yo'}
if not 1 <= row <= len(chart):
return 'error: no such row'
cells = list(chart[row - 1])
ws = (not in_round) and ((row % 2 == 0) != start_ws)
if ws:
seq = [SWAP.get(c, c) for c in cells]
else:
seq = cells[::-1]
out = []
for c in seq:
if out and out[-1][0] == c:
out[-1][1] += 1
else:
out.append([c, 1])
return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k', 'p', 'yo', 'yo', 'yo'], ['ssk', 'ssk', 'k2tog', 'k', 'yo', 'p', 'k2tog']], 2,
False, False],
'ssp x2, p2tog, p1, yo, k1, p2tog'],
['repair check: WS decrease equivalents',
[[['ssk', 'k2tog', 'p', 'ssk', 'k2tog'], ['yo', 'k', 'k2tog', 'p', 'k2tog'], ['k', 'k', 'p', 'ssk', 'ssk'],
['ssk', 'ssk', 'k', 'yo', 'p'], ['ssk', 'ssk', 'yo', 'p', 'k'], ['p', 'p', 'k', 'p', 'ssk']],
4, False, False],
'ssp x2, p1, yo, k1'],
['generated control 1',
[[['p', 'p', 'ssk', 'ssk', 'k'], ['k', 'p', 'yo', 'yo', 'ssk'], ['k', 'p', 'k', 'ssk', 'k2tog']], 2, True,
False],
'ssk, yo x2, p1, k1'],
['generated control 2',
[[['ssk', 'yo', 'ssk', 'ssk', 'k', 'yo', 'yo'], ['k', 'yo', 'ssk', 'ssk', 'yo', 'p', 'ssk'],
['p', 'yo', 'k', 'yo', 'p', 'ssk', 'k2tog'], ['k', 'p', 'yo', 'yo', 'k', 'k2tog', 'yo'],
['ssk', 'k2tog', 'yo', 'ssk', 'ssk', 'k', 'p'], ['k2tog', 'ssk', 'yo', 'p', 'ssk', 'k', 'yo']],
2, False, True],
'ssk, p1, yo, ssk x2, yo, k1'],
['generated control 3',
[[['yo', 'yo', 'yo', 'k', 'k2tog', 'ssk'], ['yo', 'yo', 'yo', 'k', 'k2tog', 'yo']], 1, False, False],
'ssk, k2tog, k1, yo x3']],
[['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'p', 'p'], ['ssk', 'k2tog', 'k', 'k2tog'], ['p', 'k2tog', 'k2tog', 'k'],
['k2tog', 'k', 'p', 'yo'], ['yo', 'k', 'k2tog', 'k']],
4, False, False],
'p2tog, p1, k1, yo'],
['repair check: WS decrease equivalents',
[[['yo', 'p', 'p', 'yo', 'k', 'p', 'k2tog'], ['k2tog', 'k2tog', 'k2tog', 'yo', 'ssk', 'k', 'yo']], 1,
False, True],
'yo, k2, yo, p1, k1, p2tog'],
['generated control 1',
[[['k2tog', 'k', 'ssk', 'k2tog', 'k', 'k2tog', 'ssk'], ['yo', 'p', 'ssk', 'ssk', 'k2tog', 'k', 'k'],
['k2tog', 'k', 'p', 'k2tog', 'p', 'k2tog', 'yo'], ['p', 'k2tog', 'yo', 'p', 'k', 'k2tog', 'k2tog'],
['k', 'yo', 'k2tog', 'p', 'p', 'p', 'p'], ['p', 'p', 'ssk', 'k', 'k', 'k2tog', 'yo']],
1, False, False],
'ssk, k2tog, k1, k2tog, ssk, k1, k2tog'],
['generated control 2',
[[['k2tog', 'k', 'yo', 'ssk', 'yo', 'k2tog', 'p', 'k2tog'],
['k', 'k', 'yo', 'ssk', 'k', 'k2tog', 'yo', 'k'], ['p', 'ssk', 'ssk', 'p', 'ssk', 'p', 'p', 'yo'],
['ssk', 'k', 'p', 'p', 'yo', 'yo', 'p', 'k']],
1, False, False],
'k2tog, p1, k2tog, yo, ssk, yo, k1, k2tog'],
['generated control 3', [[['p', 'yo', 'k2tog'], ['p', 'ssk', 'k']], 1, True, False], 'k2tog, yo, p1']],
[['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['regression: WS decrease equivalents',
[[['ssk', 'k2tog', 'k2tog', 'k', 'p', 'p', 'yo'], ['k2tog', 'p', 'yo', 'k', 'p', 'yo', 'k'],
['k', 'ssk', 'k', 'k', 'k', 'ssk', 'k2tog']],
1, False, True],
'ssp, p2tog x2, p1, k2, yo'],
['repair check: WS decrease equivalents', [[['ssk', 'yo', 'ssk'], ['k2tog', 'p', 'p']], 2, False, False],
'p2tog, k2'],
['generated control 1',
[[['k2tog', 'k', 'yo', 'k2tog', 'k2tog'], ['yo', 'yo', 'k', 'k2tog', 'k'],
['p', 'k2tog', 'k2tog', 'k2tog', 'p']],
2, False, True],
'k1, k2tog, k1, yo x2'],
['generated control 2',
[[['k2tog', 'p', 'ssk', 'ssk', 'yo', 'yo', 'yo'], ['yo', 'p', 'p', 'p', 'yo', 'k', 'p'],
['yo', 'ssk', 'k2tog', 'k', 'yo', 'k', 'k'], ['yo', 'ssk', 'k2tog', 'p', 'yo', 'yo', 'p']],
1, False, False],
'yo x3, ssk x2, p1, k2tog'],
['generated control 3',
[[['k2tog', 'k2tog', 'yo', 'yo', 'k', 'p', 'yo'], ['k', 'yo', 'ssk', 'p', 'k', 'k', 'yo'],
['yo', 'yo', 'k2tog', 'k2tog', 'k2tog', 'k', 'yo'], ['k2tog', 'yo', 'ssk', 'p', 'yo', 'k2tog', 'k2tog'],
['ssk', 'p', 'k2tog', 'yo', 'yo', 'ssk', 'p'], ['ssk', 'k2tog', 'k', 'yo', 'k2tog', 'k', 'k2tog']],
1, True, True],
'yo, p1, k1, yo x2, k2tog x2']],
[['out of range', [[['k']], 3, False, False], 'error: no such row'],
['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['regression: WS decrease equivalents',
[[['k2tog', 'yo', 'yo', 'k', 'k2tog', 'p'], ['yo', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog']], 2, False,
False],
'yo, ssp, p2tog, k1, p2tog x2'],
['repair check: WS decrease equivalents',
[[['p', 'yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],
['yo', 'k2tog', 'k2tog', 'ssk', 'yo', 'p', 'yo', 'k2tog'],
['k', 'yo', 'yo', 'yo', 'ssk', 'yo', 'p', 'ssk'],
['yo', 'k', 'k2tog', 'k2tog', 'yo', 'ssk', 'yo', 'k2tog'],
['p', 'ssk', 'k', 'k', 'ssk', 'k', 'k', 'k']],
4, False, False],
'yo, p1, p2tog x2, yo, ssp, yo, p2tog'],
['generated control 1', [[['yo', 'yo', 'p'], ['ssk', 'ssk', 'k2tog']], 1, False, True], 'yo x2, k1'],
['generated control 2',
[[['k', 'ssk', 'k', 'k2tog', 'p', 'p', 'p'], ['yo', 'p', 'ssk', 'ssk', 'ssk', 'ssk', 'yo']], 1, True,
True],
'p3, k2tog, k1, ssk, k1'],
['generated control 3',
[[['k2tog', 'k', 'yo', 'k2tog', 'yo', 'yo', 'yo'], ['ssk', 'yo', 'p', 'yo', 'k', 'yo', 'k2tog'],
['k2tog', 'p', 'k2tog', 'ssk', 'k2tog', 'k2tog', 'p'], ['ssk', 'k', 'k2tog', 'k2tog', 'p', 'p', 'k'],
['yo', 'p', 'k', 'k2tog', 'p', 'yo', 'yo'], ['k2tog', 'p', 'k', 'ssk', 'p', 'p', 'yo']],
6, False, False],
'p2tog, k1, p1, ssp, k2, yo']],
[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],
'k2tog, yo, p1, k2'],
['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],
'k2, p1, ssp, p1'],
['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],
['regression: WS decrease equivalents',
[[['yo', 'yo', 'k2tog', 'k', 'p', 'ssk', 'k', 'yo'], ['p', 'ssk', 'p', 'k', 'ssk', 'p', 'k', 'k2tog'],
['p', 'ssk', 'ssk', 'k', 'k2tog', 'yo', 'yo', 'k2tog'],
['ssk', 'p', 'ssk', 'ssk', 'k2tog', 'ssk', 'k', 'yo']],
2, False, False],
'k1, ssp, k1, p1, ssp, k1, p1, p2tog'],
['repair check: WS decrease equivalents',
[[['k', 'ssk', 'k2tog', 'ssk', 'yo', 'yo', 'yo'], ['p', 'k2tog', 'k', 'yo', 'p', 'k', 'ssk'],
['ssk', 'p', 'p', 'ssk', 'k2tog', 'k', 'yo'], ['p', 'ssk', 'k', 'k', 'yo', 'yo', 'k'],
['yo', 'p', 'p', 'p', 'k2tog', 'k2tog', 'k'], ['p', 'p', 'k2tog', 'yo', 'yo', 'p', 'k']],
6, False, False],
'k2, p2tog, yo x2, k1, p1'],
['generated control 1',
[[['yo', 'yo', 'yo', 'k', 'k', 'p', 'yo', 'yo'], ['ssk', 'ssk', 'ssk', 'k2tog', 'k2tog', 'p', 'k', 'ssk'],
['ssk', 'k2tog', 'k', 'k', 'ssk', 'p', 'k', 'yo'],
['yo', 'k2tog', 'ssk', 'p', 'ssk', 'k2tog', 'k2tog', 'p']],
4, True, True],
'p1, k2tog x2, ssk, p1, ssk, k2tog, yo'],
['generated control 2',
[[['p', 'p', 'ssk'], ['p', 'yo', 'k'], ['p', 'k2tog', 'p'], ['p', 'p', 'yo']], 2, False, False],
'k1, yo, p1'],
['generated control 3',
[[['ssk', 'yo', 'yo', 'k', 'ssk', 'k', 'k2tog', 'ssk'],
['k2tog', 'yo', 'ssk', 'k', 'ssk', 'k', 'yo', 'k2tog']],
1, False, False],
'ssk, k2tog, k1, ssk, k1, yo x2, ssk']]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| RS row | k2tog, yo, p1, k2 | k2tog, yo, p1, k2 | Passed |
| WS row swapped | k2, p1, ssp, p1 | k2, p1, ssp, p1 | Passed |
| in the round | k1, ssk | k1, ssk | Passed |
| regression: WS decrease equivalents | ssp x2, p2tog, p1, yo, k1, p2tog | ssp x2, p2tog, p1, yo, k1, p2tog | Passed |
| repair check: WS decrease equivalents | ssp x2, p1, yo, k1 | ssp x2, p1, yo, k1 | Passed |
| generated control 1 | ssk, yo x2, p1, k1 | ssk, yo x2, p1, k1 | Passed |
| generated control 2 | ssk, p1, yo, ssk x2, yo, k1 | ssk, p1, yo, ssk x2, yo, k1 | Passed |
| generated control 3 | ssk, k2tog, k1, yo x3 | ssk, k2tog, k1, yo x3 | Passed |
SHA-256 / 3bf76fc15cc2f3f8a6de81efb4f878231971c56bbbccbedebfd378c8da17d2c7
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:32.602155+00:00.
Case digest / a02420891a500f20423f8aace1359e3f5ac9bc073801479ff5eeb82ba53674c6