Skip to content

Commit 1cf5e6e

Browse files
committed
day15: cleanup a bit
1 parent 7a52a62 commit 1cf5e6e

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

day15.hs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import Criterion.Main
44
import Data.Function
55
import qualified Data.IntMap as IM
6-
import Data.IntMap.Strict (IntMap)
6+
import Data.IntMap (IntMap)
77
import Data.IntSet (IntSet)
88
import qualified Data.IntSet as IS
99
import Data.Map (Map)
1010
import qualified Data.Map as M
11+
import Data.List
1112

1213
type Grid = IntMap Int
1314

@@ -61,7 +62,7 @@ embig = concat . take 5 . iterate (map (map succW)) . map (concat . take 5 . ite
6162

6263
type PQueue a = IntMap [a]
6364

64-
-- pminView :: PQueue a -> ((Key, a), PQueue a)
65+
pminView :: PQueue a -> ((Int, a), PQueue a)
6566
pminView p =
6667
let Just (l, p') = IM.minViewWithKey p
6768
in case l of
@@ -74,8 +75,8 @@ pins k x = IM.insertWith (++) k [x]
7475
pempty :: PQueue a
7576
pempty = IM.empty
7677

77-
neighbors :: Grid -> Int -> IntSet
78-
neighbors g p = IS.filter (`IM.member` g) (IS.fromList (conv <$> [(x -1, y), (x, y + 1), (x + 1, y), (x, y -1)]))
78+
neighbors :: Int -> [Int]
79+
neighbors p = conv <$> [(x -1, y), (x, y + 1), (x + 1, y), (x, y -1)]
7980
where
8081
(x, y) = from p
8182

@@ -93,7 +94,7 @@ dijkstra g s = step1 & step2
9394
((d, u), q') = pminView q
9495
unseen' = IS.delete u unseen
9596
-- for all neighbors of u, visit it and thread the distance map and priority queue
96-
(dv', q'') = IS.foldl' visit (dv, q') (neighbors g u)
97+
(dv', q'') = foldl' visit (dv, q') (neighbors u)
9798
where
9899
-- to visit a point p', make sure it's in the graph
99100
visit (dv, q') p'
@@ -106,10 +107,13 @@ dijkstra g s = step1 & step2
106107
-- if it's better then update distance for p' in dv to be alt
107108
(dv'', q'') = if alt < dv IM.! p' then (IM.insert p' alt dv, pins alt p' q') else (dv, q')
108109

110+
part1 :: (Grid, Int) -> Int
109111
part1 (inp, n) = dijkstra inp (conv (1, 1)) IM.! conv (n, n)
110112

113+
part2 :: (Grid, Int) -> Int
111114
part2 = part1
112115

116+
main :: IO ()
113117
main = do
114118
let dayNumber = 15 :: Int
115119
let dayString = "day" <> show dayNumber

readme.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -353,17 +353,17 @@ variance introduced by outliers: 55% (severely inflated)
353353

354354
```
355355
benchmarking day15/part1
356-
time 28.84 ms (28.27 ms .. 29.51 ms)
357-
0.997 R² (0.992 R² .. 0.999 R²)
358-
mean 29.88 ms (29.11 ms .. 31.74 ms)
359-
std dev 2.642 ms (879.3 μs .. 4.691 ms)
360-
variance introduced by outliers: 34% (moderately inflated)
356+
time 24.50 ms (24.03 ms .. 24.98 ms)
357+
0.997 R² (0.994 R² .. 0.999 R²)
358+
mean 24.98 ms (24.49 ms .. 26.32 ms)
359+
std dev 1.657 ms (771.3 μs .. 3.205 ms)
360+
variance introduced by outliers: 25% (moderately inflated)
361361
362362
benchmarking day15/part2
363-
time 1.172 s (1.088 s .. 1.259 s)
364-
0.999 R² (0.997 R² .. 1.000 R²)
365-
mean 1.213 s (1.190 s .. 1.244 s)
366-
std dev 29.96 ms (12.16 ms .. 39.32 ms)
363+
time 1.051 s (955.2 ms .. 1.137 s)
364+
0.998 R² (0.998 R² .. 1.000 R²)
365+
mean 1.098 s (1.073 s .. 1.112 s)
366+
std dev 24.15 ms (9.049 ms .. 32.99 ms)
367367
variance introduced by outliers: 19% (moderately inflated)
368368
```
369369
</details>

0 commit comments

Comments
 (0)