Splice ./universe directory into ./
Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
This commit is contained in:
		
							parent
							
								
									fb9380ba26
								
							
						
					
					
						commit
						5c9079a410
					
				
					 133 changed files with 17 additions and 7979 deletions
				
			
		
							
								
								
									
										71
									
								
								data_structures_and_algorithms/cake-thief.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								data_structures_and_algorithms/cake-thief.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| import unittest | ||||
| from math import floor | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Solution | ||||
| ################################################################################ | ||||
| def max_duffel_bag_value(xs, cap): | ||||
|     ct = (cap + 1) | ||||
|     maxes = [0] * ct | ||||
|     for c in range(cap + 1): | ||||
|         for w, v in xs: | ||||
|             if w == 0 and v > 0: | ||||
|                 return float('inf') | ||||
|             if w == c: | ||||
|                 maxes[c:] = [max(maxes[c], v)] * (ct - c) | ||||
|             elif w < c: | ||||
|                 d = c - w | ||||
|                 maxes[c:] = [max(maxes[c], v + maxes[d])] * (ct - c) | ||||
|             else: | ||||
|                 continue | ||||
|     return maxes[cap] | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Tests | ||||
| ################################################################################ | ||||
| class Test(unittest.TestCase): | ||||
|     def test_one_cake(self): | ||||
|         actual = max_duffel_bag_value([(2, 1)], 9) | ||||
|         expected = 4 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_two_cakes(self): | ||||
|         actual = max_duffel_bag_value([(4, 4), (5, 5)], 9) | ||||
|         expected = 9 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_only_take_less_valuable_cake(self): | ||||
|         actual = max_duffel_bag_value([(4, 4), (5, 5)], 12) | ||||
|         expected = 12 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_lots_of_cakes(self): | ||||
|         actual = max_duffel_bag_value([(2, 3), (3, 6), (5, 1), (6, 1), (7, 1), | ||||
|                                        (8, 1)], 7) | ||||
|         expected = 12 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_value_to_weight_ratio_is_not_optimal(self): | ||||
|         actual = max_duffel_bag_value([(51, 52), (50, 50)], 100) | ||||
|         expected = 100 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_zero_capacity(self): | ||||
|         actual = max_duffel_bag_value([(1, 2)], 0) | ||||
|         expected = 0 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_cake_with_zero_value_and_weight(self): | ||||
|         actual = max_duffel_bag_value([(0, 0), (2, 1)], 7) | ||||
|         expected = 3 | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_cake_with_non_zero_value_and_zero_weight(self): | ||||
|         actual = max_duffel_bag_value([(0, 5)], 5) | ||||
|         expected = float('inf') | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
| 
 | ||||
| unittest.main(verbosity=2) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue