weirdmathgirl

Stupidly Suboptimal Combinatorics Code

Mar 14th, 2025
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.65 KB | Source Code | 0 0
  1. from itertools import permutations
  2. from collections import Counter
  3. import math
  4. import numpy as np
  5.  
  6.  
  7. def unique_perms(m,n):
  8.     master_list = []
  9.     for index in range(n):
  10.         master_list += range(m)
  11.     allperms = permutations(master_list)
  12.     uniques = []
  13.     for perm in allperms:
  14.         if perm in uniques:
  15.             continue
  16.         else:
  17.             uniques.append(perm)
  18.     return uniques
  19.  
  20.  
  21. def unique_bins(m,n,k):
  22.     if k > m*n or m*n % k > 0:
  23.         return 0
  24.     if (m == 1) or (k == 1) or (n == 1 and k == m):
  25.         return 1
  26.     z = int(m * n / k)
  27.     starting_perms = unique_perms(m,n)
  28.     binned_perms = []
  29.     for perm in starting_perms:
  30.         potential_bin = [sorted(perm[index*z:(index+1)*z]) for index in range(k)]
  31.         if potential_bin in binned_perms:
  32.             continue
  33.         else:
  34.             binned_perms.append(potential_bin)
  35.     print(binned_perms)
  36.     counters = []
  37.     unique_binned_perms = []
  38.     for perm in binned_perms:
  39.         counter = Counter(tuple(sorted(Counter(perm[index]).items())) for index in range(k))
  40.         if counter in counters:
  41.             continue
  42.         else:
  43.             counters.append(counter)
  44.             unique_binned_perms.append(perm)
  45.     print(unique_binned_perms)
  46.     return len(unique_binned_perms)
  47.    
  48.    
  49. ms = 3
  50. ns = 3
  51. ks = 6
  52. results = np.zeros([ms,ns,ks], dtype=int)
  53. for n in range(1,ns+1):
  54.     for m in range(1,ms+1):
  55.         for k in range(1,ks+1):
  56.             print("m="+str(m)+" n="+str(n)+" k="+str(k))
  57.             results[m-1,n-1,k-1] = unique_bins(m,n,k)
  58.             print("number = {}".format(results[m-1,n-1,k-1]))
  59. print(results)
  60.  
  61.  
  62.  
Advertisement
Add Comment
Please, Sign In to add comment