fork download
  1. # your code goes here
  2. def binomial(n,k):
  3. if n < 0 or k < 0 or k > n: return 0
  4. b = 1
  5. for i in range(k): b = b*(n-i)//(i+1)
  6. return b
  7.  
  8. def unchoose(n,S):
  9. k = len(S)
  10. if k == 0 or k == n: return 0
  11. j = S[0]
  12. if k == 1: return j
  13. S = [x-1 for x in S]
  14. if not j: return unchoose(n-1,S[1:])
  15. return binomial(n-1,k-1)+unchoose(n-1,S)
  16.  
  17. def choose(X,k):
  18. n = len(X)
  19. if k < 0 or k > n: return []
  20. if not k: return [[]]
  21. if k == n: return [X]
  22. return [X[:1] + S for S in choose(X[1:],k-1)] + choose(X[1:],k)
  23.  
  24. (n,k) = (7,3)
  25. for S in choose(list(range(n)),k): print((unchoose(n,S),S))
Success #stdin #stdout 0.13s 14136KB
stdin
Standard input is empty
stdout
(0, [0, 1, 2])
(1, [0, 1, 3])
(2, [0, 1, 4])
(3, [0, 1, 5])
(4, [0, 1, 6])
(5, [0, 2, 3])
(6, [0, 2, 4])
(7, [0, 2, 5])
(8, [0, 2, 6])
(9, [0, 3, 4])
(10, [0, 3, 5])
(11, [0, 3, 6])
(12, [0, 4, 5])
(13, [0, 4, 6])
(14, [0, 5, 6])
(15, [1, 2, 3])
(16, [1, 2, 4])
(17, [1, 2, 5])
(18, [1, 2, 6])
(19, [1, 3, 4])
(20, [1, 3, 5])
(21, [1, 3, 6])
(22, [1, 4, 5])
(23, [1, 4, 6])
(24, [1, 5, 6])
(25, [2, 3, 4])
(26, [2, 3, 5])
(27, [2, 3, 6])
(28, [2, 4, 5])
(29, [2, 4, 6])
(30, [2, 5, 6])
(31, [3, 4, 5])
(32, [3, 4, 6])
(33, [3, 5, 6])
(34, [4, 5, 6])