From: Jack Kinsey Date: Sun, 2 Dec 2018 08:27:46 +0000 (-0500) Subject: Complete Day 2 X-Git-Url: http://git.jkinsey.net/?p=adventofcode2018.git;a=commitdiff_plain;h=301917895f3c44067b7459cf8ac54c0c2a68fb56 Complete Day 2 --- diff --git a/day02/boxes.hs b/day02/boxes.hs new file mode 100644 index 0000000..b7d322c --- /dev/null +++ b/day02/boxes.hs @@ -0,0 +1,35 @@ +import qualified Data.Map as M + +main :: IO () +main = do + input <- getContents + let ids = lines input + let count_twos = countN 2 ids + let count_threes = countN 3 ids + print (count_twos * count_threes) + putStrLn . abc $ ids + +countN :: Int -> [String] -> Int +countN check_count = sum . map (go check_count) + where go :: Int -> String -> Int + go cc test = if any (== cc) . M.elems . countChar $ test + then 1 + else 0 + +countChar :: String -> M.Map Char Int +countChar = foldl go M.empty + where go :: M.Map Char Int -> Char -> M.Map Char Int + go chmap char = M.insert char ((M.findWithDefault 0 char chmap) + 1) chmap + +abc :: [String] -> String +abc (i:is) + | null test = abc is + | otherwise = head test + where cor_len = (length i) - 1 + test = filter (\s -> (length s) == cor_len) . map (diff i) $ is + +diff :: Eq a => [a] -> [a] -> [a] +diff [] [] = [] +diff (a:as) (b:bs) + | a == b = (a : diff as bs) + | otherwise = diff as bs