Anonymous user
Set consolidation: Difference between revisions
→{{header|D}}: added recursive version
m (→{{header|D}}) |
(→{{header|D}}: added recursive version) |
||
Line 371:
{{trans|Go}}
<lang d>import std.stdio, std.algorithm, std.array;
dchar[][] consolidate(dchar[][] sets) {
foreach (set; sets) set.sort;
for (size_t i = 0; i < sets.length - 1; i++) {▼
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();
}▼
void main() {
Line 384 ⟶ 401:
sets = [['H','I','K'], ['A','B'], ['C','D'], ['D','B'], ['F','G','H']];
writeln(consolidate(sets));
}</lang>
▲}
<pre>["AB", "CD"]
["ABD"]
["ABCD"]
["ABCD", "FGHIK"]</pre>
'''Recursive version''', as described on talk page.
<lang d>import std.stdio, std.algorithm, std.array;
dchar[][] consolidate(dchar[][] sets) {
foreach (set; sets) set.sort;
dchar[][] consolidateR(dchar[][] s) {
▲ for (size_t i = 0; i < sets.length - 1; i++) {
if (
foreach (x;
if (!setIntersection(r[0], x).empty)
} else r
▲ sets[i] = null;
▲ }
}
return r;
}
return
}
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));
}</lang>
<pre>["AB", "CD"]
["ABD"]
["ABCD"]
["
=={{header|Ela}}==
|