How to resolve the algorithm Water collected between towers step by step in the M2000 Interpreter programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Water collected between towers step by step in the M2000 Interpreter programming language
Table of Contents
Problem Statement
In a two-dimensional world, we begin with any bar-chart (or row of close-packed 'towers', each of unit width), and then it rains, completely filling all convex enclosures in the chart with water.
In the example above, a bar chart representing the values [5, 3, 7, 2, 6, 4, 5, 9, 1, 2] has filled, collecting 14 units of water. Write a function, in your language, from a given array of heights, to the number of water units that can be held in this way, by a corresponding bar chart. Calculate the number of water units that could be collected by bar charts representing each of the following seven series:
See, also:
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Water collected between towers step by step in the M2000 Interpreter programming language
Source code in the m2000 programming language
Module Water {
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
For i=1 to len(bar())-2
level1=bar(i)
level2=level1
m=each(bar(), i+1, 1)
while m
if array(m)>level1 then level1=array(m)
End While
n=each(bar(), i+1, -1)
while n
if array(n)>level2 then level2=array(n)
End While
acc+=max.data(min(level1, level2)-bar(i), 0)
Next i
Data acc ' push to end value
Next bar
finalwater=[] ' is a stack object
Print finalwater
}
Water
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(ihr(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
You may also check:How to resolve the algorithm Loops/For step by step in the C programming language
You may also check:How to resolve the algorithm Sum of a series step by step in the Red programming language
You may also check:How to resolve the algorithm Return multiple values step by step in the PowerShell programming language
You may also check:How to resolve the algorithm Singly-linked list/Traversal step by step in the Trith programming language
You may also check:How to resolve the algorithm History variables step by step in the Haskell programming language