Advertisement
Guest User

Untitled

a guest
Apr 1st, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.98 KB | None | 0 0
  1. from tqdm import tqdm
  2. import itertools
  3. from itertools import chain, combinations
  4.  
  5.  
  6. def powerset(iterable):
  7.     "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
  8.     s = list(iterable)
  9.     return chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))
  10.  
  11.  
  12. for n in range(9):
  13.  
  14.     nodes = list(itertools.product(*(range(i, n) for i in range(n))))
  15.  
  16.     cnt = {v: 0 for v in nodes}
  17.  
  18.     cnt[tuple(range(n))] = 1
  19.  
  20.     for _ in range(n * (n - 1) // 2 + 3):
  21.         print(n, _, sum(cnt.values()))
  22.         cnt2 = {v: 0 for v in nodes}
  23.         for a, b in tqdm(cnt.items()):
  24.             for r in powerset(range(n)):
  25.                 for v in r:
  26.                     if a[v] != v and a[v] not in r:
  27.                         break
  28.                 else:
  29.                     pt = list(a)
  30.                     for v, nv in zip(r, r[1:]):
  31.                         pt[v] = nv
  32.                     pt = tuple(pt)
  33.                     cnt2[pt] += b
  34.         cnt = cnt2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement