36 lines
894 B
Text
36 lines
894 B
Text
module Greatest_subsequential_sum (filename) {
|
|
showGSS=lambda (a)->{
|
|
function Greatest_subsequential_sum(a as array){
|
|
var best = 0
|
|
var start = 0
|
|
var end = 0
|
|
var sum = 0
|
|
var sumStart = 0
|
|
var i = 0
|
|
s=each(a)
|
|
while s {
|
|
sum +=array(s)
|
|
if (sum > best) then {
|
|
best = sum
|
|
start = sumStart
|
|
end = i + 1
|
|
} else.if (sum < 0) then {
|
|
sum = 0
|
|
sumStart = i + 1
|
|
}
|
|
i++
|
|
}
|
|
=a#slice(start, end-1)
|
|
}
|
|
= "("+a#str$(",")+") -> ("+ Greatest_subsequential_sum(a)#str$(",")+")"
|
|
}
|
|
open filename for output as#f
|
|
print #f, showGSS((-1 , 2 , -1))
|
|
print #f, showGSS((-1, 2, -1, 3, -1))
|
|
print #f, showGSS((-1, 1, 2, -5, -6))
|
|
print #f, showGSS((-1 , -2 , 3 , 5 , 6 , -2 , -1 , 4 , -4 , 2 , -1))
|
|
close #f
|
|
if filename<>"" then win notepad, dir$+filename
|
|
}
|
|
Greatest_subsequential_sum "" ' to screen
|
|
Greatest_subsequential_sum "out.txt"
|