we’re going to generate all possible math equations today.
Given a a syntax like this: [1,0][+,-][2,3] which means we need all strings with 1 or 0 as first character, + or – as second character, and 2 or 3 as third character.
So that’s 8 possible combinations
1+2
1+3
1-2
1-3
0+2
0+3
0-2
0-3
My approach would work, but it would get pretty slow for slightly large values. I parse the above syntax and create an array of possible values for each token, and place that in an array.
equation_set = [];
tokens = [['1','0'],['+','-'],['2','3']]
// Initialize empty equation_set
token = tokens.pop();
foreach symbol in tokens
question_set.add(symbol)
// We now have a question_set = ['1','0']
// and tokens = [['+','-']['2','3']]
//
// Now we need to fill out the rest of the possible equations
foreach token in tokens
new_question_set = []
foreach symbol in token
foreach question in question_set
new_question_set.add(question + symbol)
question_set = new_question_set
I believe that should give me the results I want, but all those foreach’s make me rather nervous. I just now figured out this algorithm, but I feel like I’m missing something obvious. We’re messing with combinatorics, so I won’t be surprised if it’s extremely slow, but it feels like this isn’t anything special.
Cheers!
If you need to create all combinations, you will have to perform nested loops of some sort.
Make sure your iterations are performed in row major order (assuming your language stores your collection in row major order, which most but not all do). Failing to do so can have quite a large impact on performance.