Set consolidation: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: changed a comment.) |
Alpha bravo (talk | contribs) (Added AutoHotkey) |
||
Line 246: | Line 246: | ||
{A, B, C, D} |
{A, B, C, D} |
||
{A, B, C, D}, {F, G, H, I, K}</pre> |
{A, B, C, D}, {F, G, H, I, K}</pre> |
||
=={{header|AutoHotkey}}== |
|||
<lang AutoHotkey>SetConsolidation(sets){ |
|||
arr2 := [] , arr3 := [] , arr4 := [] , arr5 := [], result:=[] |
|||
; sort each set individually |
|||
for i, obj in sets |
|||
{ |
|||
arr1 := [] |
|||
for j, v in obj |
|||
arr1[v] := true |
|||
arr2.push(arr1) |
|||
} |
|||
; sort by set's first item |
|||
for i, obj in arr2 |
|||
for k, v in obj |
|||
{ |
|||
arr3[k . i] := obj |
|||
break |
|||
} |
|||
; use numerical index |
|||
for k, obj in arr3 |
|||
arr4[A_Index] := obj |
|||
j := 1 |
|||
for i, obj in arr4 |
|||
{ |
|||
common := false |
|||
for k, v in obj |
|||
if arr5[j-1].HasKey(k) |
|||
{ |
|||
common := true |
|||
break |
|||
} |
|||
if common |
|||
for k, v in obj |
|||
arr5[j-1, k] := true |
|||
else |
|||
arr5[j] := obj, j++ |
|||
} |
|||
; clean up |
|||
for i, obj in arr5 |
|||
for k , v in obj |
|||
result[i, A_Index] := k |
|||
return result |
|||
}</lang> |
|||
Examples:<lang AutoHotkey>test1 := [["A","B"], ["C","D"]] |
|||
test2 := [["A","B"], ["B","D"]] |
|||
test3 := [["A","B"], ["C","D"], ["D","B"]] |
|||
test4 := [["H","I","K"], ["A","B"], ["C","D"], ["D","B"], ["F","G","H"]] |
|||
result := "[" |
|||
loop, 4 |
|||
{ |
|||
for i, obj in SetConsolidation(test%A_Index%) |
|||
{ |
|||
output := "[" |
|||
for j, v in obj |
|||
output .= """" v """," |
|||
result .= RTrim(output, ", ") . "] , " |
|||
} |
|||
result := RTrim(result, ", ") "]`n[" |
|||
} |
|||
MsgBox % RTrim(result, "`n[") |
|||
return</lang> |
|||
{{out}} |
|||
<pre>[["A","B"] , ["C","D"]] |
|||
[["A","B","D"]] |
|||
[["A","B","C","D"]] |
|||
[["A","B","C","D"] , ["F","G","H","I","K"]]</pre> |
|||
=={{header|Bracmat}}== |
=={{header|Bracmat}}== |