Guest User

index_to_code.py

a guest
Jun 6th, 2023
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.73 KB | None | 0 0
  1. def M(n, k): # n down, k across in Mahonian number triangle
  2.     if n == 1 and k == 0:
  3.         return 1
  4.     elif n < 0 or k < 0 or k > n*(n-1)/2:
  5.         return 0
  6.     else:
  7.         return M(n, k-1) + M(n-1, k) - M(n-1, k-n)
  8.  
  9. def index_to_code(index, length, weight):
  10.     n = length
  11.     k = weight
  12.     code = [0]*length
  13.     total = 0
  14.     if index > M(n+1, k): # index too high
  15.         raise ValueError('Index is too high for the given amount of digits and digital sum.')
  16.     while k:
  17.         m = M(n, k)
  18.         if m + total <= index:
  19.             total += m
  20.             code[n-1] += 1
  21.             k -= 1
  22.         elif m + total > index:
  23.             n -= 1
  24.     return code
  25.  
  26. print(*reversed(index_to_code(69, 5, 5)), sep='')
Advertisement
Add Comment
Please, Sign In to add comment