Water collected between towers: Difference between revisions
Content added Content deleted
(added Factor) |
|||
Line 700: | Line 700: | ||
solve [(1,6);(2,7);(3,10);(4,7);(5,6)] -> 0 |
solve [(1,6);(2,7);(3,10);(4,7);(5,6)] -> 0 |
||
solve [(1,5);(39,10);(101,3)] -> 368 |
solve [(1,5);(39,10);(101,3)] -> 368 |
||
</pre> |
|||
=={{header|Factor}}== |
|||
<lang factor>USING: formatting kernel math math.order sequences ; |
|||
IN: rosetta-code.water-towers |
|||
CONSTANT: test-cases { |
|||
{ 1 5 3 7 2 } |
|||
{ 5 3 7 2 6 4 5 9 1 2 } |
|||
{ 2 6 3 5 2 8 1 4 2 2 5 3 5 7 4 1 } |
|||
{ 5 5 5 5 } |
|||
{ 5 6 7 8 } |
|||
{ 8 7 7 6 } |
|||
{ 6 7 10 7 6 } |
|||
} |
|||
: max-sweep ( seq -- seq' ) 0 [ max ] accumulate* ; |
|||
: area ( seq -- n ) |
|||
[ ] [ max-sweep ] [ <reversed> max-sweep reverse ] tri |
|||
[ min ] 2map swap [ - ] 2map sum ; |
|||
test-cases [ dup area "%[%d, %] -> %d\n" printf ] each</lang> |
|||
{{out}} |
|||
<pre> |
|||
{ 1, 5, 3, 7, 2 } -> 2 |
|||
{ 5, 3, 7, 2, 6, 4, 5, 9, 1, 2 } -> 14 |
|||
{ 2, 6, 3, 5, 2, 8, 1, 4, 2, 2, 5, 3, 5, 7, 4, 1 } -> 35 |
|||
{ 5, 5, 5, 5 } -> 0 |
|||
{ 5, 6, 7, 8 } -> 0 |
|||
{ 8, 7, 7, 6 } -> 0 |
|||
{ 6, 7, 10, 7, 6 } -> 0 |
|||
</pre> |
</pre> |
||