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>