Not quite sure that my question is fully formed, but what I'm trying to do is basically this:
x = %w(a b)
y = %w(c d)
combine(x, y)
The order of the array is always the same, so the opposite of each, for example [b, a], is not included in the result.
What is it called and what is an effective way to implement this?
I see Array # permutation , but it’s not really ...
This, we hope, will work for any number of arrays and values: combine(*arrays)
Thank!
Update
Here is the best example of what I'm looking for:
This (x | y).combination(x.length).to_acauses the following:
x = ["front_door", "open"]
y = ["back_door", "closed"]
(x | y).combination(x.length).to_a
=> [["front_door", "open"], ["front_door", "back_door"], ["front_door", "closed"], ["open", "back_door"], ["open", "closed"], ["back_door", "closed"]]
The actual result I'm looking for is:
=> [["front_door", "open"], ["front_door", "closed"], ["back_door", "open"], ["back_door", "closed"]]
Or if it was a longer array:
x = ["house", "front_door", "open"]
y = ["building", "back_door", "closed"]
compute(x, y)
=> ["house", "front_door", "open"], ["house", "back_door", "open"], ["house", "front_door", "closed"], ["house", "back_door", "closed"], ["building", "front_door", "open"], ["building", "back_door", "open"], ["building", "front_door", "closed"], ["building", "back_door", "closed"]
Any ideas?