X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=adventofcode1702%2Fapp%2Fadvent02.ipynb;fp=adventofcode1702%2Fapp%2Fadvent02.ipynb;h=66a1ac908026510654c37193b4653becb4b43f6f;hb=bb4e947b1e698e036b6b5462b7c0d22d091014fd;hp=0000000000000000000000000000000000000000;hpb=1c73a76288c91ef6b410b2034bc324b60eb9a827;p=advent-of-code-17.git diff --git a/adventofcode1702/app/advent02.ipynb b/adventofcode1702/app/advent02.ipynb new file mode 100644 index 0000000..66a1ac9 --- /dev/null +++ b/adventofcode1702/app/advent02.ipynb @@ -0,0 +1,325 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "{-# LANGUAGE NegativeLiterals #-}\n", + "{-# LANGUAGE FlexibleContexts #-}" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import Text.Parsec \n", + "import Text.ParserCombinators.Parsec.Number" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "sFile = sLine `sepEndBy` newline \n", + "sLine = int `sepBy` onlySpaces" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "onlySpaces = many (oneOf \" \\t\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "parseFile :: String -> Either ParseError [[Int]]\n", + "parseFile input = parse sFile \"(unknown)\" input\n", + "\n", + "parseLine :: String -> Either ParseError [Int]\n", + "parseLine input = parse sLine \"(unknown)\" input\n", + "\n", + "successfulParse :: Either ParseError [a] -> [a]\n", + "successfulParse (Left _) = []\n", + "successfulParse (Right a) = a" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "main :: IO ()\n", + "main = do \n", + " text <- readFile \"../../data/advent02.txt\"\n", + " let sheet = successfulParse $ parseFile text\n", + "-- print sheet\n", + " print $ part1 sheet\n", + " print $ part2 sheet" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "39126\n", + "258" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "main" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Right [179,2358,5197,867,163,4418,3135,5049,187,166,4682,5080,5541,172,4294,1397]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "parseLine \"179 2358 5197 867 163 4418 3135 5049 187 166 4682 5080 5541 172 4294 1397\"" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Right [[1,2],[8,9]]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "parseFile \"1 2\\n8 9\"" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[1,2],[8,9]]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "successfulParse $ parseFile \"1 2\\n8 9\"" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "cSum :: [Int] -> Int\n", + "cSum row = (maximum row) - (minimum row)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "check :: [[Int]] -> Int\n", + "check = sum . (map cSum)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "check $ successfulParse $ parseFile \"1 2\\n8 9\"" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "part1 = check" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(2,1),(3,1),(4,1),(4,2)]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "digits = [1,2,3,4]\n", + "[(a, b) | a <- digits, b <- digits, a /= b, a `mod` b == 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(1,1),(2,2),(3,3),(4,4)]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "zip digits digits" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[179,2358,5197,867,163,4418,3135,5049,187,166,4682,5080,5541,172,4294,1397]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Right digits = parseLine \"179 2358 5197 867 163 4418 3135 5049 187 166 4682 5080 5541 172 4294 1397\"\n", + "digits" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "27" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sum [a `div` b | a <- digits, b <- digits, a /= b, a `mod` b == 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "p2cSum digits = sum [a `div` b | a <- digits, b <- digits, a /= b, a `mod` b == 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "part2 = sum . map p2cSum" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Haskell", + "language": "haskell", + "name": "haskell" + }, + "language_info": { + "codemirror_mode": "ihaskell", + "file_extension": ".hs", + "name": "haskell", + "version": "8.0.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}