Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,69 @@
|
|||
package require Tcl 8.5
|
||||
set a {-1 -2 3 5 6 -2 -1 4 -4 2 -1}
|
||||
|
||||
# from the Perl solution
|
||||
proc maxsumseq1 {a} {
|
||||
set len [llength $a]
|
||||
set maxsum 0
|
||||
|
||||
for {set start 0} {$start < $len} {incr start} {
|
||||
for {set end $start} {$end < $len} {incr end} {
|
||||
set sum 0
|
||||
incr sum [expr [join [lrange $a $start $end] +]]
|
||||
if {$sum > $maxsum} {
|
||||
set maxsum $sum
|
||||
set maxsumseq [lrange $a $start $end]
|
||||
}
|
||||
}
|
||||
}
|
||||
return $maxsumseq
|
||||
}
|
||||
|
||||
# from the Python solution
|
||||
proc maxsumseq2 {sequence} {
|
||||
set start -1
|
||||
set end -1
|
||||
set maxsum_ 0
|
||||
set sum_ 0
|
||||
for {set i 0} {$i < [llength $sequence]} {incr i} {
|
||||
set x [lindex $sequence $i]
|
||||
incr sum_ $x
|
||||
if {$maxsum_ < $sum_} {
|
||||
set maxsum_ $sum_
|
||||
set end $i
|
||||
} elseif {$sum_ < 0} {
|
||||
set sum_ 0
|
||||
set start $i
|
||||
}
|
||||
}
|
||||
assert {$maxsum_ == [maxsum $sequence]}
|
||||
assert {$maxsum_ == [sum [lrange $sequence [expr {$start + 1}] $end]]}
|
||||
return [lrange $sequence [expr {$start + 1}] $end]
|
||||
}
|
||||
|
||||
proc maxsum {sequence} {
|
||||
set maxsofar 0
|
||||
set maxendinghere 0
|
||||
foreach x $sequence {
|
||||
set maxendinghere [expr {max($maxendinghere + $x, 0)}]
|
||||
set maxsofar [expr {max($maxsofar, $maxendinghere)}]
|
||||
}
|
||||
return $maxsofar
|
||||
}
|
||||
|
||||
proc assert {condition {message "Assertion failed!"}} {
|
||||
if { ! [uplevel 1 [list expr $condition]]} {
|
||||
return -code error $message
|
||||
}
|
||||
}
|
||||
|
||||
proc sum list {
|
||||
expr [join $list +]
|
||||
}
|
||||
|
||||
|
||||
puts "sequence: $a"
|
||||
puts "maxsumseq1: [maxsumseq1 $a]"
|
||||
puts [time {maxsumseq1 $a} 1000]
|
||||
puts "maxsumseq2: [maxsumseq2 $a]"
|
||||
puts [time {maxsumseq2 $a} 1000]
|
||||
Loading…
Add table
Add a link
Reference in a new issue