Range consolidation: Difference between revisions

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

edits