Guest User

Untitled

a guest
Oct 13th, 2020
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.05 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. # n!/k!(n-k)!
  4. def combinations(n, k):
  5.     if k > n/2:
  6.         return combinations(n, n-k)
  7.     result = 1
  8.     for i in range(0, k):
  9.         result *= (n-i)
  10.         result //= (i+1)
  11.     return result
  12.  
  13. # zwraca liczbę elementów w poszukiwanej kombinacji
  14. # i numer kombinacji o tej liczbie elementow
  15. def liczba_elementow(n, i):
  16.     k = 1
  17.     while i >= combinations(n, k):
  18.         i -= combinations(n, k)
  19.         k += 1
  20.     return k, i
  21.  
  22. # zwraca kombinację k-elementową o indeksie i spośród n elementów, z najmniejszym elementem równym
  23. # start
  24. def kombinacja1(n, k, i, start):
  25.     if k == 1:
  26.         return str(start + i)
  27.     if i < combinations(n-1, k-1):
  28.         return str(start) + kombinacja1(n-1, k-1, i, start+1)
  29.     else:
  30.         return kombinacja1(n-1, k, i - combinations(n-1, k-1), start+1)
  31.  
  32. # zwraca kombinację o indeksie i spośród n elementów
  33. def kombinacja(n, i):
  34.     k, i2 = liczba_elementow(n, i)
  35.     return kombinacja1(n, k, i2, 1)
  36.  
  37. # test
  38. for i in range(0, 32):
  39.     print(kombinacja(5, i))
  40.  
Advertisement
Add Comment
Please, Sign In to add comment