X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Fadvent01%2Fadvent01.ipynb;fp=src%2Fadvent01%2Fadvent01.ipynb;h=7452dff336f2d0badebd15ccead1091e50f013ec;hb=0d01bb3582b4b7f5ee86ff37a8136161c5c061c3;hp=0000000000000000000000000000000000000000;hpb=89bf7fd456e520c5483fa138b5a49f07f2703df4;p=advent-of-code-17.git diff --git a/src/advent01/advent01.ipynb b/src/advent01/advent01.ipynb new file mode 100644 index 0000000..7452dff --- /dev/null +++ b/src/advent01/advent01.ipynb @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "{-# LANGUAGE NegativeLiterals #-}\n", + "{-# LANGUAGE FlexibleContexts #-}" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import Data.List (tails)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "digits = \"1122\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "sum_valid_pairs :: [String] -> Integer\n", + "sum_valid_pairs possibles = sum $ map (read . take 1) \n", + " $ filter (\\(x:y:_) -> x == y) \n", + " $ filter (\\p -> length p == 2) possibles" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "part1_extract :: String -> [String] \n", + "part1_extract digits = map (take 2) $ tails (digits ++ [head digits])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "part1 :: String -> Integer \n", + "part1 = sum_valid_pairs . part1_extract" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part1 \"1122\"" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part1 \"1111\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part1 \"1234\"" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part1 \"91212129\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "part2_extract :: String -> [String]\n", + "part2_extract digits = map (\\ds -> (take 1 ds) ++ (take 1 $ drop offset ds)) \n", + " $ take (length digits) \n", + " $ tails (digits ++ digits)\n", + " where offset = length digits `div` 2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "part2 :: String -> Integer \n", + "part2 = sum_valid_pairs . part2_extract" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"12\",\"12\",\"21\",\"21\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"1122\"" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"1122\"" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"11\",\"22\",\"11\",\"22\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"1212\"" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"1212\"" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"12\",\"21\",\"21\",\"12\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"1221\"" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"1221\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"14\",\"22\",\"35\",\"41\",\"22\",\"53\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"123425\"" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"123425\"" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"11\",\"22\",\"33\",\"11\",\"22\",\"33\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"123123\"" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"123123\"" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"11\",\"24\",\"11\",\"35\",\"11\",\"42\",\"11\",\"53\"]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2_extract \"12131415\"" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "part2 \"12131415\"" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "main :: IO ()\n", + "main = do \n", + " digits <- readFile \"../../data/advent01.txt\"\n", + " print $ part1 digits\n", + " print $ part2 digits" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1158\n", + "1132" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "main" + ] + }, + { + "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 +}