1

I'm sorry if this is a duplicate, but I haven't found a solution to my problem. I have 4 groups of words, I need to create all possible combinations of 4, yet keeping group restrictions (ie. there must be a word from each group and no doubling from a group).

Psuedo-code example:

Group1 = [A1, A2]
Group2 = [B1, B2]
Group3 = [C1, C2]
Group4 = [D1, D2]

Result:
A1 B1 C1 D1, 
A2 B1 C1 D1, 
A1 B2 C1 D1 ...

Unacceptable:
A1 A2 B1 C1, 
A1 B1 B2 C1

I really don't even know where to start something like this. Initial groups are arrays.

Thanks in advance.

1

1 Answer 1

2

This should do the trick:

function cartesian() {
    var r = [], arg = arguments, max = arg.length-1; //r=results, arg=the arrays you sent, max=number of arrays you sent
    function helper(arr, i) {// this is a recursive function
        for (var j=0, l=arg[i].length; j<l; j++) { //for 0 to the current array's length
            var a = arr.slice(0); // clone array sent
            a.push(arg[i][j]) // add string
            if (i==max) { // reached 4 elements, add that as possibility
                r.push(a);
            } else // if its not 4, call recursive function sending the current possibility array and the following index of the array to choose from
                helper(a, i+1);
        }
    }
    helper([], 0); // this starts the recursive function, sending an empty array and index 0 (start with nothing from 0)
    return r; // after recursive function ends, return possibilities
};

Group1 = ["A1", "A2"]
Group2 = ["B1", "B2"]
Group3 = ["C1", "C2"]
Group4 = ["D1", "D2"]

console.log(cartesian(Group1,Group2,Group3,Group4));
Sign up to request clarification or add additional context in comments.

5 Comments

This looks promising -- care to explain it a bit to a js and CS neophyte?
Well, took it from here: stackoverflow.com/questions/15298912/…. But will comment code
Thanks, my search missed that one.
This suits my needs just fine. Thank you.
No problem, was a bit hard to find. Commented code, hope it helps

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.