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

32 lines
787 B
D

import std.stdio, std.algorithm, std.array;
dchar[][] consolidate(dchar[][] sets) @safe {
foreach (set; sets)
set.sort();
dchar[][] consolidateR(dchar[][] s) {
if (s.length < 2)
return s;
auto r = [s[0]];
foreach (x; consolidateR(s[1 .. $])) {
if (!r[0].setIntersection(x).empty) {
r[0] = r[0].setUnion(x).uniq.array;
} else
r ~= x;
}
return r;
}
return consolidateR(sets);
}
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;
}