loeb op
This commit is contained in:
parent
643296c382
commit
7b1112aa85
51
day10.hs
Normal file
51
day10.hs
Normal file
@ -0,0 +1,51 @@
|
||||
import Data.List (sort, subsequences)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
raw <- readFile "day10.txt"
|
||||
let nums = (map read $ lines raw) :: [Int]
|
||||
ansA = solveA nums
|
||||
ansB = solveB nums
|
||||
in do
|
||||
putStrLn $ "day10a: " ++ (show ansA)
|
||||
putStrLn $ "day10b: " ++ (show ansB)
|
||||
|
||||
solveA :: [Int] -> Int
|
||||
solveA nums = (filt 3 ls) * (filt 1 ls)
|
||||
where
|
||||
filt a = length . (filter (== a))
|
||||
end = 3 + (maximum nums)
|
||||
ls = (diffs . sort) (0 : end : nums)
|
||||
|
||||
solveB :: [Int] -> Int
|
||||
solveB nums = unLookup 0 $ loeb $ map (loebify ls m) ls
|
||||
where
|
||||
unLookup a ns = unMaybe $ lookup a ns
|
||||
ls = sort $ 0 : ((maximum nums) + 3) : nums
|
||||
m = (maximum nums + 3)
|
||||
|
||||
diffs :: [Int] -> [Int]
|
||||
diffs [] = []
|
||||
diffs [a] = []
|
||||
diffs (a:b:xs) = (b-a):(diffs (b:xs))
|
||||
|
||||
loeb :: Functor f => f (f a -> a) -> f a
|
||||
loeb x = go
|
||||
where
|
||||
go = fmap ($ go) x
|
||||
|
||||
loebify :: [Int] -> Int -> Int -> [(Int, Int)] -> (Int, Int)
|
||||
loebify nums m t =
|
||||
if t == m
|
||||
then (\ls -> (t, 1))
|
||||
else (\ls -> (t, sum [ f ls | f <- links ]))
|
||||
where
|
||||
vals = takeWhile (<= (t + 3)) $ dropWhile (<= t) nums
|
||||
links = map lookupify vals
|
||||
|
||||
lookupify :: Eq a => a -> [(a,b)] -> b
|
||||
lookupify k = unMaybe . (lookup k)
|
||||
|
||||
unMaybe :: Maybe a -> a
|
||||
unMaybe Nothing = error "invalid key"
|
||||
unMaybe (Just v) = v
|
103
day10.txt
Normal file
103
day10.txt
Normal file
@ -0,0 +1,103 @@
|
||||
73
|
||||
114
|
||||
100
|
||||
122
|
||||
10
|
||||
141
|
||||
89
|
||||
70
|
||||
134
|
||||
2
|
||||
116
|
||||
30
|
||||
123
|
||||
81
|
||||
104
|
||||
42
|
||||
142
|
||||
26
|
||||
15
|
||||
92
|
||||
56
|
||||
60
|
||||
3
|
||||
151
|
||||
11
|
||||
129
|
||||
167
|
||||
76
|
||||
18
|
||||
78
|
||||
32
|
||||
110
|
||||
8
|
||||
119
|
||||
164
|
||||
143
|
||||
87
|
||||
4
|
||||
9
|
||||
107
|
||||
130
|
||||
19
|
||||
52
|
||||
84
|
||||
55
|
||||
69
|
||||
71
|
||||
83
|
||||
165
|
||||
72
|
||||
156
|
||||
41
|
||||
40
|
||||
1
|
||||
61
|
||||
158
|
||||
27
|
||||
31
|
||||
155
|
||||
25
|
||||
93
|
||||
166
|
||||
59
|
||||
108
|
||||
98
|
||||
149
|
||||
124
|
||||
65
|
||||
77
|
||||
88
|
||||
46
|
||||
14
|
||||
64
|
||||
39
|
||||
140
|
||||
95
|
||||
113
|
||||
54
|
||||
66
|
||||
137
|
||||
101
|
||||
22
|
||||
82
|
||||
21
|
||||
131
|
||||
109
|
||||
45
|
||||
150
|
||||
94
|
||||
36
|
||||
20
|
||||
33
|
||||
49
|
||||
146
|
||||
157
|
||||
99
|
||||
7
|
||||
53
|
||||
161
|
||||
115
|
||||
127
|
||||
152
|
||||
128
|
Loading…
Reference in New Issue
Block a user