RosettaCodeData/Task/Set-consolidation/D/set-consolidation-1.d
2023-07-01 13:44:08 -04:00

29 lines
745 B
D

import std.stdio, std.algorithm, std.array;
dchar[][] consolidate(dchar[][] sets) @safe {
foreach (set; sets)
set.sort();
foreach (i, ref si; sets[0 .. $ - 1]) {
if (si.empty)
continue;
foreach (ref sj; sets[i + 1 .. $])
if (!sj.empty && !si.setIntersection(sj).empty) {
sj = si.setUnion(sj).uniq.array;
si = null;
}
}
return sets.filter!"!a.empty".array;
}
void main() @safe {
[['A', 'B'], ['C','D']].consolidate.writeln;
[['A','B'], ['B','D']].consolidate.writeln;
[['A','B'], ['C','D'], ['D','B']].consolidate.writeln;
[['H','I','K'], ['A','B'], ['C','D'],
['D','B'], ['F','G','H']].consolidate.writeln;
}