Add 'universe/' from commit '8ad51b24dd'
				
					
				
			git-subtree-dir: universe git-subtree-mainline:15110e6de9git-subtree-split:8ad51b24dd
This commit is contained in:
		
						commit
						fb9380ba26
					
				
					 131 changed files with 13792 additions and 0 deletions
				
			
		
							
								
								
									
										59
									
								
								universe/deepmind/merging-ranges.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								universe/deepmind/merging-ranges.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| import unittest | ||||
| 
 | ||||
| 
 | ||||
| def merge_ranges(xs): | ||||
|     xs.sort() | ||||
|     result = [xs[0]] | ||||
|     for curr in xs[1:]: | ||||
|         a, z = result[-1] | ||||
|         if z >= curr[0]: | ||||
|             result[-1] = (a, max(z, curr[1])) | ||||
|         else: | ||||
|             result.append(curr) | ||||
|     return result | ||||
| 
 | ||||
| 
 | ||||
| # Tests | ||||
| class Test(unittest.TestCase): | ||||
|     def test_meetings_overlap(self): | ||||
|         actual = merge_ranges([(1, 3), (2, 4)]) | ||||
|         expected = [(1, 4)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_meetings_touch(self): | ||||
|         actual = merge_ranges([(5, 6), (6, 8)]) | ||||
|         expected = [(5, 8)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_meeting_contains_other_meeting(self): | ||||
|         actual = merge_ranges([(1, 8), (2, 5)]) | ||||
|         expected = [(1, 8)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_meetings_stay_separate(self): | ||||
|         actual = merge_ranges([(1, 3), (4, 8)]) | ||||
|         expected = [(1, 3), (4, 8)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_multiple_merged_meetings(self): | ||||
|         actual = merge_ranges([(1, 4), (2, 5), (5, 8)]) | ||||
|         expected = [(1, 8)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_meetings_not_sorted(self): | ||||
|         actual = merge_ranges([(5, 8), (1, 4), (6, 8)]) | ||||
|         expected = [(1, 4), (5, 8)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_one_long_meeting_contains_smaller_meetings(self): | ||||
|         actual = merge_ranges([(1, 10), (2, 5), (6, 8), (9, 10), (10, 12)]) | ||||
|         expected = [(1, 12)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_sample_input(self): | ||||
|         actual = merge_ranges([(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)]) | ||||
|         expected = [(0, 1), (3, 8), (9, 12)] | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
| 
 | ||||
| unittest.main(verbosity=2) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue