aboutsummaryrefslogtreecommitdiff
path: root/Puzzle14.hs
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2017-12-14 16:32:31 +0100
committerYuchen Pei <me@ypei.me>2017-12-14 16:32:31 +0100
commit5dfee5ce272db6827aecd13bc2902be50dcf21b0 (patch)
treeb8ca7779e3653993f8e9028129fcbc96f1445140 /Puzzle14.hs
parent87c005e7577ddc214b604e28b27f5c46a9d9edec (diff)
finished Day 14 part 1
Diffstat (limited to 'Puzzle14.hs')
-rw-r--r--Puzzle14.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/Puzzle14.hs b/Puzzle14.hs
new file mode 100644
index 0000000..d536c8d
--- /dev/null
+++ b/Puzzle14.hs
@@ -0,0 +1,44 @@
+import Puzzle10 (knotHash)
+import qualified Data.Map as Map
+import Data.Map (Map)
+-- import Data.Char (digit2Int)
+
+hex2Bin '0' = "0000"
+hex2Bin '1' = "0001"
+hex2Bin '2' = "0010"
+hex2Bin '3' = "0011"
+hex2Bin '4' = "0100"
+hex2Bin '5' = "0101"
+hex2Bin '6' = "0110"
+hex2Bin '7' = "0111"
+hex2Bin '8' = "1000"
+hex2Bin '9' = "1001"
+hex2Bin 'a' = "1010"
+hex2Bin 'b' = "1011"
+hex2Bin 'c' = "1100"
+hex2Bin 'd' = "1101"
+hex2Bin 'e' = "1110"
+hex2Bin 'f' = "1111"
+
+matrix :: [Char] -> [[Char]]
+matrix xs = (mconcat . (fmap hex2Bin) . knotHash . (\x -> xs ++ "-" ++ (show x))) <$> [0 .. 127]
+
+solve1 :: [Char] -> Int
+solve1 = length . (filter (=='1')) . mconcat . matrix
+
+i2B :: Char -> Bool
+i2B '0' = False
+i2B '1' = True
+
+
+truthMat :: [Char] -> [[Bool]]
+truthMat = fmap (fmap i2B) . matrix
+
+mat2Map :: [[a]] -> Map (Int, Int) a
+mat2Map xs = Map.fromList $ mconcat $ fmap f $ zipWith (,) [0 .. length xs - 1] xs
+ where f (x, ys) = zipWith (,) ((\y -> (x,y)) <$> [0 .. length ys]) ys
+
+step :: (Int, [(Int, Int)], Map (Int, Int) Bool) -> Int
+step (n, queue, mat)
+ | null mat = n
+ | null queue = head $ Map.toList mat