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')
|