Solve InterviewCake's reverse-words
Wrote a function to reverse the words in a list of characters. A word is a space-delimited strings of characters. The trick here is to first reverse the entire string and then reverse each word individually.
This commit is contained in:
		
							parent
							
								
									9fc29831e0
								
							
						
					
					
						commit
						acf1b8c4f0
					
				
					 2 changed files with 64 additions and 1 deletions
				
			
		
							
								
								
									
										63
									
								
								scratch/deepmind/part_two/reverse-words.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								scratch/deepmind/part_two/reverse-words.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | ||||||
|  | import unittest | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def reverse(xs, i, j): | ||||||
|  |     """Reverse array of characters, xs, in-place.""" | ||||||
|  |     while i < j: | ||||||
|  |         xs[i], xs[j] = xs[j], xs[i] | ||||||
|  |         i += 1 | ||||||
|  |         j -= 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def reverse_words(xs): | ||||||
|  |     reverse(xs, 0, len(xs) - 1) | ||||||
|  |     i = 0 | ||||||
|  |     j = i | ||||||
|  |     while j < len(xs): | ||||||
|  |         while j < len(xs) and xs[j] != ' ': | ||||||
|  |             j += 1 | ||||||
|  |         reverse(xs, i, j - 1) | ||||||
|  |         j += 1 | ||||||
|  |         i = j | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Tests | ||||||
|  | class Test(unittest.TestCase): | ||||||
|  |     def test_one_word(self): | ||||||
|  |         message = list('vault') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('vault') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  |     def test_two_words(self): | ||||||
|  |         message = list('thief cake') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('cake thief') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  |     def test_three_words(self): | ||||||
|  |         message = list('one another get') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('get another one') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  |     def test_multiple_words_same_length(self): | ||||||
|  |         message = list('rat the ate cat the') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('the cat ate the rat') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  |     def test_multiple_words_different_lengths(self): | ||||||
|  |         message = list('yummy is cake bundt chocolate') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('chocolate bundt cake is yummy') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  |     def test_empty_string(self): | ||||||
|  |         message = list('') | ||||||
|  |         reverse_words(message) | ||||||
|  |         expected = list('') | ||||||
|  |         self.assertEqual(message, expected) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | unittest.main(verbosity=2) | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| * Array and string manipulation | * Array and string manipulation | ||||||
| ** DONE Merging Meeting Times | ** DONE Merging Meeting Times | ||||||
| ** DONE Reverse String in Place | ** DONE Reverse String in Place | ||||||
| ** TODO Reverse Words | ** DONE Reverse Words | ||||||
| ** TODO Merge Sorted Arrays | ** TODO Merge Sorted Arrays | ||||||
| ** TODO Cafe Order Checker | ** TODO Cafe Order Checker | ||||||
| * Hashing and hash tables | * Hashing and hash tables | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue