projects
/
advent-of-code-17.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a8bef43
)
Tidied imports and type annotations
author
Neil Smith
<neil.git@njae.me.uk>
Thu, 14 Dec 2017 12:52:14 +0000
(12:52 +0000)
committer
Neil Smith
<neil.git@njae.me.uk>
Thu, 14 Dec 2017 12:52:14 +0000
(12:52 +0000)
src/advent14/advent14.hs
patch
|
blob
|
history
diff --git
a/src/advent14/advent14.hs
b/src/advent14/advent14.hs
index 45c9dd2c45a67ea85f7714e93b2cb27899b37006..5ca281766e91e03b4f8d75644b8504f7bbf43ccc 100644
(file)
--- a/
src/advent14/advent14.hs
+++ b/
src/advent14/advent14.hs
@@
-3,7
+3,6
@@
import Data.Char (ord)
import Text.Printf (printf)
import Data.Bits (xor)
import qualified Data.Map.Strict as M
import Text.Printf (printf)
import Data.Bits (xor)
import qualified Data.Map.Strict as M
-import Data.Map.Strict ((!))
import qualified Data.Graph as G
type CellMap = M.Map (Int, Int) Bool
import qualified Data.Graph as G
type CellMap = M.Map (Int, Int) Bool
@@
-15,10
+14,6
@@
main = do
print $ part1 puzzleKey
print $ part2 puzzleKey
print $ part1 puzzleKey
print $ part2 puzzleKey
--- part1 :: String -> Int
--- part1 key = sum rowCounts
--- where hashes = map knotHash $ rowSpecs key
--- rowCounts = map (countSetBits . binify) hashes
part1 :: String -> Int
part1 key = sum rowCounts
part1 :: String -> Int
part1 key = sum rowCounts
@@
-26,7
+21,7
@@
part1 key = sum rowCounts
rowCounts = map countSetBits binHashes
rowCounts = map countSetBits binHashes
-
--
part2 :: String -> Int
+part2 :: String -> Int
part2 key = length $ cellEdges cells
where binHashes = map binHash $ rowSpecs key
cells = presentCells binHashes
part2 key = length $ cellEdges cells
where binHashes = map binHash $ rowSpecs key
cells = presentCells binHashes
@@
-44,14
+39,13
@@
presentCells binHashes = M.fromList [((r, c), True) | r <- [0..127], c <- [0..12
adjacentCells :: CellMap -> (Int, Int) -> [(Int, Int)]
adjacentCells cells (r, c) = filter (\k -> M.member k cells) possibles
where possibles = [(r, c - 1), (r, c + 1), (r - 1, c), (r + 1, c)]
adjacentCells :: CellMap -> (Int, Int) -> [(Int, Int)]
adjacentCells cells (r, c) = filter (\k -> M.member k cells) possibles
where possibles = [(r, c - 1), (r, c + 1), (r - 1, c), (r + 1, c)]
- -- isPresent rc = length $ rc `member` cells
--- cellEdges :: CellMap -> Int
+cellEdges :: CellMap -> [G.SCC (Int, Int)]
cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <- M.keys cells]
rowSpecs :: String -> [String]
cellEdges cells = G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <- M.keys cells]
rowSpecs :: String -> [String]
-rowSpecs key = map (((key ++ "-") ++) . show)
[0..127]
+rowSpecs key = map (((key ++ "-") ++) . show)
([0..127] :: [Integer])
countSetBits :: String -> Int
countSetBits = length . filter (== '1')
countSetBits :: String -> Int
countSetBits = length . filter (== '1')
@@
-87,8
+81,8
@@
mkHashTerms :: String -> [Int]
mkHashTerms text = take (length chunk * 64) $ cycle chunk
where chunk = map ord text ++ [17, 31, 73, 47, 23]
mkHashTerms text = take (length chunk * 64) $ cycle chunk
where chunk = map ord text ++ [17, 31, 73, 47, 23]
-hexify :: [Int] -> String
-hexify = concatMap (printf "%02x")
+
--
hexify :: [Int] -> String
+
--
hexify = concatMap (printf "%02x")
binify :: [Int] -> String
binify = concatMap (printf "%08b")
binify :: [Int] -> String
binify = concatMap (printf "%08b")