Facebook
From Colorant Stork, 3 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 76
  1. def multiPermus(els):
  2.     N = sum(els[k] for k in els)
  3.     keys = els.keys()
  4.     ret = []
  5.     def rec(soFar):
  6.         if len(soFar)==N:
  7.             ret.append(tuple(soFar))
  8.             return
  9.         for k in keys:
  10.             if els[k]>0:
  11.                 els[k] -= 1
  12.                 rec(soFar+[k])
  13.                 els[k] += 1
  14.     rec([])
  15.     return ret
  16.  
  17. def countBrute(n, m):
  18.     ret = set()
  19.     b = []
  20.     N = m*n
  21.     for j in range(1, m+1): b += [j]*n
  22.     for t in multiPermus({k: n for k in range(1, m+1)}):
  23.         add = True
  24.         for j in range(N):
  25.             if t[j:]+t[:j] in ret: #or (t[j:]+t[:j])[::-1] in ret: #uncomment if can also flip
  26.                 #print ("Found equivalent ", t, t[j:]+t[:j])
  27.                 add=False
  28.                 break
  29.         if add:
  30.             ret.add(t)
  31.     return len(ret)
  32.  
  33.  
  34. print ([countBrute(n, 3) for n in range(1, 5)])