From 24b1a84448be9e25f30984ef241f649174fdfcef Mon Sep 17 00:00:00 2001 From: Neil Smith Date: Sun, 2 Dec 2018 11:23:27 +0000 Subject: [PATCH] Day 2 --- advent-of-code.cabal | 6 + data/advent02.txt | 250 +++++++++++++++++++++++++++++++++++++++ src/advent02/advent02.hs | 34 ++++++ 3 files changed, 290 insertions(+) create mode 100644 data/advent02.txt create mode 100644 src/advent02/advent02.hs diff --git a/advent-of-code.cabal b/advent-of-code.cabal index e1d7dc8..1d8048b 100644 --- a/advent-of-code.cabal +++ b/advent-of-code.cabal @@ -27,3 +27,9 @@ executable advent01 , text , megaparsec , containers + +executable advent02 + hs-source-dirs: src/advent02 + main-is: advent02.hs + default-language: Haskell2010 + build-depends: base >= 4.7 && < 5 \ No newline at end of file diff --git a/data/advent02.txt b/data/advent02.txt new file mode 100644 index 0000000..077f200 --- /dev/null +++ b/data/advent02.txt @@ -0,0 +1,250 @@ +pnebjqralgdgckzfifvtxywomu +pnebjqsalrdgcqzfihotxhwomu +pneajqsalrdgckzfihytxywoml +pnepjqsalrwgckztihvtxywomu +pnhbjqsalrdgckzfimvtxywodu +pnwbjqsdlrdgckzfihvnxywomu +inebjqnalrdgckzfihvtxzwomu +pnebjssalhdgckzfihvtsywomu +pnebjqjalrdgckzfiavtxywoku +vnebjqsalrdgckzfihvbxmwomu +phebjksaurdgckzfihvtxywomu +pneojqealrdgckzhihvtxywomu +snebjqsalrdgckzqihvtxyzomu +pnebjqsalrtackzfihvtxswomu +bnebjqlalrdgckzfihvtxywhmu +pnebjqfalrdgckzfijvtxywomi +fnehjbsalrdgckzfihvtxywomu +pnebjasalrdgckzdihvtxqwomu +pnebjhsaljdgckzfihvtxywmmu +pnebjqsalrdgckzfihvsxykoau +pnebjqsalrdgckzbihvtdywomc +pnobjqsalrxgckzfihvtxywomh +pnebjqstlrdgchzfihvtxywnmu +pnebjquaxrdgckzfihvtxywolu +pqebjqsalrdgcdzfihvtcywomu +xnabjqsalrdgckzfihvtxywmmu +rnebjqsalrdgckzfihvtxmwouu +vaebjqsalrdgckcfihvtxywomu +pnebjqsalrpgcnzfihvbxywomu +pcvbjqsalrdjckzfihvtxywomu +pneyjqsafrdgckzfihdtxywomu +pxedjqsalrdgckzfihvtxyzomu +pnebjqsalrdgctzfihnyxywomu +pnebjqsalrdgckzfihvtnylsmu +pnebjqsalrdyckzfihvbxycomu +fnebjqsalrdgckzfihvtxtwomc +pnobjqsalrdgckdfihvtxywomh +pqebjqsalrdgcqzfihvtxywymu +pnebxqsalrdgckzficvtwywomu +pnebjqshlragczzfihvtxywomu +pnebqqsalrdackzfihttxywomu +pnebjqsalrdsckwfbhvtxywomu +pnehjqsalrdgcuzfxhvtxywomu +pnebjqsavrdgckzfihvexywomn +pnebunsalrdgckzfihvtxywomi +pnebjxsalrdgckzfmhvtpywomu +rnebjqsalrdghkzfihztxywomu +pnebjqsalrigcbzfihvfxywomu +pnebqqsalrggckzfihvtxyromu +pnebjqsalrdgchzfihvtxylmmu +pnebeqsalrdgckzdihvtxywoms +pnebjqsalrdgckzzihvfxywozu +pnzbjgsalrtgckzfihvtxywomu +pnebjqsaledgckzjihvtxzwomu +pnebjqsalydgckqfihvtxywouu +pnebjqsalrdgckufihvqxdwomu +pnebjqsylrdgckzfihvdxyjomu +pnemjqsalrdgckzeihvtxywoqu +plebjasalrdgckzfihvtxywomb +pnebjqsadrdgckufihvtxyfomu +pbebjqsaardgckzfihvtxmwomu +pnebjqsalrdgcmzfihotxywgmu +pnebjqsaprdgcizfihvtxywhmu +pnebjqsalrkgcuzfihvtlywomu +pnebjqsalrdnckzfihvtxysomg +pnebjqdafrdgckzfihctxywomu +pnebjqsalrdgckzfihutxkwomp +pnebvqsalrdgclzfimvtxywomu +pnebjqralrdgcktfihvtxiwomu +pneujqsalrdsckzfzhvtxywomu +pnebfqgalrdgckzfihvtxywjmu +pneyjqsalrkgckzfihctxywomu +pndbjqsalrdgckzfjhvtxywouu +pneljnsalrdgcozfihvtxywomu +phebjqsalrdgckzfihxtxdwomu +pnlbjqsalrhgckzfzhvtxywomu +pnebjqsalrsgckzfiovtxywwmu +pncbjqsalrdgfkzfivvtxywomu +nnebjqsalrdgckzfthvtxycomu +pnebjqwalsdgckzfixvtxywomu +pnebjtsalrdgcfzfimvtxywomu +pnebjqsvlrdgckzfihutxfwomu +pnebjmsalrdgckzkxhvtxywomu +pnekjqsllrdgckzfinvtxywomu +pneijqsxlrdgckzfihvtxywjmu +wnxbjqsafrdgckzfihvtxywomu +pnebjqskledgokzfihvtxywomu +pnebjqvalrdgckzfihvtxytoju +pneqjqsalrdgckzfilvthywomu +pnebjqsalrdgckzfihvokywomf +bnebjqsalrdgckufihvtxywimu +pnebjqsaurdgckzfihvtrywosu +pnebjmsaludgckzfihvtxywomn +pnebdqsalrdgcktfihvtxywodu +pnebjqjylzdgckzfihvtxywomu +piebjqsalrdgcrzfihstxywomu +pnebjqsaurdgckwfnhvtxywomu +pnebxqsajrdgcjzfihvtxywomu +pnebjqsalrdghsdfihvtxywomu +pnebcqsxlrdgckzfihvtxyaomu +pnefjqsalrdgckzfuhvtxyworu +pnebjqsalrdlcksfihvteywomu +pnebjqlalrgackzfihvtxywomu +pnebdqsalrdickzfihvtxdwomu +pneujksalrdgctzfihvtxywomu +pnebjqsalrduckzfihvsxywomf +pnebjqsalrdgckcfihotxywomd +envbjqsalsdgckzfihvtxywomu +pnebjqsalzdgcvzzihvtxywomu +pnebjqsalrdyckzflhvyxywomu +pnebjqsalrdglkzfihstxymomu +pnebmqsalrdgokzfihvtxywoml +pnebjqsylrdnckzfihatxywomu +pnebjqaflndgckzfihvtxywomu +pneboqsagragckzfihvtxywomu +peebjqstlndgckzfihvtxywomu +onebjqsklrdgckzfihvtxmwomu +pnebjqjnlrdgckrfihvtxywomu +pnebjqsalrhgckzfihvqxywomh +pnebjqsalrdgckzzihvtxowomw +pnebjgsalrdgckffihltxywomu +znebaqsalcdgckzfihvtxywomu +pnnbjqeasrdgckzfihvtxywomu +rnebjqaalrxgckzfihvtxywomu +pnebjqsalrdgckaxphvtxywomu +pnebjcnalrdgnkzfihvtxywomu +pnebjasalbdgckzmihvtxywomu +pnebjqsalrdgckefjhvtmywomu +pnebjqsalrdgmkzfihvtxyoomb +pnebjqsalrkgckogihvtxywomu +pnwbjqsalrdgckztihvtxywomt +pnebjqsalrdgckzfihotgnwomu +pnebjqsdlrrgckzfihvtxyaomu +pnebvasalrdgckzfihvtsywomu +pnebrqqalrvgckzfihvtxywomu +tnebjqsglrdgqkzfihvtxywomu +pnebjqsatrsgckifihvtxywomu +pneboqsalrdgckzfihvkxywomi +pnezaqsalrdgcktfihvtxywomu +pnebjqsnlrdgckzfihvfxqwomu +pneajqsaxrmgckzfihvtxywomu +pnebjosalodgckzfihvxxywomu +pnebjqsalndgckmfihvtfywomu +pneejqsalidgckzfihgtxywomu +pnecjqsalrdgckzfihptxiwomu +tnebjqsalrdgckznihvxxywomu +ptebjqsalrdgckzfimvtxywomm +wnebjqsalndgckzfihvtxywoju +fnebmqsplrdgckzfihvtxywomu +pnlbjqsalrdghkzficvtxywomu +pnebjqsesrdgckzdihvtxywomu +pnebjqsalregokzfirvtxywomu +pnebjtualrtgckzfihvtxywomu +pnebjwsdlrdgckzfihvtxywoml +pnlbjqsayrdgckzfqhvtxywomu +pnebjwsalpdgckzfihvtxywomc +pnqbjqsalcdgckzhihvtxywomu +pneujqsalrdgckzfhhvtxrwomu +pnebjqsalqdgcizfihvtxywimu +pnebjqsacldgckzfihvwxywomu +puebjqsalrdgckzfbhvtxyeomu +pnebjqsalrdgcyimihvtxywomu +pnebjlsalrdgckzfihvtxiwome +pnebfusalrdgckzfihvtxywodu +pnebjqsalrdgvazfirvtxywomu +pnebjqsalrdgckyfohvtxywomz +gnenjqsalrdgckzfihvtxynomu +mnebjqsalrdgckhfihvtxycomu +phebjqsalrdgckzfihvtxtworu +pnebjqsalrdgdkzfihvtxywfmj +pneveqsairdgckzfihvtxywomu +pnebjqsalcdlckzfihvtxywomg +pneajqsalrdgckzfihvtxygoxu +puebjqdclrdgckzfihvtxywomu +tuebjqsalrdgckzfihvtxywoou +pwenjqsalrdgckzfihvtxywomg +pnebjqsalrdgckzfihhltywomu +pnebjqsalrdgchzqievtxywomu +pnegjqsalrdgckzfiovtxywdmu +pnebjaralrqgckzfihvtxywomu +pnebjqsalrdrckzfimvtxywomm +pnebjqsalrdgckzfpgvtxewomu +pnebjqsalrdhcqzfihitxywomu +pnebjqsalrjgckefihmtxywomu +pnebjcsalrdgcksfikvtxywomu +pnebjqsalrdgckzfihvtxywdjc +pnebjqsazrjgckzjihvtxywomu +pnfbjqsclrdgckzfihvtxybomu +pnebjqsalrdgckuqihvtxyaomu +pfpbjzsalrdgckzfihvtxywomu +pnevjqsalrdgckwfihytxywomu +pnebjqsqlrkgckzfihvtvywomu +pneejqsalrdlckzfihvtxywopu +pnebjqsalcdgxkzfihvtxywomd +pneqjqsalrdgcvzzihvtxywomu +pnvbjqsalydgctzfihvtxywomu +pnebjqsalrdgckzzihvfxywomn +pnybjqsaerdgckzfihstxywomu +pnobjqsalrdkckzfihvtxywomv +pnebjqsalridckzfihvtxywfmu +pnhbjqsaludgckyfihvtxywomu +pnetjqsaprdgykzfihvtxywomu +wnebjqsalrdvcfzfihvtxywomu +pnetjqsalrdmckwfihvtxywomu +pnebjysalrdgcszfihvtxnwomu +pnebjqsrlrdgckzfihvtxywkhu +pnubjqsplrdgcjzfihvtxywomu +pnebjqsalrdzckzficjtxywomu +pnebjqsalregckzfinvtxywoku +pnebjqsalrcgckyfivvtxywomu +pyenjqsalrdgckzfihvnxywomu +prebjqsalrdnckzfihvtxysomg +pnebjnsalrdgchzfihvaxywomu +pnebjqsalrdgckzfihxagywomu +pnebjqsalrdgckzvihvtoywoml +pnebjqsilrdgckzfihvtfywgmu +pnebjqmalrdgckzfihvtvawomu +pnebqqsalrdgckzfiuvtfywomu +pneqjqsalrdgckzfihvqxywomi +pnebjesalrsgckzfihvtxywmmu +znebjqsblrdgckzfihvlxywomu +pnebjqsalrdgckzfuhvtlyworu +pnebjqsylrdgckzfihvqxpwomu +onebjqsalfdgckifihvtxywomu +pnebjusalrdgckzfihvtxywyml +pnebjssflrdgckzfigvtxywomu +pnebjfsdzrdgckzfihvtxywomu +pnebjqsalrdgcktfihvixywocu +gnebjqnaqrdgckzfihvtxywomu +pnebjqsaqrugckzfihhtxywomu +pnebjqsxlrdgckzfihvtxlwosu +pnebjzsalrdgckzmihvtxywovu +pnebgqsalrdgckzfizvtxyjomu +pnebjqsmlrdgckzfihvtxywsmi +pnebjqsakmdgckzjihvtxywomu +pnebjqdglrdgckvfihvtxywomu +pnebmhsalrdgckxfihvtxywomu +pneejqsalrdlckzfihvnxywomu +bnebjqsalmdgckzfihvfxywomu +bnebjnsalrdgcizfihvtxywomu +pnebjqsalhdgcdzfihvbxywomu +pnebjqsjlrdgckzfihvgiywomu +pnebjisalrdgckzfihvtxywqmi +pdebjqsalrdickzfihhtxywomu +pnebjqsalrdkckzfihvjeywomu +pneyjqsalrqgckzfihvtxywohu +pnebjqsalrdgckcfihvtxjlomu +plebqwsalrdgckzfihvtxywomu +pnebjqlalrdgckzfihetxynomu +sngbjqsalrdgckzfihvmxywomu diff --git a/src/advent02/advent02.hs b/src/advent02/advent02.hs new file mode 100644 index 0000000..f2408de --- /dev/null +++ b/src/advent02/advent02.hs @@ -0,0 +1,34 @@ +import Data.List + + +main :: IO () +main = do + text <- readFile "data/advent02.txt" + let ids = lines text + print $ part1 ids + putStrLn $ part2 ids + +part1 ids = (fst counts23) * (snd counts23) + where allLetterCounts = map letterCounts ids + counts23 = foldl' addCounts (0, 0) allLetterCounts + +letterCounts :: String -> [Int] +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 + +part2 ids = uncurry sameChars closeIds + where closeIds = head $ filter (\ab -> uncurry differenceCount ab == 1) [(a, b) | a <- ids, b <- ids] + +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 + -- 2.34.1