Water collected between towers: Difference between revisions

Content added Content deleted
Line 1,422: Line 1,422:
Water2
Water2
<lang M2000 Interpreter>
<lang M2000 Interpreter>
</lang>

===Faster Method===
{{trans|AWK}}
<lang M2000 Interpreter>
Module Water3 {
Flush ' empty stack
Data (1, 5, 3, 7, 2)
Data (5, 3, 7, 2, 6, 4, 5, 9, 1, 2)
Data (2, 6, 3, 5, 2, 8, 1, 4, 2, 2, 5, 3, 5, 7, 4, 1)
Data (5, 5, 5, 5), (5, 6, 7, 8),(8, 7, 7, 6)
Data (6, 7, 10, 7, 6)
bars=stack.size ' mark stack frame
Dim bar()
for bar=1 to bars
bar()=Array ' pop an array from stack
acc=0
n=len(bar())-1
dim hl(n+1), hr(n+1)
For i=n to 0
hr(i)=max.data(bar(i), if(i<n->hr(i+1), 0))
Next i
For i=0 to n
hl(i)=max.data(bar(i), if(i>0->hl(i-1), 0))
acc+=min.data(hl(i), hr(i))-bar(i)
Next i
Data acc ' push to end value
Next bar
finalwater=[] ' is a stack object
Print finalwater
}
Water3
</lang>
</lang>