Calculating the nth Term of a Cartesian Product
I recently had to calculate the nth term for a Cartesian Product. I wanted to avoid generating the entire Cartesian Product in order to jump to the nth term. I wanted a way to derive the nth term.
For example, let's say I have two arrays:
The Cartesian Product of the above two arrays can be:
Now, when I ask for the 3rd term of the above cartesian product, I want to receive
My solution is below:
Example:
The next trick is to turn
Suggestions for how to improve this?
For example, let's say I have two arrays:
a = [
[1,2,3],
[4,5]
]
The Cartesian Product of the above two arrays can be:
[[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]
Now, when I ask for the 3rd term of the above cartesian product, I want to receive
[3,4]
. Again, I want to do this without calculating the entire set.My solution is below:
def combo(arrays, num)
arrays.map do |a|
v = a[num % a.length]
num /= a.length
v
end
end
Example:
term = combo(a, 2)
puts term.inspect
# [2,4]
The next trick is to turn
[2,4]
back into 2
.Suggestions for how to improve this?