FA-37341 / Table interactions / Open access
Table fill handle repetition: inclusive fill row · case 01
The table inclusive fill row result violates the stipulated table fill handle repetition contract.
ROOT CAUSE
The inclusive fill row decision uses 'range(tr0,tr1)' instead of 'range(tr0,tr1+1)'.
VERIFIED REPAIR
Apply the complete inclusive fill row rule: range(tr0,tr1+1).
Unsuccessful approach: The attempted repair 'range(tr0+1,tr1+1)' still loses a required part of the table contract.
Case contract
Fill repeats the source rectangle modulo its original row/column origin, excludes the source itself, respects axis constraints and individual readonly cells, clips targets to table bounds, and emits patches in row-major order.
Why this case matters
An offline table UI model isolates table fill handle repetition, including adversarial row/column relationships.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rows, cols, source, target, grid, locked, axis):
sr0,sr1,sc0,sc1=source
tr0,tr1,tc0,tc1=target
patches=[]
for r in range(tr0,tr1):
for c in range(tc0,tc1+1):
if sr0<=r<=sr1 and sc0<=c<=sc1: continue
if not (0<=r<len(rows) and 0<=c<len(cols)): continue
if (rows[r],cols[c]) in locked: continue
rr=sr0+(r-sr0)%(sr1-sr0+1)
cc=sc0+(c-sc0)%(sc1-sc0+1)
if axis=='vertical' and not sc0<=c<=sc1: continue
if axis=='horizontal' and not sr0<=r<=sr1: continue
patches.append((rows[r],cols[c],grid[rr][cc]))
return patches
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 2:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 3:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 4:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 5:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
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 |
|---|---|---|---|
| vertical pattern | [['r0', 'b', 10], ['r0', 'c', 11], ['r3', 'b', 7], ['r3', 'c', 7]] | [['r0', 'b', 10], ['r0', 'c', 11], ['r3', 'b', 7], ['r3', 'c', 7], ['r4', 'b', 10], ['r4', 'c', 11]] | Failed |
| horizontal pattern | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | Passed |
| locked cell | [['r1', 'b', 2]] | [['r1', 'b', 2], ['r2', 'a', 1], ['r2', 'b', 2]] | Failed |
| source only | [] | [] | Passed |
| negative viewport | [['r0', 'b', 1]] | [['r0', 'b', 1], ['r1', 'a', 1], ['r1', 'b', 1]] | Failed |
| single seed | [['r0', 'b', 7]] | [['r0', 'b', 7], ['r1', 'a', 7], ['r1', 'b', 7]] | Failed |
SHA-256 / ae7599083e141fe23aa512e269d01b8e53aa4159db2575c7b0df78ba2c333d43
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rows, cols, source, target, grid, locked, axis):
sr0,sr1,sc0,sc1=source
tr0,tr1,tc0,tc1=target
patches=[]
for r in range(tr0+1,tr1+1):
for c in range(tc0,tc1+1):
if sr0<=r<=sr1 and sc0<=c<=sc1: continue
if not (0<=r<len(rows) and 0<=c<len(cols)): continue
if (rows[r],cols[c]) in locked: continue
rr=sr0+(r-sr0)%(sr1-sr0+1)
cc=sc0+(c-sc0)%(sc1-sc0+1)
if axis=='vertical' and not sc0<=c<=sc1: continue
if axis=='horizontal' and not sr0<=r<=sr1: continue
patches.append((rows[r],cols[c],grid[rr][cc]))
return patches
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 2:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 3:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 4:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 5:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
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 |
|---|---|---|---|
| vertical pattern | [['r3', 'b', 7], ['r3', 'c', 7], ['r4', 'b', 10], ['r4', 'c', 11]] | [['r0', 'b', 10], ['r0', 'c', 11], ['r3', 'b', 7], ['r3', 'c', 7], ['r4', 'b', 10], ['r4', 'c', 11]] | Failed |
| horizontal pattern | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | Passed |
| locked cell | [['r1', 'b', 2], ['r2', 'a', 1], ['r2', 'b', 2]] | [['r1', 'b', 2], ['r2', 'a', 1], ['r2', 'b', 2]] | Passed |
| source only | [] | [] | Passed |
| negative viewport | [['r0', 'b', 1], ['r1', 'a', 1], ['r1', 'b', 1]] | [['r0', 'b', 1], ['r1', 'a', 1], ['r1', 'b', 1]] | Passed |
| single seed | [['r1', 'a', 7], ['r1', 'b', 7]] | [['r0', 'b', 7], ['r1', 'a', 7], ['r1', 'b', 7]] | Failed |
SHA-256 / e87b771be98b0074859ff006c941ee97c193372f8f80c38d154728de9fe22dc3
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rows, cols, source, target, grid, locked, axis):
sr0,sr1,sc0,sc1=source
tr0,tr1,tc0,tc1=target
patches=[]
for r in range(tr0,tr1+1):
for c in range(tc0,tc1+1):
if sr0<=r<=sr1 and sc0<=c<=sc1: continue
if not (0<=r<len(rows) and 0<=c<len(cols)): continue
if (rows[r],cols[c]) in locked: continue
rr=sr0+(r-sr0)%(sr1-sr0+1)
cc=sc0+(c-sc0)%(sc1-sc0+1)
if axis=='vertical' and not sc0<=c<=sc1: continue
if axis=='horizontal' and not sr0<=r<=sr1: continue
patches.append((rows[r],cols[c],grid[rr][cc]))
return patches
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,1+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 7), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 2:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,2+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 8), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 3:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,3+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 9), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 4:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,4+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 10), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
if N == 5:
check('vertical pattern', solve(['r0','r1','r2','r3','r4'], ['a','b','c','d'], (1,2,1,2), (0,4,0,3), [[1,2,3,4],[5,5+6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]], [], 'vertical'), [('r0', 'b', 10), ('r0', 'c', 11), ('r3', 'b', 11), ('r3', 'c', 7), ('r4', 'b', 10), ('r4', 'c', 11)])
check('horizontal pattern', solve(['r0','r1','r2','r3'], ['a','b','c','d','e'], (1,2,1,2), (0,3,0,4), [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]], [], 'horizontal'), [('r1', 'a', 8), ('r1', 'd', 7), ('r1', 'e', 8), ('r2', 'a', 13), ('r2', 'd', 12), ('r2', 'e', 13)])
check('locked cell', solve(['r0','r1','r2'], ['a','b'], (0,0,0,1), (0,2,0,1), [[1,2],[3,4],[5,6]], [('r1','a')], 'vertical'), [('r1', 'b', 2), ('r2', 'a', 1), ('r2', 'b', 2)])
check('source only', solve(['r0'], ['a'], (0,0,0,0), (0,0,0,0), [[1]], [], 'both'), [])
check('negative viewport', solve(['r0','r1'], ['a','b'], (0,0,0,0), (-1,1,-1,1), [[1,2],[3,4]], [], 'both'), [('r0', 'b', 1), ('r1', 'a', 1), ('r1', 'b', 1)])
check('single seed', solve(['r0','r1'], ['a','b'], (0,0,0,0), (0,1,0,1), [[7,2],[3,4]], [], 'both'), [('r0', 'b', 7), ('r1', 'a', 7), ('r1', 'b', 7)])
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 |
|---|---|---|---|
| vertical pattern | [['r0', 'b', 10], ['r0', 'c', 11], ['r3', 'b', 7], ['r3', 'c', 7], ['r4', 'b', 10], ['r4', 'c', 11]] | [['r0', 'b', 10], ['r0', 'c', 11], ['r3', 'b', 7], ['r3', 'c', 7], ['r4', 'b', 10], ['r4', 'c', 11]] | Passed |
| horizontal pattern | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | [['r1', 'a', 8], ['r1', 'd', 7], ['r1', 'e', 8], ['r2', 'a', 13], ['r2', 'd', 12], ['r2', 'e', 13]] | Passed |
| locked cell | [['r1', 'b', 2], ['r2', 'a', 1], ['r2', 'b', 2]] | [['r1', 'b', 2], ['r2', 'a', 1], ['r2', 'b', 2]] | Passed |
| source only | [] | [] | Passed |
| negative viewport | [['r0', 'b', 1], ['r1', 'a', 1], ['r1', 'b', 1]] | [['r0', 'b', 1], ['r1', 'a', 1], ['r1', 'b', 1]] | Passed |
| single seed | [['r0', 'b', 7], ['r1', 'a', 7], ['r1', 'b', 7]] | [['r0', 'b', 7], ['r1', 'a', 7], ['r1', 'b', 7]] | Passed |
SHA-256 / a3797d064a7aa65ea464c4c12eaaf568bbeb30c0b96da20f9360dd9f2fd357d3
Verification & scope
The source rectangle is nonempty and within the rectangular grid; target coordinates and lock pairs are integral/stable. Deterministic offline table UI model; no browser, DOM, framework, or standards conformance is claimed. 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:43:00.222324+00:00.
Case digest / 4d2baa90298f2b5076dc16730d1bab5d55d6e1ad20bca5409360632d8dd996c3