Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import permutations
- from collections import Counter
- import math
- import numpy as np
- def unique_perms(m,n):
- master_list = []
- for index in range(n):
- master_list += range(m)
- allperms = permutations(master_list)
- uniques = []
- for perm in allperms:
- if perm in uniques:
- continue
- else:
- uniques.append(perm)
- return uniques
- def unique_bins(m,n,k):
- if k > m*n or m*n % k > 0:
- return 0
- if (m == 1) or (k == 1) or (n == 1 and k == m):
- return 1
- z = int(m * n / k)
- starting_perms = unique_perms(m,n)
- binned_perms = []
- for perm in starting_perms:
- potential_bin = [sorted(perm[index*z:(index+1)*z]) for index in range(k)]
- if potential_bin in binned_perms:
- continue
- else:
- binned_perms.append(potential_bin)
- print(binned_perms)
- counters = []
- unique_binned_perms = []
- for perm in binned_perms:
- counter = Counter(tuple(sorted(Counter(perm[index]).items())) for index in range(k))
- if counter in counters:
- continue
- else:
- counters.append(counter)
- unique_binned_perms.append(perm)
- print(unique_binned_perms)
- return len(unique_binned_perms)
- ms = 3
- ns = 3
- ks = 6
- results = np.zeros([ms,ns,ks], dtype=int)
- for n in range(1,ns+1):
- for m in range(1,ms+1):
- for k in range(1,ks+1):
- print("m="+str(m)+" n="+str(n)+" k="+str(k))
- results[m-1,n-1,k-1] = unique_bins(m,n,k)
- print("number = {}".format(results[m-1,n-1,k-1]))
- print(results)
Advertisement
Add Comment
Please, Sign In to add comment