47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| 
 | |
| 
 | |
| def sort_scores(xs, highest_possible_score):
 | |
|     result = []
 | |
|     buckets = [0] * highest_possible_score
 | |
| 
 | |
|     for x in xs:
 | |
|         buckets[x - 1] += 1
 | |
| 
 | |
|     for i in range(highest_possible_score - 1, -1, -1):
 | |
|         if buckets[i] > 0:
 | |
|             for _ in range(buckets[i]):
 | |
|                 result.append(i + 1)
 | |
| 
 | |
|     return result
 | |
| 
 | |
| 
 | |
| # Tests
 | |
| class Test(unittest.TestCase):
 | |
|     def test_no_scores(self):
 | |
|         actual = sort_scores([], 100)
 | |
|         expected = []
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_one_score(self):
 | |
|         actual = sort_scores([55], 100)
 | |
|         expected = [55]
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_two_scores(self):
 | |
|         actual = sort_scores([30, 60], 100)
 | |
|         expected = [60, 30]
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_many_scores(self):
 | |
|         actual = sort_scores([37, 89, 41, 65, 91, 53], 100)
 | |
|         expected = [91, 89, 65, 53, 41, 37]
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_repeated_scores(self):
 | |
|         actual = sort_scores([20, 10, 30, 30, 10, 20], 100)
 | |
|         expected = [30, 30, 20, 20, 10, 10]
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
| 
 | |
| unittest.main(verbosity=2)
 |