Hi,

I have a problem involving combinatorics and permutations and my brain

hurts.

The problem: I have a hash of products in input. I then build an array

of equivalent products for each input product. I end up with an array

such as this:

{

:input_prod_1 => [:p1_1, :p1_2, … , p1_x],

:input_prod_2 => [:p2_1, :p2_1, …, p2_y],

…

:input_prod_m => [:pm_1, :pm_1, …, pm_z]

}

I need all the unique combinations of each product from the first group

with each of the second. For example:

given: [ [:p1, :p2], [:p3, p4] ]

I need to obtain: [ [:p1, :p3], [:p1, :p4], [:p2, :p3], [:p2, :p4] ]

Given: [ [:p1], [:p2, :p3, :p4] ]

I need: [ [:p1, :p2], [:p1, :p3], [:p1, :p4] ]

The number of input products is in the order of tens (max); the same

goes for the number of equivalent products. This means the total number

of partitions is pretty large and I need to weed out the equivalent ones

soon/fast enough to reduce the total number.

I’ve been making attempts with the permutation gem all morning; looks

like it’s doing the “right thing”, but frankly my maths skills are

lacking and I can’t really figure out how to use it (should I?).

Also: order is not important for the result arrays.

This is easy, right? :-/