Set consolidation: Difference between revisions

Content added Content deleted
m (→‎{{header|jq}}: simplify)
(→‎{{header|Ruby}}: change data(String->Symbol), correction of the control structure.)
Line 1,448: Line 1,448:
<lang ruby>require 'set'
<lang ruby>require 'set'


tests = [[['A', 'B'], ['C','D']],
tests = [[[:A,:B], [:C,:D]],
[['A','B'], ['B','D']],
[[:A,:B], [:B,:D]],
[['A','B'], ['C','D'], ['D','B']],
[[:A,:B], [:C,:D], [:D,:B]],
[['H','I','K'], ['A','B'], ['C','D'], ['D','B'], ['F','G','H']]]
[[:H,:I,:K], [:A,:B], [:C,:D], [:D,:B], [:F,:G,:H]]]
tests = tests.map{|sets| sets.map(&:to_set)}
tests.map!{|sets| sets.map(&:to_set)}


tests.map do |sets|
tests.each do |sets|
loop until sets.combination(2).none? do |a,b|
until sets.combination(2).none?{|a,b| a.merge(b) && sets.delete(b) if a.intersect?(b)}
if a.intersect?(b) then
a.merge(b)
sets.delete(b)
end
end
end
p sets
p sets
end
end</lang>
{{out}}
</lang>
{{Output}}
<pre>
<pre>
[#<Set: {"A", "B"}>, #<Set: {"C", "D"}>]
[#<Set: {:A, :B}>, #<Set: {:C, :D}>]
[#<Set: {"A", "B", "D"}>]
[#<Set: {:A, :B, :D}>]
[#<Set: {"A", "B", "D", "C"}>]
[#<Set: {:A, :B, :D, :C}>]
[#<Set: {"H", "I", "K", "F", "G"}>, #<Set: {"A", "B", "D", "C"}>]
[#<Set: {:H, :I, :K, :F, :G}>, #<Set: {:A, :B, :D, :C}>]
</pre>
</pre>
Note: After execution, the contents of tests are exchanged.

=={{header|Scala}}==
=={{header|Scala}}==
<lang Scala>object SetConsolidation extends App {
<lang Scala>object SetConsolidation extends App {