X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;ds=sidebyside;f=advent06.hs;fp=advent06.hs;h=4d99fd2930df872e7febb52274966a72521a4b5a;hb=d7f603546349671e29d25bc65c4eab34121eb8ed;hp=0000000000000000000000000000000000000000;hpb=89d586750fc7153f025f2e867b1205fd188d83d8;p=advent-of-code-16.git diff --git a/advent06.hs b/advent06.hs new file mode 100644 index 0000000..4d99fd2 --- /dev/null +++ b/advent06.hs @@ -0,0 +1,42 @@ +module Main(main) where + +import Data.List (last, intersperse, sortBy, intercalate, isInfixOf, transpose) +import Data.List.Split (splitOn) +import Data.Char (isLetter, ord, chr) +import qualified Data.Map.Lazy as Map + + +input = "cxdnnyjw" + +main :: IO () +main = do + text <- readFile "advent06.txt" + let message = lines text + part1 message + part2 message + + +part1 :: [String] -> IO () +part1 message = do + print $ map (fst) $ map (mostCommon) $ map (countedLetters) $ transpose message + +part2 :: [String] -> IO () +part2 message = do + print $ map (fst) $ map (leastCommon) $ map (countedLetters) $ transpose message + + + +countedLetters :: String -> Map.Map Char Int +countedLetters name = Map.fromListWith (+) [(c, 1) | c <- filter (isLetter) name] + +mostCommon = Map.foldlWithKey (mostCommonP) ('a', 0) + +mostCommonP (letter0, count0) letter count + | count > count0 = (letter, count) + | otherwise = (letter0, count0) + +leastCommon = Map.foldlWithKey (leastCommonP) ('a', maxBound :: Int) + +leastCommonP (letter0, count0) letter count + | count < count0 = (letter, count) + | otherwise = (letter0, count0) \ No newline at end of file