X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Fadvent04%2Fadvent04.hs;fp=src%2Fadvent04%2Fadvent04.hs;h=85408d8dd83dbc6d7b9aee4c00d326d644f8300c;hb=e3253beb006544daee146dd54f71b301890adaeb;hp=b8ae85c8a46f885b993184c43ecc25676446ce44;hpb=44f12be1a7004e39cb6e4064a335bcecf7cc728a;p=advent-of-code-17.git diff --git a/src/advent04/advent04.hs b/src/advent04/advent04.hs index b8ae85c..85408d8 100644 --- a/src/advent04/advent04.hs +++ b/src/advent04/advent04.hs @@ -1,11 +1,9 @@ -import Data.List (sort) -import Data.List.Split (splitOn) -import qualified Data.Map.Strict as M +import Data.List (sort, nub) main :: IO () main = do text <- readFile "data/advent04.txt" - let passphrases = map parseLine $ lines text + let passphrases = map words $ lines text print $ part1 passphrases print $ part2 passphrases @@ -15,14 +13,8 @@ part1 = length . filter (not . containsDuplicates) part2 :: [[String]] -> Int part2 = length . filter (not . containsAnagrams) -parseLine :: String -> [String] -parseLine = filter (not . null) . splitOn " " - -frequency :: (Ord a) => [a] -> M.Map a Int -frequency xs = M.fromListWith (+) [(x, 1) | x <- xs] - containsDuplicates :: [String] -> Bool -containsDuplicates = (not . M.null) . M.filter (> 1) . frequency +containsDuplicates passphrase = (length passphrase) /= (length $ nub passphrase) containsAnagrams :: [String] -> Bool containsAnagrams = containsDuplicates . (map sort)