Day 2
authorNeil Smith <neil.git@njae.me.uk>
Sun, 2 Dec 2018 11:23:27 +0000 (11:23 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Sun, 2 Dec 2018 11:23:27 +0000 (11:23 +0000)
advent-of-code.cabal
data/advent02.txt [new file with mode: 0644]
src/advent02/advent02.hs [new file with mode: 0644]

index e1d7dc8cdd6f4391dd4785e4fdb70e1022fa63cf..1d8048ba26be85cb158c774d6809e26986fb4b82 100644 (file)
@@ -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 (file)
index 0000000..077f200
--- /dev/null
@@ -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 (file)
index 0000000..f2408de
--- /dev/null
@@ -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
+