Set consolidation: Difference between revisions

(→‎{{header|D}}: added D)
Line 367:
return 0;
}</lang>
 
=={{header|D}}==
<lang d>import std.stdio, std.algorithm, std.array;
 
void main() {
dchar[][] sets = [['A', 'B'], ['C','D']];
writeln(consolidate(sets));
 
sets = [['A','B'], ['B','D']];
writeln(consolidate(sets));
 
sets = [['A','B'], ['C','D'], ['D','B']];
writeln(consolidate(sets));
 
sets = [['H','I','K'], ['A','B'], ['C','D'], ['D','B'], ['F','G','H']];
writeln(consolidate(sets));
}
 
dchar[][] consolidate(dchar[][] sets) {
foreach (set; sets) sort(set);
for (size_t i = 0; i < sets.length - 1; i++) {
if (sets[i].empty)
continue;
for (size_t j = i + 1; j < sets.length; j++) {
if (sets[j].empty)
continue;
if (!setIntersection(sets[i], sets[j]).empty) {
sets[j] = uniq(setUnion(sets[i], sets[j])).array();
sets[i] = null;
}
}
}
return filter!"!a.empty"(sets).array();
}</lang>
<pre>["AB", "CD"]
["ABD"]
["ABCD"]
["ABCD", "FGHIK"]</pre>
 
=={{header|Ela}}==
Anonymous user