41 lines
		
	
	
	
		
			909 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			909 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| # take-aways:
 | |
| #   - Use integers as lists of boolean values
 | |
| #   - Use 1 << n to compute 2^n where n = len(xs)
 | |
| 
 | |
| def set_from_int(xs, n):
 | |
|     result = []
 | |
|     for i in range(len(xs)):
 | |
|         if n & (1 << i) != 0:
 | |
|             result.append(xs[i])
 | |
|     return result
 | |
| 
 | |
| # subsets :: Set a -> List (Set a)
 | |
| def subsets(xs):
 | |
|     n = len(xs)
 | |
|     return [set_from_int(xs, i) for i in range(1 << n)]
 | |
| 
 | |
| #   0 1 2
 | |
| # 0 N Y Y
 | |
| # 1 _ N Y
 | |
| # 2 _ _ N
 | |
| 
 | |
| # For my interview, be able to compute *permutations* and *combinations*
 | |
| 
 | |
| # This differs from permutations because this is about finding combinations...
 | |
| #
 | |
| # bottom-up
 | |
| # 0 =>        { }
 | |
| # 1 =>  {3}   {4}   {3}
 | |
| # 2 => {5,4} {5,3} {4,3}
 | |
| 
 | |
| xs = [
 | |
|     ([], [[]]),
 | |
|     ([5], [[], [5]]),
 | |
|     ([5,4], [[],[5],[4],[5,4]]),
 | |
| ]
 | |
| 
 | |
| for x, expected in xs:
 | |
|     result = subsets(x)
 | |
|     print("subsets({}) => {} == {}".format(x, result, expected))
 | |
|     assert result == expected
 | |
|     print("Success!")
 |