2.2
[advent18.git] / 2 / s2.icl
1 module s2
2
3 import StdEnv
4
5 import Data.Func
6 import Data.List
7 import Data.Tuple
8
9 getinput f
10 # (ok, c, f) = freadc f
11 | not ok = []
12 = [c:getinput f]
13
14 split :: [Char] [Char] -> [[Char]]
15 split [] [] = []
16 split c [] = [reverse c]
17 split c ['\n':rest] = [reverse c:split [] rest]
18 split c [r:rest] = split [r:c] rest
19
20 Start w
21 # (io, w) = stdio w
22 = map (map fst o filter (uncurry (==)) o zip)
23 $ flatten
24 $ filter (not o isEmpty)
25 $ proc
26 $ split []
27 $ getinput io
28
29 proc [] = []
30 proc [x:xs] = [[(e, x)\\e<-xs | length [()\\a<-x & b<-e | a<>b] <= 1]:proc xs]