Day 14 now using a set
authorNeil Smith <neil.git@njae.me.uk>
Thu, 14 Dec 2017 22:03:41 +0000 (22:03 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Thu, 14 Dec 2017 22:03:41 +0000 (22:03 +0000)
advent-of-code.cabal
src/advent14/advent14.hs

index 5a2aa81521afe9aa62fec37e14c3e778b9ccec27..e133aae9550c5453b16cb4e855695bbeae1af161 100644 (file)
@@ -135,7 +135,6 @@ executable advent14
                      , containers
                      , parallel
 
-
 executable advent14serial
   hs-source-dirs:      src/advent14
   main-is:             advent14serial.hs
@@ -143,3 +142,4 @@ executable advent14serial
   build-depends:       base >= 4.7 && < 5
                      , split
                      , containers
+
index d091ee1dde5287eb0d4b5bf822084577c5a9c764..8c492530d19eb53222c7dbb6baecbf59e5df70ea 100644 (file)
@@ -2,10 +2,13 @@ import Data.List.Split (chunksOf)
 import Data.Char (ord)
 import Text.Printf (printf)
 import Data.Bits (xor)
-import qualified Data.Map.Strict as M
+-- import qualified Data.Map.Strict as M
+import qualified Data.Set as S
 import qualified Data.Graph as G
 import Control.Parallel.Strategies (parMap, rpar)
-type CellMap = M.Map (Int, Int) Bool
+
+
+type CellSet = S.Set (Int, Int)
 
 puzzleKey = "xlqgujun"
 
@@ -35,16 +38,16 @@ numKey :: (Int, Int) -> Int
 numKey (r, c) = 128 * r + c
 
 
-presentCells :: [String] -> CellMap
-presentCells bhs = M.fromList [((r, c), True) | r <- [0..127], c <- [0..127], (bhs!!r)!!c == '1']
+presentCells :: [String] -> CellSet
+presentCells bhs = S.fromList [(r, c) | r <- [0..127], c <- [0..127], (bhs!!r)!!c == '1']
 
-adjacentCells :: CellMap -> (Int, Int) -> [(Int, Int)]
-adjacentCells cells (r, c) = filter (\k -> M.member k cells) possibles
+adjacentCells :: CellSet -> (Int, Int) -> [(Int, Int)]
+adjacentCells cells (r, c) = filter (\k -> S.member k cells) possibles
   where possibles = [(r, c - 1), (r, c + 1), (r - 1, c), (r + 1, c)]
 
 
-cellEdges :: CellMap -> [G.SCC (Int, Int)]
-cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <- M.keys cells]
+cellEdges :: CellSet -> [G.SCC (Int, Int)]
+cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <- S.elems cells]
 
 rowSpecs :: String -> [String]
 rowSpecs key = map (((key ++ "-") ++) . show) ([0..127] :: [Integer])