Search code examples
cmathmatrixcombinationsarrangeoverride

Finding or arranging all combinations of given numbers


I hope all you are doing great. I have an interesting question, which has stuck me. Its about generating combinations in a precise order. For example i have 4 variables(can be vary) and these 4 variables has some limit to increase for example in this case 2. so i want to generate 2d matrix in a order as:


0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 1 0 0
1 0 1 0
1 0 0 1
0 1 1 0
0 1 0 1
0 0 1 1 
1 1 1 0
0 1 1 1
1 1 1 1 
2 0 0 0
0 2 0 0
0 0 2 0
0 0 0 2
2 1 0 0
2 0 1 0 
......
......
and so on.

the number of variables ( in this case 4 ) can be varied and also the maximum limit ( in this case 4) can be varied. Even i have also find all possible combinations but i am not able to arrange them in this sequence. it would be great if somebody gives an answer. cheers!


Solution

  • I'm going to assume you've got n variables, each of which is allowed to range from 0 to b-1. What you want is just counting n-digit numbers in base b. For example, if n = 2 and b = 3, then the sequence you want to produce is

    00
    01
    02
    10
    11
    12
    20
    21
    22
    

    To implement this, write a loop something like the following: (warning: untested code)

    def inc(v, b):
      for i in range(len(v)):
         v[i] = v[i] + 1
         if v[i] < b:
            break
         v[i] = 0
    def is_zero(v):
       for i in range(len(v)):
          if v[i] != 0:
             return False
       return True
    
    v = [0, 0, 0]
    b = 3
    while True:
      print(v)
      inc(v, b)
      if is_zero(v):
         break
    

    If you look carefully at how this works, you should see how to generalize it if your variables have different upper bounds.