From: Neil Smith Date: Sun, 2 Dec 2018 11:57:39 +0000 (+0000) Subject: Tidying day 2 X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=66a0927e1c274f32f4096f82587160dd7af8def6;p=advent-of-code-18.git Tidying day 2 --- diff --git a/src/advent02/advent02.hs b/src/advent02/advent02.hs index f2408de..c2bd908 100644 --- a/src/advent02/advent02.hs +++ b/src/advent02/advent02.hs @@ -1,6 +1,5 @@ import Data.List - main :: IO () main = do text <- readFile "data/advent02.txt" @@ -17,18 +16,12 @@ letterCounts = map length . group . sort addCounts :: (Int, Int) -> [Int] -> (Int, Int) addCounts (twos, threes) counts = (twos', threes') - where twos' = if has2 counts then twos + 1 else twos - threes' = if has3 counts then threes + 1 else threes - -has2 = elem 2 -has3 = elem 3 + where twos' = if 2 `elem` counts then twos + 1 else twos + threes' = if 3 `elem` counts then threes + 1 else threes -part2 ids = uncurry sameChars closeIds - where closeIds = head $ filter (\ab -> uncurry differenceCount ab == 1) [(a, b) | a <- ids, b <- ids] +part2 ids = uncurry intersect closeIds + where closeIds = head $ filter (\ab -> uncurry differenceCount ab == 1) + [(a, b) | a:rest <- tails ids, b <- rest] differenceCount :: String -> String -> Int differenceCount this that = length $ filter (\(a, b) -> a /= b) $ zip this that - -sameChars :: String -> String -> String -sameChars this that = map fst $ filter (\(a, b) -> a == b) $ zip this that -