9 "{-# LANGUAGE NegativeLiterals #-}\n",
10 "{-# LANGUAGE FlexibleContexts #-}"
15 "execution_count": 21,
19 "import Text.Parsec \n",
20 "import Text.ParserCombinators.Parsec.Number"
25 "execution_count": 22,
29 "sFile = sLine `sepEndBy` newline \n",
30 "sLine = int `sepBy` onlySpaces"
35 "execution_count": 23,
39 "onlySpaces = many (oneOf \" \\t\")"
44 "execution_count": 24,
48 "parseFile :: String -> Either ParseError [[Int]]\n",
49 "parseFile input = parse sFile \"(unknown)\" input\n",
51 "parseLine :: String -> Either ParseError [Int]\n",
52 "parseLine input = parse sLine \"(unknown)\" input\n",
54 "successfulParse :: Either ParseError [a] -> [a]\n",
55 "successfulParse (Left _) = []\n",
56 "successfulParse (Right a) = a"
61 "execution_count": 65,
67 " text <- readFile \"../../data/advent02.txt\"\n",
68 " let sheet = successfulParse $ parseFile text\n",
70 " print $ part1 sheet\n",
71 " print $ part2 sheet"
76 "execution_count": 66,
87 "output_type": "display_data"
96 "execution_count": 27,
102 "Right [179,2358,5197,867,163,4418,3135,5049,187,166,4682,5080,5541,172,4294,1397]"
106 "output_type": "display_data"
110 "parseLine \"179 2358 5197 867 163 4418 3135 5049 187 166 4682 5080 5541 172 4294 1397\""
115 "execution_count": 28,
121 "Right [[1,2],[8,9]]"
125 "output_type": "display_data"
129 "parseFile \"1 2\\n8 9\""
134 "execution_count": 32,
144 "output_type": "display_data"
148 "successfulParse $ parseFile \"1 2\\n8 9\""
153 "execution_count": 37,
157 "cSum :: [Int] -> Int\n",
158 "cSum row = (maximum row) - (minimum row)"
163 "execution_count": 42,
167 "check :: [[Int]] -> Int\n",
168 "check = sum . (map cSum)"
173 "execution_count": 43,
183 "output_type": "display_data"
187 "check $ successfulParse $ parseFile \"1 2\\n8 9\""
192 "execution_count": 45,
201 "execution_count": 54,
207 "[(2,1),(3,1),(4,1),(4,2)]"
211 "output_type": "display_data"
215 "digits = [1,2,3,4]\n",
216 "[(a, b) | a <- digits, b <- digits, a /= b, a `mod` b == 0]"
221 "execution_count": 51,
227 "[(1,1),(2,2),(3,3),(4,4)]"
231 "output_type": "display_data"
240 "execution_count": null,
247 "execution_count": 55,
253 "[179,2358,5197,867,163,4418,3135,5049,187,166,4682,5080,5541,172,4294,1397]"
257 "output_type": "display_data"
261 "Right digits = parseLine \"179 2358 5197 867 163 4418 3135 5049 187 166 4682 5080 5541 172 4294 1397\"\n",
267 "execution_count": 60,
277 "output_type": "display_data"
281 "sum [a `div` b | a <- digits, b <- digits, a /= b, a `mod` b == 0]"
286 "execution_count": 61,
290 "p2cSum digits = sum [a `div` b | a <- digits, b <- digits, a /= b, a `mod` b == 0]"
295 "execution_count": 64,
299 "part2 = sum . map p2cSum"
304 "execution_count": null,
312 "display_name": "Haskell",
313 "language": "haskell",
317 "codemirror_mode": "ihaskell",
318 "file_extension": ".hs",