Range consolidation: Difference between revisions
Content added Content deleted
(Added Prolog Solution) |
m (Show ranges before and after consolidation) |
||
Line 965: | Line 965: | ||
merge([Range], [Range]):-!. |
merge([Range], [Range]):-!. |
||
merge([r(Min1, Max1), r(Min2, Max2)|Rest], Merged):- |
merge([r(Min1, Max1), r(Min2, Max2)|Rest], Merged):- |
||
Min2 =< Max1, |
|||
!, |
!, |
||
Min is min(Min1, Min2), |
|||
Max is max(Max1, Max2), |
Max is max(Max1, Max2), |
||
merge([r( |
merge([r(Min1, Max)|Rest], Merged). |
||
merge([Range|Ranges], [Range|Merged]):- |
merge([Range|Ranges], [Range|Merged]):- |
||
merge(Ranges, Merged). |
merge(Ranges, Merged). |
||
overlap(Min1, Max1, Min2, Max2):- |
|||
Min1 =< Max2, |
|||
Min2 =< Max1. |
|||
write_range(r(Min, Max)):- |
write_range(r(Min, Max)):- |
||
Line 983: | Line 978: | ||
write_ranges([Range]):- |
write_ranges([Range]):- |
||
!, |
!, |
||
write_range(Range) |
write_range(Range). |
||
nl. |
|||
write_ranges([Range|Ranges]):- |
write_ranges([Range|Ranges]):- |
||
write_range(Range), |
write_range(Range), |
||
Line 999: | Line 993: | ||
forall(test_case(Ranges), |
forall(test_case(Ranges), |
||
(consolidate_ranges(Ranges, Consolidated), |
(consolidate_ranges(Ranges, Consolidated), |
||
write_ranges( |
write_ranges(Ranges), write(' -> '), |
||
write_ranges(Consolidated), nl)).</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
[1.1, 2.2] |
[1.1, 2.2] -> [1.1, 2.2] |
||
[6.1, 8.3] |
[6.1, 7.2], [7.2, 8.3] -> [6.1, 8.3] |
||
[1, 2], [3, 4] |
[4, 3], [2, 1] -> [1, 2], [3, 4] |
||
[-2, -1], [1, 2], [3, 10] |
[4, 3], [2, 1], [-1, -2], [3.9, 10] -> [-2, -1], [1, 2], [3, 10] |
||
[-6, -1], [1, 8] |
[1, 3], [-6, -1], [-4, -5], [8, 2], [-6, -6] -> [-6, -1], [1, 8] |
||
</pre> |
</pre> |
||