Tried day 14
authorNeil Smith <neil.git@njae.me.uk>
Thu, 14 Dec 2017 12:33:11 +0000 (12:33 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Thu, 14 Dec 2017 12:33:11 +0000 (12:33 +0000)
advent-of-code.cabal
src/advent14/advent14.hs

index 0461d0b764a94886e399fe6ca31e0a77455f682c..a5666f4c6d3e23f05412e2baddecb029a80db94c 100644 (file)
@@ -126,3 +126,10 @@ executable advent13
                      , text
                      , megaparsec
 
+executable advent14
+  hs-source-dirs:      src/advent14
+  main-is:             advent14.hs
+  default-language:    Haskell2010
+  build-depends:       base >= 4.7 && < 5
+                     , split
+                     , containers
index 940fe7b4d9c6ed811589001b66ff34b075eb1821..206d43ec04f0faaca0cce94ce3f1addbe765a99e 100644 (file)
@@ -2,14 +2,52 @@ 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 Data.Map.Strict ((!))
+import qualified Data.Graph as G
+
+type CellMap = M.Map (Int, Int) Bool
 
 puzzleKey = "xlqgujun"
 
+main :: IO ()
+main = do
+  print $ part1 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
-    where hashes = map knotHash $ rowSpecs key
-          rowCounts = map (countSetBits . binify) hashes
+    where binHashes = map binHash $ rowSpecs key
+          rowCounts = map countSetBits binHashes
+
+
+-- part2 :: String -> Int
+part2 key = cells
+    where binHashes = map binHash $ rowSpecs key
+          cells = presentCells binHashes
+
+binHash :: String -> String
+binHash = binify . knotHash
+
+numKey :: (Int, Int) -> Int
+numKey (r, c) = 128 * r + c
+
+
+presentCells :: [String] -> CellMap
+presentCells binHashes = M.fromList [((r, c), True) | r <- [0..127], c <- [0..127], (binHashes!!r)!!c == '1']
+
+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 cells = length $ G.stronglyConnComp [(k, numKey k, map numKey $ adjacentCells cells k) | k <- M.keys cells]
 
 rowSpecs :: String -> [String]
 rowSpecs key = map (((key ++ "-") ++) . show) [0..127]
@@ -18,6 +56,7 @@ countSetBits :: String -> Int
 countSetBits = length . filter (== '1')
 
 
+
 knotHash :: String -> [Int]
 knotHash input = densify tied
     where (tied, _, _) = foldl step ([0..255], 0, 0) hashTerms