projects
/
advent-of-code-17.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added day 17 description
[advent-of-code-17.git]
/
src
/
advent14
/
advent14.hs
diff --git
a/src/advent14/advent14.hs
b/src/advent14/advent14.hs
index d091ee1dde5287eb0d4b5bf822084577c5a9c764..698853c7bcd2c60b0a891598e0ee9b0bbcc9f41f 100644
(file)
--- a/
src/advent14/advent14.hs
+++ b/
src/advent14/advent14.hs
@@
-2,10
+2,11
@@
import Data.List.Split (chunksOf)
import Data.Char (ord)
import Text.Printf (printf)
import Data.Bits (xor)
import Data.Char (ord)
import Text.Printf (printf)
import Data.Bits (xor)
-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)
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"
puzzleKey = "xlqgujun"
@@
-35,16
+36,16
@@
numKey :: (Int, Int) -> Int
numKey (r, c) = 128 * r + c
numKey (r, c) = 128 * r + c
-presentCells :: [String] -> Cell
Map
-presentCells bhs =
M.fromList [((r, c), True
) | r <- [0..127], c <- [0..127], (bhs!!r)!!c == '1']
+presentCells :: [String] -> Cell
Set
+presentCells bhs =
S.fromList [(r, c
) | r <- [0..127], c <- [0..127], (bhs!!r)!!c == '1']
-adjacentCells :: Cell
Map
-> (Int, Int) -> [(Int, Int)]
-adjacentCells cells (r, c) = filter (\k ->
M
.member k cells) possibles
+adjacentCells :: Cell
Set
-> (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)]
where possibles = [(r, c - 1), (r, c + 1), (r - 1, c), (r + 1, c)]
-cellEdges :: Cell
Map
-> [G.SCC (Int, Int)]
-cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <-
M.key
s cells]
+cellEdges :: Cell
Set
-> [G.SCC (Int, Int)]
+cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <-
S.elem
s cells]
rowSpecs :: String -> [String]
rowSpecs key = map (((key ++ "-") ++) . show) ([0..127] :: [Integer])
rowSpecs :: String -> [String]
rowSpecs key = map (((key ++ "-") ++) . show) ([0..127] :: [Integer])