Range consolidation: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) mNo edit summary |
Alpha bravo (talk | contribs) (Added AutoHotkey) |
||
Line 183: | 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) |
( 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> |
</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}}== |
=={{header|C}}== |