RosettaCodeData/Task/Greatest-subsequential-sum/Sidef/greatest-subsequential-sum.sidef

20 lines
496 B
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
func maxsubseq(*a) {
2023-07-18 13:51:12 -07:00
var (start, end, sum, maxsum) = (-1, -1, 0, 0)
2023-07-01 11:58:00 -04:00
a.each_kv { |i, x|
2023-07-18 13:51:12 -07:00
sum += x
2023-07-01 11:58:00 -04:00
if (maxsum < sum) {
2023-07-18 13:51:12 -07:00
maxsum = sum
end = i
2023-07-01 11:58:00 -04:00
}
elsif (sum < 0) {
2023-07-18 13:51:12 -07:00
sum = 0
start = i
2023-07-01 11:58:00 -04:00
}
2023-07-18 13:51:12 -07:00
}
a.slice(start+1).first(end-start)
2023-07-01 11:58:00 -04:00
}
2023-07-18 13:51:12 -07:00
 
say maxsubseq(-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1)
say maxsubseq(-2, -2, -1, 3, 5, 6, -1, 4, -4, 2, -1)
say maxsubseq(-2, -2, -1, -3, -5, -6, -1, -4, -4, -2, -1)