diff options
author | Yuchen Pei <me@ypei.me> | 2017-12-14 16:32:31 +0100 |
---|---|---|
committer | Yuchen Pei <me@ypei.me> | 2017-12-14 16:32:31 +0100 |
commit | 5dfee5ce272db6827aecd13bc2902be50dcf21b0 (patch) | |
tree | b8ca7779e3653993f8e9028129fcbc96f1445140 /Puzzle14.hs | |
parent | 87c005e7577ddc214b604e28b27f5c46a9d9edec (diff) |
finished Day 14 part 1
Diffstat (limited to 'Puzzle14.hs')
-rw-r--r-- | Puzzle14.hs | 44 |
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 |