Case 091
Maximum subarray (Kadane's algorithm)
max_subarray_kadane.eml finds the largest sum obtainable from any contiguous run of a list, for five samples — including the classic [-2, 1, -3, 4, -1, 2, 1, -5, 4] -> 6.
ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-07-25
EML
eml# Self-authored for the EML case corpus (no external origin). Kadane's
# algorithm: the largest sum obtainable from any contiguous run of a list.
# Dynamic programming with NO table at all — the whole "previous
# subproblem" state collapses into a single running variable, which is what
# makes this a useful contrast with the corpus's table-based DP cases
# (examples/edit-distance/, examples/longest-common-subsequence/,
# examples/coin-change-dp/).
#
# The all-negative sample matters: a version that seeds `best` at 0 instead
# of at the first element would wrongly answer 0 there, since it would
# silently allow the empty subarray.
def max_subarray(numbers):
len(numbers) => n
numbers[0] => best
numbers[0] => current
1 => i
while i < n:
numbers[i] => x
current + x => extended
if x > extended:
x => current
else:
extended => current
if current > best:
current => best
i + 1 => i
return best
samples^+[[-2, 1, -3, 4, -1, 2, 1, -5, 4], [1, 2, 3, 4], [-5, -2, -8], [5], [2, -1, 2, -1, 2]]
for numbers in samples:
max_subarray(numbers) => best
str(numbers) + " -> " + str(best) => line
line^0Python (deterministic transpilation)
pythondef max_subarray(numbers):
n = len(numbers)
best = numbers[0]
current = numbers[0]
i = 1
while i < n:
x = numbers[i]
extended = current + x
if x > extended:
current = x
else:
current = extended
if current > best:
best = current
i = i + 1
return best
samples = [[-2, 1, -3, 4, -1, 2, 1, -5, 4], [1, 2, 3, 4], [-5, -2, -8], [5], [2, -1, 2, -1, 2]]
for numbers in samples:
best = max_subarray(numbers)
line = str(numbers) + " -> " + str(best)
print(line)stdout (executed)
text[-2, 1, -3, 4, -1, 2, 1, -5, 4] -> 6
[1, 2, 3, 4] -> 10
[-5, -2, -8] -> -2
[5] -> 5
[2, -1, 2, -1, 2] -> 4Trace event types
eml:run:starteml:defeml:assigneml:calleml:returneml:outputeml:run:done