prevent slow list appending in regroup&expand
This commit is contained in:
parent
3ce3c1d893
commit
96a623ac07
21
Main.hs
21
Main.hs
|
|
@ -68,23 +68,30 @@ align ((Add, m):ms) ys = Conflict [m] [] [] : align ms ys
|
|||
align ms ((Add, y):ys) = Conflict [] [] [y] : align ms ys
|
||||
align _ _ = error "diffs do not align"
|
||||
|
||||
-- TODO this is quadratic, call regroup first and case it
|
||||
regroup :: [Merged] -> [Merged]
|
||||
regroup [] = []
|
||||
regroup (Ok []:xs) = regroup xs
|
||||
regroup (Ok a:Ok b:xs) = regroup (Ok (a ++ b) : xs)
|
||||
regroup (x@(Ok a):xs) =
|
||||
case regroup xs of
|
||||
(Ok b:xs') -> Ok (a ++ b) : xs'
|
||||
xs' -> x : xs'
|
||||
regroup (Conflict [] [] []:xs) = regroup xs
|
||||
regroup (Conflict m1 o1 y1:Conflict m2 o2 y2:xs) =
|
||||
regroup (Conflict (m1 ++ m2) (o1 ++ o2) (y1 ++ y2) : xs)
|
||||
regroup (x@(Conflict m1 o1 y1):xs) =
|
||||
case regroup xs of
|
||||
(Conflict m2 o2 y2:xs') -> Conflict (m1 ++ m2) (o1 ++ o2) (y1 ++ y2) : xs'
|
||||
xs' -> x : xs'
|
||||
regroup (x:xs) = x : regroup xs
|
||||
|
||||
expand :: Int -> [Merged] -> [Merged]
|
||||
expand n = go
|
||||
where
|
||||
go [] = []
|
||||
go (Conflict m1 o1 y1:Ok a:Conflict m2 o2 y2:xs)
|
||||
| length a <= n =
|
||||
go $ Conflict (m1 ++ a ++ m2) (o1 ++ a ++ o2) (y1 ++ a ++ y2) : xs
|
||||
go (x@(Conflict m1 o1 y1):xs) =
|
||||
case go xs of
|
||||
(Ok a:Conflict m2 o2 y2:xs')
|
||||
| length a <= n ->
|
||||
Conflict (m1 ++ a ++ m2) (o1 ++ a ++ o2) (y1 ++ a ++ y2) : xs'
|
||||
xs' -> x : xs'
|
||||
go (x:xs) = x : go xs
|
||||
|
||||
zeal (Conflict m o y) =
|
||||
|
|
|
|||
Loading…
Reference in a new issue