Water collected between towers: Difference between revisions
Content added Content deleted
(Added Wren) |
Not a robot (talk | contribs) (Add Cowgol) |
||
Line 572: | Line 572: | ||
(trapped-water [5 3 7 2 6 4 5 9 1 2]) ;; 14 |
(trapped-water [5 3 7 2 6 4 5 9 1 2]) ;; 14 |
||
</lang> |
</lang> |
||
=={{header|Cowgol}}== |
|||
<lang cowgol>include "cowgol.coh"; |
|||
include "argv.coh"; |
|||
# Count the amount of water in a given array |
|||
sub water(towers: [uint8], length: intptr): (units: uint8) is |
|||
units := 0; |
|||
loop |
|||
var right := towers + length; |
|||
loop |
|||
right := @prev right; |
|||
if right < towers or [right] != 0 then |
|||
break; |
|||
end if; |
|||
end loop; |
|||
if right < towers then break; end if; |
|||
var blocks: uint8 := 0; |
|||
var col := towers; |
|||
while col <= right loop |
|||
if [col] != 0 then |
|||
[col] := [col] - 1; |
|||
blocks := blocks + 1; |
|||
elseif blocks != 0 then |
|||
units := units + 1; |
|||
end if; |
|||
col := @next col; |
|||
end loop; |
|||
if blocks < 2 then |
|||
break; |
|||
end if; |
|||
end loop; |
|||
end sub; |
|||
# Read list from the command line and print the answer |
|||
ArgvInit(); |
|||
var towers: uint8[256]; |
|||
var count: @indexof towers := 0; |
|||
var n32: int32; |
|||
loop |
|||
var argmt := ArgvNext(); |
|||
if argmt == 0 as [uint8] then |
|||
break; |
|||
end if; |
|||
(n32, argmt) := AToI(argmt); |
|||
towers[count] := n32 as uint8; |
|||
count := count + 1; |
|||
end loop; |
|||
if count == 0 then |
|||
print("enter towers on command line\n"); |
|||
ExitWithError(); |
|||
end if; |
|||
print_i8(water(&towers[0], count as intptr)); |
|||
print_nl();</lang> |
|||
{{out}} |
|||
<pre>$ ./water.386 1 5 3 7 2 |
|||
2 |
|||
$ ./water.386 5 3 7 2 6 4 5 9 1 2 |
|||
14 |
|||
$ ./water.386 2 6 3 5 2 8 1 4 2 2 5 3 5 7 4 1 |
|||
35 |
|||
$ ./water.386 5 5 5 5 |
|||
0 |
|||
$ ./water.386 5 6 7 8 |
|||
0 |
|||
$ ./water.386 8 7 7 6 |
|||
0 |
|||
$ ./water.386 6 7 10 7 6 |
|||
0</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |