Range consolidation: Difference between revisions

Added AutoHotkey
mNo edit summary
(Added AutoHotkey)
Line 183:
( 1.0 3.0) ( -6.0 -1.0) ( -4.0 -5.0) ( 8.0 2.0) ( -6.0 -6.0) ( -6.0 -1.0) ( 1.0 8.0)
</pre>
 
=={{header|AutoHotkey}}==
<lang AutoHotkey>RangeConsolidation(arr){
arr1 := [], arr2 := [], result := []
for i, obj in arr
arr1[i,1] := min(arr[i]*), arr1[i,2] := max(arr[i]*) ; sort each range individually
for i, obj in arr1
if (obj.2 > arr2[obj.1])
arr2[obj.1] := obj.2 ; creates helper array sorted by range
i := 1
for start, stop in arr2
if (i = 1) || (start > result[i-1, 2]) ; first or non overlapping range
result[i, 1] := start, result[i, 2] := stop, i++
else ; overlapping range
result[i-1, 2] := stop > result[i-1, 2] ? stop : result[i-1, 2]
return result
}</lang>
Examples:<lang AutoHotkey>test1 := [[1.1, 2.2]]
test2 := [[6.1, 7.2], [7.2, 8.3]]
test3 := [[4, 3], [2, 1]]
test4 := [[4, 3], [2, 1], [-1, -2], [3.9, 10]]
test5 := [[1, 3], [-6, -1], [-4, -5], [8, 2], [-6, -6]]
 
result := ""
loop, 5
{
output := ""
for i, obj in RangeConsolidation(test%A_Index%)
output .= "[" format("{:g}", obj.1) ", " format("{:g}", obj.2) "], "
result .= Trim(output, ", ") "`n"
}
MsgBox % result
return</lang>
{{out}}
<pre>[1.1, 2.2]
[6.1, 8.3]
[1, 2], [3, 4]
[-2, -1], [1, 2], [3, 10]
[-6, -1], [1, 8]</pre>
 
=={{header|C}}==
299

edits