Water collected between towers: Difference between revisions
Content added Content deleted
Line 1,352: | Line 1,352: | ||
=={{header|M2000 Interpreter}}== |
=={{header|M2000 Interpreter}}== |
||
===Scan min-max for each bar=== |
|||
<lang M2000 Interpreter> |
<lang M2000 Interpreter> |
||
Module Water { |
Module Water { |
||
Line 1,384: | Line 1,385: | ||
} |
} |
||
Water |
Water |
||
===Drain method=== |
|||
</lang> |
</lang> |
||
Module Water2 { |
|||
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 |
|||
range=bar()#max()-bar()#min() |
|||
if range>0 then |
|||
dim water(len(bar()))=bar()#max() |
|||
water(0)=bar(0) |
|||
water(len(bar())-1)=bar(len(bar())-1) |
|||
For j=1 to range-1 |
|||
For i=1 to len(bar())-2 |
|||
if water(i)>bar(i) then if water(i-1)<water(i) Then water(i)-- |
|||
Next i |
|||
For i=len(bar())-2 to 1 |
|||
if water(i)>bar(i) then if water(i+1)<water(i) Then water(i)-- |
|||
Next i |
|||
Next j |
|||
Data water()#sum()-bar()#sum() |
|||
Else |
|||
Data 0 |
|||
End if |
|||
Next bar |
|||
finalwater=[] |
|||
Print finalwater |
|||
} |
|||
Water2 |
|||
<lang M2000 Interpreter> |
|||
</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |