26 lines
716 B
Text
26 lines
716 B
Text
program set_consolidation;
|
|
tests := [
|
|
{{'A','B'}, {'C','D'}},
|
|
{{'A','B'}, {'B','D'}},
|
|
{{'A','B'}, {'C','D'}, {'D','B'}},
|
|
{{'H','I','K'}, {'A','B'}, {'C','D'}, {'D','B'}, {'F','G','H'}}
|
|
];
|
|
|
|
loop for t in tests do
|
|
print(consolidate(t));
|
|
end loop;
|
|
|
|
proc consolidate(sets);
|
|
outp := {};
|
|
loop while sets /= {} do
|
|
set_ from sets;
|
|
loop until overlap = {} do
|
|
overlap := {s : s in sets | exists el in s | el in set_};
|
|
set_ +:= {} +/ overlap;
|
|
sets -:= overlap;
|
|
end loop;
|
|
outp with:= set_;
|
|
end loop;
|
|
return outp;
|
|
end proc;
|
|
end program;
|