FA-66076 / Aviation weight and balance / Open access
Fuel in unlisted tanks dropped from the aircraft · case 01
A full tip tank that is not in the burn order disappears from the CG trajectory.
ROOT CAUSE
Starting weight and moment sum only tanks in the burn order, treating unusable fuel as absent.
VERIFIED REPAIR
Include every tank in the starting weight and moment; only the burn sequence is limited to listed tanks.
Unsuccessful approach: Including unlisted fuel in weight but not in moment leaves it at the zero-fuel arm.
Case contract
Input {'zfw','zfm','tanks':[[name,arm,gal]],'order':[names],'step','density'}. Fuel burns in 'order', one step (or the tank remainder, no carry) at a time; a tank listed again after being emptied burns nothing; unlisted tanks are unusable but their fuel stays on board. CG is sampled at start and after each step. Return [start CG, min CG, max CG, final CG] rounded 2.
Why this case matters
Tank burn sequence determines the CG trajectory in flight; the extreme CG can occur mid-sequence rather than at takeoff or landing.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(tanks[n][1] for n in set(x['order'])) * dens
m = x['zfm'] + sum(tanks[n][0] * tanks[n][1] for n in set(x['order'])) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs), 2), round(max(cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 42.22, 41.0] | [42.22, 41.0, 42.22, 41.0] | Passed |
| uneven step remainder | [42.86, 41.71, 42.86, 42.0] | [42.86, 41.71, 42.86, 42.0] | Passed |
| unusable tank left | [40.66, 40.0, 40.66, 40.0] | [40.97, 40.35, 40.97, 40.35] | Failed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 42.86, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Passed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [40.19, 40.19, 42.82, 42.82] | [40.25, 40.25, 42.71, 42.71] | Failed |
| sampled case 2 | [39.21, 39.21, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Passed |
| sampled case 3 | [38.1, 37.98, 38.41, 38.41] | [38.47, 38.36, 38.78, 38.78] | Failed |
SHA-256 / f4ba76ed1d49c1e4268c29c1721211eecdb9ebaa53b7397f6efc75fbde0e2275
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(g for _, g in tanks.values()) * dens
m = x['zfm'] + sum(tanks[n][0] * tanks[n][1] for n in set(x['order'])) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs), 2), round(max(cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 42.22, 41.0] | [42.22, 41.0, 42.22, 41.0] | Passed |
| uneven step remainder | [42.86, 41.71, 42.86, 42.0] | [42.86, 41.71, 42.86, 42.0] | Passed |
| unusable tank left | [39.78, 39.06, 39.78, 39.06] | [40.97, 40.35, 40.97, 40.35] | Failed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 42.86, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Passed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [37.79, 37.79, 39.89, 39.89] | [40.25, 40.25, 42.71, 42.71] | Failed |
| sampled case 2 | [39.21, 39.21, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Passed |
| sampled case 3 | [35.68, 35.55, 35.85, 35.85] | [38.47, 38.36, 38.78, 38.78] | Failed |
SHA-256 / 360d8400657d0eb7c19f9f57631f64c5e3a9bed6504ad9a388bef4f1457ed1fe
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(g for _, g in tanks.values()) * dens
m = x['zfm'] + sum(a * g for a, g in tanks.values()) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs), 2), round(max(cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 42.22, 41.0] | [42.22, 41.0, 42.22, 41.0] | Passed |
| uneven step remainder | [42.86, 41.71, 42.86, 42.0] | [42.86, 41.71, 42.86, 42.0] | Passed |
| unusable tank left | [40.97, 40.35, 40.97, 40.35] | [40.97, 40.35, 40.97, 40.35] | Passed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 42.86, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Passed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [40.25, 40.25, 42.71, 42.71] | [40.25, 40.25, 42.71, 42.71] | Passed |
| sampled case 2 | [39.21, 39.21, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Passed |
| sampled case 3 | [38.47, 38.36, 38.78, 38.78] | [38.47, 38.36, 38.78, 38.78] | Passed |
SHA-256 / 41f510c5dc18ee31864f4acdc8f2b3077ce62773c821d11dc9e8e6ea7c44c433
Verification & scope
A deterministic toy loading model with stipulated constants; it is not an approved aircraft flight manual procedure and makes no claim of regulatory conformance. 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:47:39.807987+00:00.
Case digest / e6a83d18c317a6fc152e9e1cd95c58687d46e1570dbb6996f6050abb0f9099da