22 lines
		
	
	
		
			588 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			588 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| takeUntilMax :: [Int] -> Int -> (Int, [Int])
 | |
| takeUntilMax [] m = (m, [])
 | |
| takeUntilMax [x] _ = (x, [x])
 | |
| takeUntilMax (x:xs) m
 | |
|     | x == m = (x, [x])
 | |
|     | otherwise =
 | |
|         let (m', xs') = takeUntilMax xs m
 | |
|         in (max m' x, x:xs')
 | |
| 
 | |
| doTakeUntilMax :: [Int] -> [Int]
 | |
| doTakeUntilMax l = l'
 | |
|     where (m, l') = takeUntilMax l m
 | |
| 
 | |
| takeUntilMax' :: [Int] -> Int -> (Int, [Int])
 | |
| takeUntilMax' [] m = (m, [])
 | |
| takeUntilMax' [x] _ = (x, [x])
 | |
| takeUntilMax' (x:xs) m
 | |
|     | x == m = (maximum (x:xs), [x])
 | |
|     | otherwise =
 | |
|         let (m', xs') = takeUntilMax' xs m
 | |
|         in (max m' x, x:xs')
 |