-
Notifications
You must be signed in to change notification settings - Fork 0
/
Willem.hs
27 lines (21 loc) · 942 Bytes
/
Willem.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module Willem where
import Data.List (sort)
paths1 :: Ord a => (a, a) -> (a, a) -> [(a, a)] -> [[(a, a)]]
paths1 (a, f) (b, c) _ | c >= f = [[]]
paths1 _ _ [] = []
paths1 r s@(b, c) ((d, e):xs) | d > c = []
| d <= b || e <= c = paths1 r s xs
paths1 r s@(_,sb) (x@(_, xb):xs) = map (x:) (paths1 r (sb,xb) xs) ++ paths1 r s xs
paths0 :: Ord a => (a, a) -> [(a, a)] -> [[(a, a)]]
paths0 (a, _) ((b, _):_) | b > a = []
paths0 r@(a, _) ((_, c):xs) | c <= a = paths0 r xs
paths0 r (x:xs) = map (x:) (paths1 r x xs) ++ paths0 r xs
paths0' :: Ord a => (a, a) -> [(a, a)] -> [[(a, a)]]
paths0' (a, _) ((b, _):_) | b > a = []
paths0' r@(a, _) ((_, c):xs) | c <= a = paths0' r xs
paths0' r (x:xs) = map (x:) (paths1 r x xs) ++ paths0' r xs
paths0' _ [ ] = [ ]
paths :: Ord a => (a, a) -> [(a, a)] -> [[(a, a)]]
paths = (. sort) . paths0
paths' :: Ord a => (a, a) -> [(a, a)] -> [[(a, a)]]
paths' = (. sort) . paths0'