|
| 1 | +import qualified Data.PQueue.Prio.Min as P |
1 | 2 | import qualified Data.Array as A
|
2 | 3 | import qualified Data.IntMap as M
|
3 | 4 | import qualified Data.Set as S
|
4 |
| -import qualified Data.Heap as H |
5 | 5 | import Data.Maybe (isJust, isNothing)
|
6 | 6 | import Data.Maybe (catMaybes, fromJust)
|
7 | 7 |
|
@@ -109,23 +109,23 @@ unsolvable (Burrow _ rm) = f A 0 || f B 1 || f C 2 || f D 3
|
109 | 109 | g e (L a ) = a /= e
|
110 | 110 | g e _ = False
|
111 | 111 |
|
112 |
| -type PH = H.MinPrioHeap Cost Burrow |
| 112 | +type PH = P.MinPQueue Cost Burrow |
113 | 113 | type SB = S.Set Burrow
|
114 | 114 |
|
115 | 115 | solve :: Burrow -> Cost
|
116 |
| -solve b = loop S.empty $ H.singleton (0, b) |
| 116 | +solve b = loop S.empty $ P.singleton 0 b |
117 | 117 | where
|
118 | 118 | loop :: SB -> PH -> Cost
|
119 | 119 | loop s m | solved b = c
|
120 | 120 | | otherwise = loop s' m''
|
121 |
| - where ((c, b), m') = fromJust $ H.view m |
| 121 | + where ((c, b), m') = fromJust $ P.minViewWithKey m |
122 | 122 | lh = [moveToHallway r h b | r <- [0..3], h <- hallwayPositions]
|
123 | 123 | lr = [moveToRoom h r b | r <- [0..3], h <- hallwayPositions]
|
124 | 124 | l = h lr ++ h lh
|
125 | 125 | h = filter (\(b,c) -> S.notMember b s)
|
126 | 126 | . filter (not . unsolvable . fst)
|
127 | 127 | . catMaybes
|
128 |
| - m'' = foldr H.insert m' $ map (\(b,c') -> (c + c', b)) l |
| 128 | + m'' = foldr (uncurry P.insert) m' $ map (\(b,c') -> (c + c', b)) l |
129 | 129 | s' = S.insert b s
|
130 | 130 |
|
131 | 131 | main = print $ solve input
|
0 commit comments