Set consolidation: Difference between revisions

Content added Content deleted
(Replaced the "seq[set[char]]" by a "varargs[set[char]]". Removed useless "$" in "echo $consolidate...".)
Line 1,433: Line 1,433:
</pre>
</pre>


=={{header|Mathematica}}==
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<lang Mathematica>reduce[x_] :=
<lang Mathematica>reduce[x_] :=
Block[{pairs, unique},
Block[{pairs, unique},
Line 1,442: Line 1,442:
unique = Complement[Range@Length@x, Flatten@pairs];
unique = Complement[Range@Length@x, Flatten@pairs];
Join[Union[Flatten[x[[#]]]] & /@ pairs, x[[unique]]]]
Join[Union[Flatten[x[[#]]]] & /@ pairs, x[[unique]]]]

consolidate[x__] := FixedPoint[reduce, {x}]</lang>
consolidate[x__] := FixedPoint[reduce, {x}]</lang>
<pre>consolidate[{a, b}, {c, d}]
<pre>consolidate[{a, b}, {c, d}]
-> {{a, b}, {c, d}}
-> {{a, b}, {c, d}}

consolidate[{a, b}, {b, d}]
consolidate[{a, b}, {b, d}]
-> {{a, b, d}}
-> {{a, b, d}}

consolidate[{a, b}, {c, d}, {d, b}]
consolidate[{a, b}, {c, d}, {d, b}]
-> {{a, b, c, d}}
-> {{a, b, c, d}}

consolidate[{h, i, k}, {a, b}, {c, d}, {d, b}, {f, g, h}]
consolidate[{h, i, k}, {a, b}, {c, d}, {d, b}, {f, g, h}]
-> {{a,b,c,d},{f,g,h,i,k}}</pre>
-> {{a,b,c,d},{f,g,h,i,k}}</pre>